app.1574223183500.js 4.37 MB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552
/******/ (function(modules) { // webpackBootstrap
/******/ 	// install a JSONP callback for chunk loading
/******/ 	function webpackJsonpCallback(data) {
/******/ 		var chunkIds = data[0];
/******/ 		var moreModules = data[1];
/******/
/******/
/******/ 		// add "moreModules" to the modules object,
/******/ 		// then flag all "chunkIds" as loaded and fire callback
/******/ 		var moduleId, chunkId, i = 0, resolves = [];
/******/ 		for(;i < chunkIds.length; i++) {
/******/ 			chunkId = chunkIds[i];
/******/ 			if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ 				resolves.push(installedChunks[chunkId][0]);
/******/ 			}
/******/ 			installedChunks[chunkId] = 0;
/******/ 		}
/******/ 		for(moduleId in moreModules) {
/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				modules[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ 		while(resolves.length) {
/******/ 			resolves.shift()();
/******/ 		}
/******/
/******/ 	};
/******/
/******/ 	function hotDisposeChunk(chunkId) {
/******/ 		delete installedChunks[chunkId];
/******/ 	}
/******/ 	var parentHotUpdateCallback = (typeof self !== 'undefined' ? self : this)["webpackHotUpdate"];
/******/ 	(typeof self !== 'undefined' ? self : this)["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ 	function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ 		hotAddUpdateChunk(chunkId, moreModules);
/******/ 		if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ 	} ;
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadUpdateChunk(chunkId) {
/******/ 		var script = document.createElement("script");
/******/ 		script.charset = "utf-8";
/******/ 		script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ 		if (null) script.crossOrigin = null;
/******/ 		document.head.appendChild(script);
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadManifest(requestTimeout) {
/******/ 		requestTimeout = requestTimeout || 10000;
/******/ 		return new Promise(function(resolve, reject) {
/******/ 			if (typeof XMLHttpRequest === "undefined") {
/******/ 				return reject(new Error("No browser support"));
/******/ 			}
/******/ 			try {
/******/ 				var request = new XMLHttpRequest();
/******/ 				var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ 				request.open("GET", requestPath, true);
/******/ 				request.timeout = requestTimeout;
/******/ 				request.send(null);
/******/ 			} catch (err) {
/******/ 				return reject(err);
/******/ 			}
/******/ 			request.onreadystatechange = function() {
/******/ 				if (request.readyState !== 4) return;
/******/ 				if (request.status === 0) {
/******/ 					// timeout
/******/ 					reject(
/******/ 						new Error("Manifest request to " + requestPath + " timed out.")
/******/ 					);
/******/ 				} else if (request.status === 404) {
/******/ 					// no update available
/******/ 					resolve();
/******/ 				} else if (request.status !== 200 && request.status !== 304) {
/******/ 					// other failure
/******/ 					reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ 				} else {
/******/ 					// success
/******/ 					try {
/******/ 						var update = JSON.parse(request.responseText);
/******/ 					} catch (e) {
/******/ 						reject(e);
/******/ 						return;
/******/ 					}
/******/ 					resolve(update);
/******/ 				}
/******/ 			};
/******/ 		});
/******/ 	}
/******/
/******/ 	var hotApplyOnUpdate = true;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentHash = "ff19ebee8122b4573b5c";
/******/ 	var hotRequestTimeout = 10000;
/******/ 	var hotCurrentModuleData = {};
/******/ 	var hotCurrentChildModule;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParents = [];
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParentsTemp = [];
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateRequire(moduleId) {
/******/ 		var me = installedModules[moduleId];
/******/ 		if (!me) return __webpack_require__;
/******/ 		var fn = function(request) {
/******/ 			if (me.hot.active) {
/******/ 				if (installedModules[request]) {
/******/ 					if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ 						installedModules[request].parents.push(moduleId);
/******/ 					}
/******/ 				} else {
/******/ 					hotCurrentParents = [moduleId];
/******/ 					hotCurrentChildModule = request;
/******/ 				}
/******/ 				if (me.children.indexOf(request) === -1) {
/******/ 					me.children.push(request);
/******/ 				}
/******/ 			} else {
/******/ 				console.warn(
/******/ 					"[HMR] unexpected require(" +
/******/ 						request +
/******/ 						") from disposed module " +
/******/ 						moduleId
/******/ 				);
/******/ 				hotCurrentParents = [];
/******/ 			}
/******/ 			return __webpack_require__(request);
/******/ 		};
/******/ 		var ObjectFactory = function ObjectFactory(name) {
/******/ 			return {
/******/ 				configurable: true,
/******/ 				enumerable: true,
/******/ 				get: function() {
/******/ 					return __webpack_require__[name];
/******/ 				},
/******/ 				set: function(value) {
/******/ 					__webpack_require__[name] = value;
/******/ 				}
/******/ 			};
/******/ 		};
/******/ 		for (var name in __webpack_require__) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
/******/ 				name !== "e" &&
/******/ 				name !== "t"
/******/ 			) {
/******/ 				Object.defineProperty(fn, name, ObjectFactory(name));
/******/ 			}
/******/ 		}
/******/ 		fn.e = function(chunkId) {
/******/ 			if (hotStatus === "ready") hotSetStatus("prepare");
/******/ 			hotChunksLoading++;
/******/ 			return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ 				finishChunkLoading();
/******/ 				throw err;
/******/ 			});
/******/
/******/ 			function finishChunkLoading() {
/******/ 				hotChunksLoading--;
/******/ 				if (hotStatus === "prepare") {
/******/ 					if (!hotWaitingFilesMap[chunkId]) {
/******/ 						hotEnsureUpdateChunk(chunkId);
/******/ 					}
/******/ 					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ 						hotUpdateDownloaded();
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 		fn.t = function(value, mode) {
/******/ 			if (mode & 1) value = fn(value);
/******/ 			return __webpack_require__.t(value, mode & ~1);
/******/ 		};
/******/ 		return fn;
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateModule(moduleId) {
/******/ 		var hot = {
/******/ 			// private stuff
/******/ 			_acceptedDependencies: {},
/******/ 			_declinedDependencies: {},
/******/ 			_selfAccepted: false,
/******/ 			_selfDeclined: false,
/******/ 			_disposeHandlers: [],
/******/ 			_main: hotCurrentChildModule !== moduleId,
/******/
/******/ 			// Module API
/******/ 			active: true,
/******/ 			accept: function(dep, callback) {
/******/ 				if (dep === undefined) hot._selfAccepted = true;
/******/ 				else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ 				else hot._acceptedDependencies[dep] = callback || function() {};
/******/ 			},
/******/ 			decline: function(dep) {
/******/ 				if (dep === undefined) hot._selfDeclined = true;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._declinedDependencies[dep[i]] = true;
/******/ 				else hot._declinedDependencies[dep] = true;
/******/ 			},
/******/ 			dispose: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			addDisposeHandler: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			removeDisposeHandler: function(callback) {
/******/ 				var idx = hot._disposeHandlers.indexOf(callback);
/******/ 				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			// Management API
/******/ 			check: hotCheck,
/******/ 			apply: hotApply,
/******/ 			status: function(l) {
/******/ 				if (!l) return hotStatus;
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			addStatusHandler: function(l) {
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			removeStatusHandler: function(l) {
/******/ 				var idx = hotStatusHandlers.indexOf(l);
/******/ 				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			//inherit from previous dispose call
/******/ 			data: hotCurrentModuleData[moduleId]
/******/ 		};
/******/ 		hotCurrentChildModule = undefined;
/******/ 		return hot;
/******/ 	}
/******/
/******/ 	var hotStatusHandlers = [];
/******/ 	var hotStatus = "idle";
/******/
/******/ 	function hotSetStatus(newStatus) {
/******/ 		hotStatus = newStatus;
/******/ 		for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ 			hotStatusHandlers[i].call(null, newStatus);
/******/ 	}
/******/
/******/ 	// while downloading
/******/ 	var hotWaitingFiles = 0;
/******/ 	var hotChunksLoading = 0;
/******/ 	var hotWaitingFilesMap = {};
/******/ 	var hotRequestedFilesMap = {};
/******/ 	var hotAvailableFilesMap = {};
/******/ 	var hotDeferred;
/******/
/******/ 	// The update info
/******/ 	var hotUpdate, hotUpdateNewHash;
/******/
/******/ 	function toModuleId(id) {
/******/ 		var isNumber = +id + "" === id;
/******/ 		return isNumber ? +id : id;
/******/ 	}
/******/
/******/ 	function hotCheck(apply) {
/******/ 		if (hotStatus !== "idle") {
/******/ 			throw new Error("check() is only allowed in idle status");
/******/ 		}
/******/ 		hotApplyOnUpdate = apply;
/******/ 		hotSetStatus("check");
/******/ 		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ 			if (!update) {
/******/ 				hotSetStatus("idle");
/******/ 				return null;
/******/ 			}
/******/ 			hotRequestedFilesMap = {};
/******/ 			hotWaitingFilesMap = {};
/******/ 			hotAvailableFilesMap = update.c;
/******/ 			hotUpdateNewHash = update.h;
/******/
/******/ 			hotSetStatus("prepare");
/******/ 			var promise = new Promise(function(resolve, reject) {
/******/ 				hotDeferred = {
/******/ 					resolve: resolve,
/******/ 					reject: reject
/******/ 				};
/******/ 			});
/******/ 			hotUpdate = {};
/******/ 			for(var chunkId in installedChunks)
/******/ 			// eslint-disable-next-line no-lone-blocks
/******/ 			{
/******/ 				/*globals chunkId */
/******/ 				hotEnsureUpdateChunk(chunkId);
/******/ 			}
/******/ 			if (
/******/ 				hotStatus === "prepare" &&
/******/ 				hotChunksLoading === 0 &&
/******/ 				hotWaitingFiles === 0
/******/ 			) {
/******/ 				hotUpdateDownloaded();
/******/ 			}
/******/ 			return promise;
/******/ 		});
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotAddUpdateChunk(chunkId, moreModules) {
/******/ 		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ 			return;
/******/ 		hotRequestedFilesMap[chunkId] = false;
/******/ 		for (var moduleId in moreModules) {
/******/ 			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				hotUpdate[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ 			hotUpdateDownloaded();
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotEnsureUpdateChunk(chunkId) {
/******/ 		if (!hotAvailableFilesMap[chunkId]) {
/******/ 			hotWaitingFilesMap[chunkId] = true;
/******/ 		} else {
/******/ 			hotRequestedFilesMap[chunkId] = true;
/******/ 			hotWaitingFiles++;
/******/ 			hotDownloadUpdateChunk(chunkId);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotUpdateDownloaded() {
/******/ 		hotSetStatus("ready");
/******/ 		var deferred = hotDeferred;
/******/ 		hotDeferred = null;
/******/ 		if (!deferred) return;
/******/ 		if (hotApplyOnUpdate) {
/******/ 			// Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ 			// avoid triggering uncaught exception warning in Chrome.
/******/ 			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ 			Promise.resolve()
/******/ 				.then(function() {
/******/ 					return hotApply(hotApplyOnUpdate);
/******/ 				})
/******/ 				.then(
/******/ 					function(result) {
/******/ 						deferred.resolve(result);
/******/ 					},
/******/ 					function(err) {
/******/ 						deferred.reject(err);
/******/ 					}
/******/ 				);
/******/ 		} else {
/******/ 			var outdatedModules = [];
/******/ 			for (var id in hotUpdate) {
/******/ 				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 					outdatedModules.push(toModuleId(id));
/******/ 				}
/******/ 			}
/******/ 			deferred.resolve(outdatedModules);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotApply(options) {
/******/ 		if (hotStatus !== "ready")
/******/ 			throw new Error("apply() is only allowed in ready status");
/******/ 		options = options || {};
/******/
/******/ 		var cb;
/******/ 		var i;
/******/ 		var j;
/******/ 		var module;
/******/ 		var moduleId;
/******/
/******/ 		function getAffectedStuff(updateModuleId) {
/******/ 			var outdatedModules = [updateModuleId];
/******/ 			var outdatedDependencies = {};
/******/
/******/ 			var queue = outdatedModules.map(function(id) {
/******/ 				return {
/******/ 					chain: [id],
/******/ 					id: id
/******/ 				};
/******/ 			});
/******/ 			while (queue.length > 0) {
/******/ 				var queueItem = queue.pop();
/******/ 				var moduleId = queueItem.id;
/******/ 				var chain = queueItem.chain;
/******/ 				module = installedModules[moduleId];
/******/ 				if (!module || module.hot._selfAccepted) continue;
/******/ 				if (module.hot._selfDeclined) {
/******/ 					return {
/******/ 						type: "self-declined",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				if (module.hot._main) {
/******/ 					return {
/******/ 						type: "unaccepted",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				for (var i = 0; i < module.parents.length; i++) {
/******/ 					var parentId = module.parents[i];
/******/ 					var parent = installedModules[parentId];
/******/ 					if (!parent) continue;
/******/ 					if (parent.hot._declinedDependencies[moduleId]) {
/******/ 						return {
/******/ 							type: "declined",
/******/ 							chain: chain.concat([parentId]),
/******/ 							moduleId: moduleId,
/******/ 							parentId: parentId
/******/ 						};
/******/ 					}
/******/ 					if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ 					if (parent.hot._acceptedDependencies[moduleId]) {
/******/ 						if (!outdatedDependencies[parentId])
/******/ 							outdatedDependencies[parentId] = [];
/******/ 						addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ 						continue;
/******/ 					}
/******/ 					delete outdatedDependencies[parentId];
/******/ 					outdatedModules.push(parentId);
/******/ 					queue.push({
/******/ 						chain: chain.concat([parentId]),
/******/ 						id: parentId
/******/ 					});
/******/ 				}
/******/ 			}
/******/
/******/ 			return {
/******/ 				type: "accepted",
/******/ 				moduleId: updateModuleId,
/******/ 				outdatedModules: outdatedModules,
/******/ 				outdatedDependencies: outdatedDependencies
/******/ 			};
/******/ 		}
/******/
/******/ 		function addAllToSet(a, b) {
/******/ 			for (var i = 0; i < b.length; i++) {
/******/ 				var item = b[i];
/******/ 				if (a.indexOf(item) === -1) a.push(item);
/******/ 			}
/******/ 		}
/******/
/******/ 		// at begin all updates modules are outdated
/******/ 		// the "outdated" status can propagate to parents if they don't accept the children
/******/ 		var outdatedDependencies = {};
/******/ 		var outdatedModules = [];
/******/ 		var appliedUpdate = {};
/******/
/******/ 		var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ 			console.warn(
/******/ 				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ 			);
/******/ 		};
/******/
/******/ 		for (var id in hotUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 				moduleId = toModuleId(id);
/******/ 				/** @type {TODO} */
/******/ 				var result;
/******/ 				if (hotUpdate[id]) {
/******/ 					result = getAffectedStuff(moduleId);
/******/ 				} else {
/******/ 					result = {
/******/ 						type: "disposed",
/******/ 						moduleId: id
/******/ 					};
/******/ 				}
/******/ 				/** @type {Error|false} */
/******/ 				var abortError = false;
/******/ 				var doApply = false;
/******/ 				var doDispose = false;
/******/ 				var chainInfo = "";
/******/ 				if (result.chain) {
/******/ 					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ 				}
/******/ 				switch (result.type) {
/******/ 					case "self-declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of self decline: " +
/******/ 									result.moduleId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of declined dependency: " +
/******/ 									result.moduleId +
/******/ 									" in " +
/******/ 									result.parentId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "unaccepted":
/******/ 						if (options.onUnaccepted) options.onUnaccepted(result);
/******/ 						if (!options.ignoreUnaccepted)
/******/ 							abortError = new Error(
/******/ 								"Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "accepted":
/******/ 						if (options.onAccepted) options.onAccepted(result);
/******/ 						doApply = true;
/******/ 						break;
/******/ 					case "disposed":
/******/ 						if (options.onDisposed) options.onDisposed(result);
/******/ 						doDispose = true;
/******/ 						break;
/******/ 					default:
/******/ 						throw new Error("Unexception type " + result.type);
/******/ 				}
/******/ 				if (abortError) {
/******/ 					hotSetStatus("abort");
/******/ 					return Promise.reject(abortError);
/******/ 				}
/******/ 				if (doApply) {
/******/ 					appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ 					addAllToSet(outdatedModules, result.outdatedModules);
/******/ 					for (moduleId in result.outdatedDependencies) {
/******/ 						if (
/******/ 							Object.prototype.hasOwnProperty.call(
/******/ 								result.outdatedDependencies,
/******/ 								moduleId
/******/ 							)
/******/ 						) {
/******/ 							if (!outdatedDependencies[moduleId])
/******/ 								outdatedDependencies[moduleId] = [];
/******/ 							addAllToSet(
/******/ 								outdatedDependencies[moduleId],
/******/ 								result.outdatedDependencies[moduleId]
/******/ 							);
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 				if (doDispose) {
/******/ 					addAllToSet(outdatedModules, [result.moduleId]);
/******/ 					appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Store self accepted outdated modules to require them later by the module system
/******/ 		var outdatedSelfAcceptedModules = [];
/******/ 		for (i = 0; i < outdatedModules.length; i++) {
/******/ 			moduleId = outdatedModules[i];
/******/ 			if (
/******/ 				installedModules[moduleId] &&
/******/ 				installedModules[moduleId].hot._selfAccepted &&
/******/ 				// removed self-accepted modules should not be required
/******/ 				appliedUpdate[moduleId] !== warnUnexpectedRequire
/******/ 			) {
/******/ 				outdatedSelfAcceptedModules.push({
/******/ 					module: moduleId,
/******/ 					errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ 				});
/******/ 			}
/******/ 		}
/******/
/******/ 		// Now in "dispose" phase
/******/ 		hotSetStatus("dispose");
/******/ 		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ 			if (hotAvailableFilesMap[chunkId] === false) {
/******/ 				hotDisposeChunk(chunkId);
/******/ 			}
/******/ 		});
/******/
/******/ 		var idx;
/******/ 		var queue = outdatedModules.slice();
/******/ 		while (queue.length > 0) {
/******/ 			moduleId = queue.pop();
/******/ 			module = installedModules[moduleId];
/******/ 			if (!module) continue;
/******/
/******/ 			var data = {};
/******/
/******/ 			// Call dispose handlers
/******/ 			var disposeHandlers = module.hot._disposeHandlers;
/******/ 			for (j = 0; j < disposeHandlers.length; j++) {
/******/ 				cb = disposeHandlers[j];
/******/ 				cb(data);
/******/ 			}
/******/ 			hotCurrentModuleData[moduleId] = data;
/******/
/******/ 			// disable module (this disables requires from this module)
/******/ 			module.hot.active = false;
/******/
/******/ 			// remove module from cache
/******/ 			delete installedModules[moduleId];
/******/
/******/ 			// when disposing there is no need to call dispose handler
/******/ 			delete outdatedDependencies[moduleId];
/******/
/******/ 			// remove "parents" references from all children
/******/ 			for (j = 0; j < module.children.length; j++) {
/******/ 				var child = installedModules[module.children[j]];
/******/ 				if (!child) continue;
/******/ 				idx = child.parents.indexOf(moduleId);
/******/ 				if (idx >= 0) {
/******/ 					child.parents.splice(idx, 1);
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// remove outdated dependency from module children
/******/ 		var dependency;
/******/ 		var moduleOutdatedDependencies;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ 						dependency = moduleOutdatedDependencies[j];
/******/ 						idx = module.children.indexOf(dependency);
/******/ 						if (idx >= 0) module.children.splice(idx, 1);
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Now in "apply" phase
/******/ 		hotSetStatus("apply");
/******/
/******/ 		hotCurrentHash = hotUpdateNewHash;
/******/
/******/ 		// insert new code
/******/ 		for (moduleId in appliedUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ 				modules[moduleId] = appliedUpdate[moduleId];
/******/ 			}
/******/ 		}
/******/
/******/ 		// call accept handlers
/******/ 		var error = null;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					var callbacks = [];
/******/ 					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ 						dependency = moduleOutdatedDependencies[i];
/******/ 						cb = module.hot._acceptedDependencies[dependency];
/******/ 						if (cb) {
/******/ 							if (callbacks.indexOf(cb) !== -1) continue;
/******/ 							callbacks.push(cb);
/******/ 						}
/******/ 					}
/******/ 					for (i = 0; i < callbacks.length; i++) {
/******/ 						cb = callbacks[i];
/******/ 						try {
/******/ 							cb(moduleOutdatedDependencies);
/******/ 						} catch (err) {
/******/ 							if (options.onErrored) {
/******/ 								options.onErrored({
/******/ 									type: "accept-errored",
/******/ 									moduleId: moduleId,
/******/ 									dependencyId: moduleOutdatedDependencies[i],
/******/ 									error: err
/******/ 								});
/******/ 							}
/******/ 							if (!options.ignoreErrored) {
/******/ 								if (!error) error = err;
/******/ 							}
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Load self accepted modules
/******/ 		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ 			var item = outdatedSelfAcceptedModules[i];
/******/ 			moduleId = item.module;
/******/ 			hotCurrentParents = [moduleId];
/******/ 			try {
/******/ 				__webpack_require__(moduleId);
/******/ 			} catch (err) {
/******/ 				if (typeof item.errorHandler === "function") {
/******/ 					try {
/******/ 						item.errorHandler(err);
/******/ 					} catch (err2) {
/******/ 						if (options.onErrored) {
/******/ 							options.onErrored({
/******/ 								type: "self-accept-error-handler-errored",
/******/ 								moduleId: moduleId,
/******/ 								error: err2,
/******/ 								originalError: err
/******/ 							});
/******/ 						}
/******/ 						if (!options.ignoreErrored) {
/******/ 							if (!error) error = err2;
/******/ 						}
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				} else {
/******/ 					if (options.onErrored) {
/******/ 						options.onErrored({
/******/ 							type: "self-accept-errored",
/******/ 							moduleId: moduleId,
/******/ 							error: err
/******/ 						});
/******/ 					}
/******/ 					if (!options.ignoreErrored) {
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// handle errors in accept handlers and self accepted module load
/******/ 		if (error) {
/******/ 			hotSetStatus("fail");
/******/ 			return Promise.reject(error);
/******/ 		}
/******/
/******/ 		hotSetStatus("idle");
/******/ 		return new Promise(function(resolve) {
/******/ 			resolve(outdatedModules);
/******/ 		});
/******/ 	}
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// object to store loaded and loading chunks
/******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ 	// Promise = chunk loading, 0 = chunk loaded
/******/ 	var installedChunks = {
/******/ 		"app": 0
/******/ 	};
/******/
/******/
/******/
/******/ 	// script path function
/******/ 	function jsonpScriptSrc(chunkId) {
/******/ 		return __webpack_require__.p + "static/js/" + ({}[chunkId]||chunkId) + ".1574223183500.js"
/******/ 	}
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {},
/******/ 			hot: hotCreateModule(moduleId),
/******/ 			parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ 			children: []
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/ 	// This file contains only the entry chunk.
/******/ 	// The chunk loading function for additional chunks
/******/ 	__webpack_require__.e = function requireEnsure(chunkId) {
/******/ 		var promises = [];
/******/
/******/
/******/ 		// JSONP chunk loading for javascript
/******/
/******/ 		var installedChunkData = installedChunks[chunkId];
/******/ 		if(installedChunkData !== 0) { // 0 means "already installed".
/******/
/******/ 			// a Promise means "currently loading".
/******/ 			if(installedChunkData) {
/******/ 				promises.push(installedChunkData[2]);
/******/ 			} else {
/******/ 				// setup Promise in chunk cache
/******/ 				var promise = new Promise(function(resolve, reject) {
/******/ 					installedChunkData = installedChunks[chunkId] = [resolve, reject];
/******/ 				});
/******/ 				promises.push(installedChunkData[2] = promise);
/******/
/******/ 				// start chunk loading
/******/ 				var script = document.createElement('script');
/******/ 				var onScriptComplete;
/******/
/******/ 				script.charset = 'utf-8';
/******/ 				script.timeout = 120;
/******/ 				if (__webpack_require__.nc) {
/******/ 					script.setAttribute("nonce", __webpack_require__.nc);
/******/ 				}
/******/ 				script.src = jsonpScriptSrc(chunkId);
/******/
/******/ 				// create error before stack unwound to get useful stacktrace later
/******/ 				var error = new Error();
/******/ 				onScriptComplete = function (event) {
/******/ 					// avoid mem leaks in IE.
/******/ 					script.onerror = script.onload = null;
/******/ 					clearTimeout(timeout);
/******/ 					var chunk = installedChunks[chunkId];
/******/ 					if(chunk !== 0) {
/******/ 						if(chunk) {
/******/ 							var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ 							var realSrc = event && event.target && event.target.src;
/******/ 							error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ 							error.name = 'ChunkLoadError';
/******/ 							error.type = errorType;
/******/ 							error.request = realSrc;
/******/ 							chunk[1](error);
/******/ 						}
/******/ 						installedChunks[chunkId] = undefined;
/******/ 					}
/******/ 				};
/******/ 				var timeout = setTimeout(function(){
/******/ 					onScriptComplete({ type: 'timeout', target: script });
/******/ 				}, 120000);
/******/ 				script.onerror = script.onload = onScriptComplete;
/******/ 				document.head.appendChild(script);
/******/ 			}
/******/ 		}
/******/ 		return Promise.all(promises);
/******/ 	};
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// on error function for async loading
/******/ 	__webpack_require__.oe = function(err) { console.error(err); throw err; };
/******/
/******/ 	// __webpack_hash__
/******/ 	__webpack_require__.h = function() { return hotCurrentHash; };
/******/
/******/ 	var jsonpArray = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] || [];
/******/ 	var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ 	jsonpArray.push = webpackJsonpCallback;
/******/ 	jsonpArray = jsonpArray.slice();
/******/ 	for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ 	var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return hotCreateRequire(0)(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js":
/*!*****************************************************************************************!*\
  !*** ./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js ***!
  \*****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX0BiYWJlbF9ydW50aW1lQDcuNi4zQEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19AYmFiZWxfcnVudGltZUA3LjYuM0BAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcz85N2EzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\n");

/***/ }),

/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js":
/*!******************************************************************************************!*\
  !*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js ***!
  \******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js\");\n\nfunction makeResponse(result, config) {\n  return {\n    status: result[0],\n    data: utils.isSimpleObject(result[1]) ? JSON.parse(JSON.stringify(result[1])) : result[1],\n    headers: result[2],\n    config: config\n  };\n}\n\nfunction handleRequest(mockAdapter, resolve, reject, config) {\n  var url = config.url;\n  if (config.baseURL && config.url.substr(0, config.baseURL.length) === config.baseURL) {\n    url = config.url.slice(config.baseURL ? config.baseURL.length : 0);\n  }\n\n  delete config.adapter;\n  mockAdapter.history[config.method].push(config);\n\n  var handler = utils.findHandler(\n    mockAdapter.handlers,\n    config.method,\n    url,\n    config.data,\n    config.params,\n    config.headers,\n    config.baseURL\n  );\n\n  if (handler) {\n    if (handler.length === 7) {\n      utils.purgeIfReplyOnce(mockAdapter, handler);\n    }\n\n    if (handler.length === 2) {\n      // passThrough handler\n      mockAdapter.originalAdapter(config).then(resolve, reject);\n    } else if (typeof handler[3] !== 'function') {\n      utils.settle(\n        resolve,\n        reject,\n        makeResponse(handler.slice(3), config),\n        mockAdapter.delayResponse\n      );\n    } else {\n      var result = handler[3](config);\n      // TODO throw a sane exception when return value is incorrect\n      if (typeof result.then !== 'function') {\n        utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse);\n      } else {\n        result.then(\n          function(result) {\n            if (result.config && result.status) {\n              utils.settle(resolve, reject, makeResponse([result.status, result.data, result.headers], result.config), 0);\n            } else {\n              utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse);\n            }\n          },\n          function(error) {\n            if (mockAdapter.delayResponse > 0) {\n              setTimeout(function() {\n                reject(error);\n              }, mockAdapter.delayResponse);\n            } else {\n              reject(error);\n            }\n          }\n        );\n      }\n    }\n  } else {\n    // handler not found\n    utils.settle(\n      resolve,\n      reject,\n      {\n        status: 404,\n        config: config\n      },\n      mockAdapter.delayResponse\n    );\n  }\n}\n\nmodule.exports = handleRequest;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy9oYW5kbGVfcmVxdWVzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL2hhbmRsZV9yZXF1ZXN0LmpzPzEwZjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZShyZXN1bHQsIGNvbmZpZykge1xuICByZXR1cm4ge1xuICAgIHN0YXR1czogcmVzdWx0WzBdLFxuICAgIGRhdGE6IHV0aWxzLmlzU2ltcGxlT2JqZWN0KHJlc3VsdFsxXSkgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdFsxXSkpIDogcmVzdWx0WzFdLFxuICAgIGhlYWRlcnM6IHJlc3VsdFsyXSxcbiAgICBjb25maWc6IGNvbmZpZ1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KG1vY2tBZGFwdGVyLCByZXNvbHZlLCByZWplY3QsIGNvbmZpZykge1xuICB2YXIgdXJsID0gY29uZmlnLnVybDtcbiAgaWYgKGNvbmZpZy5iYXNlVVJMICYmIGNvbmZpZy51cmwuc3Vic3RyKDAsIGNvbmZpZy5iYXNlVVJMLmxlbmd0aCkgPT09IGNvbmZpZy5iYXNlVVJMKSB7XG4gICAgdXJsID0gY29uZmlnLnVybC5zbGljZShjb25maWcuYmFzZVVSTCA/IGNvbmZpZy5iYXNlVVJMLmxlbmd0aCA6IDApO1xuICB9XG5cbiAgZGVsZXRlIGNvbmZpZy5hZGFwdGVyO1xuICBtb2NrQWRhcHRlci5oaXN0b3J5W2NvbmZpZy5tZXRob2RdLnB1c2goY29uZmlnKTtcblxuICB2YXIgaGFuZGxlciA9IHV0aWxzLmZpbmRIYW5kbGVyKFxuICAgIG1vY2tBZGFwdGVyLmhhbmRsZXJzLFxuICAgIGNvbmZpZy5tZXRob2QsXG4gICAgdXJsLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5wYXJhbXMsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLmJhc2VVUkxcbiAgKTtcblxuICBpZiAoaGFuZGxlcikge1xuICAgIGlmIChoYW5kbGVyLmxlbmd0aCA9PT0gNykge1xuICAgICAgdXRpbHMucHVyZ2VJZlJlcGx5T25jZShtb2NrQWRhcHRlciwgaGFuZGxlcik7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBwYXNzVGhyb3VnaCBoYW5kbGVyXG4gICAgICBtb2NrQWRhcHRlci5vcmlnaW5hbEFkYXB0ZXIoY29uZmlnKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaGFuZGxlclszXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXRpbHMuc2V0dGxlKFxuICAgICAgICByZXNvbHZlLFxuICAgICAgICByZWplY3QsXG4gICAgICAgIG1ha2VSZXNwb25zZShoYW5kbGVyLnNsaWNlKDMpLCBjb25maWcpLFxuICAgICAgICBtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaGFuZGxlclszXShjb25maWcpO1xuICAgICAgLy8gVE9ETyB0aHJvdyBhIHNhbmUgZXhjZXB0aW9uIHdoZW4gcmV0dXJuIHZhbHVlIGlzIGluY29ycmVjdFxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQudGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1dGlscy5zZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBtYWtlUmVzcG9uc2UocmVzdWx0LCBjb25maWcpLCBtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maWcgJiYgcmVzdWx0LnN0YXR1cykge1xuICAgICAgICAgICAgICB1dGlscy5zZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBtYWtlUmVzcG9uc2UoW3Jlc3VsdC5zdGF0dXMsIHJlc3VsdC5kYXRhLCByZXN1bHQuaGVhZGVyc10sIHJlc3VsdC5jb25maWcpLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHV0aWxzLnNldHRsZShyZXNvbHZlLCByZWplY3QsIG1ha2VSZXNwb25zZShyZXN1bHQsIGNvbmZpZyksIG1vY2tBZGFwdGVyLmRlbGF5UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlID4gMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH0sIG1vY2tBZGFwdGVyLmRlbGF5UmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGhhbmRsZXIgbm90IGZvdW5kXG4gICAgdXRpbHMuc2V0dGxlKFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgIGNvbmZpZzogY29uZmlnXG4gICAgICB9LFxuICAgICAgbW9ja0FkYXB0ZXIuZGVsYXlSZXNwb25zZVxuICAgICk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYW5kbGVSZXF1ZXN0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js\n");

/***/ }),

/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar deepEqual = __webpack_require__(/*! deep-equal */ \"./node_modules/_deep-equal@1.1.0@deep-equal/index.js\");\n\nvar handleRequest = __webpack_require__(/*! ./handle_request */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js\");\n\nvar VERBS = ['get', 'post', 'head', 'delete', 'patch', 'put', 'options', 'list'];\n\nfunction adapter() {\n  return function(config) {\n    var mockAdapter = this;\n    // axios >= 0.13.0 only passes the config and expects a promise to be\n    // returned. axios < 0.13.0 passes (config, resolve, reject).\n    if (arguments.length === 3) {\n      handleRequest(mockAdapter, arguments[0], arguments[1], arguments[2]);\n    } else {\n      return new Promise(function(resolve, reject) {\n        handleRequest(mockAdapter, resolve, reject, config);\n      });\n    }\n  }.bind(this);\n}\n\nfunction getVerbObject() {\n  return VERBS.reduce(function(accumulator, verb) {\n    accumulator[verb] = [];\n    return accumulator;\n  }, {});\n}\n\nfunction reset() {\n  resetHandlers.call(this);\n  resetHistory.call(this);\n}\n\nfunction resetHandlers() {\n  this.handlers = getVerbObject();\n}\n\nfunction resetHistory() {\n  this.history = getVerbObject();\n}\n\nfunction MockAdapter(axiosInstance, options) {\n  reset.call(this);\n\n  if (axiosInstance) {\n    this.axiosInstance = axiosInstance;\n    this.originalAdapter = axiosInstance.defaults.adapter;\n    this.delayResponse = options && options.delayResponse > 0 ? options.delayResponse : null;\n    axiosInstance.defaults.adapter = this.adapter.call(this);\n  }\n}\n\nMockAdapter.prototype.adapter = adapter;\n\nMockAdapter.prototype.restore = function restore() {\n  if (this.axiosInstance) {\n    this.axiosInstance.defaults.adapter = this.originalAdapter;\n  }\n};\n\nMockAdapter.prototype.reset = reset;\nMockAdapter.prototype.resetHandlers = resetHandlers;\nMockAdapter.prototype.resetHistory = resetHistory;\n\nVERBS.concat('any').forEach(function(method) {\n  var methodName = 'on' + method.charAt(0).toUpperCase() + method.slice(1);\n  MockAdapter.prototype[methodName] = function(matcher, body, requestHeaders) {\n    var _this = this;\n    var matcher = matcher === undefined ? /.*/ : matcher;\n\n    function reply(code, response, headers) {\n      var handler = [matcher, body, requestHeaders, code, response, headers];\n      addHandler(method, _this.handlers, handler);\n      return _this;\n    }\n\n    function replyOnce(code, response, headers) {\n      var handler = [matcher, body, requestHeaders, code, response, headers, true];\n      addHandler(method, _this.handlers, handler);\n      return _this;\n    }\n\n    return {\n      reply: reply,\n\n      replyOnce: replyOnce,\n\n      passThrough: function passThrough() {\n        var handler = [matcher, body];\n        addHandler(method, _this.handlers, handler);\n        return _this;\n      },\n\n      networkError: function() {\n        reply(function(config) {\n          var error = new Error('Network Error');\n          error.config = config;\n          return Promise.reject(error);\n        });\n      },\n\n      networkErrorOnce: function() {\n        replyOnce(function(config) {\n          var error = new Error('Network Error');\n          error.config = config;\n          return Promise.reject(error);\n        });\n      },\n\n      timeout: function() {\n        reply(function(config) {\n          var error = new Error('timeout of ' + config.timeout + 'ms exceeded');\n          error.config = config;\n          error.code = 'ECONNABORTED';\n          return Promise.reject(error);\n        });\n      },\n\n      timeoutOnce: function() {\n        replyOnce(function(config) {\n          var error = new Error('timeout of ' + config.timeout + 'ms exceeded');\n          error.config = config;\n          error.code = 'ECONNABORTED';\n          return Promise.reject(error);\n        });\n      }\n    };\n  };\n});\n\nfunction findInHandlers(method, handlers, handler) {\n  var index = -1;\n  for (var i = 0; i < handlers[method].length; i += 1) {\n    var item = handlers[method][i];\n    var isReplyOnce = item.length === 7;\n    var comparePaths = item[0] instanceof RegExp && handler[0] instanceof RegExp\n      ? String(item[0]) === String(handler[0])\n      : item[0] === handler[0];\n    var isSame = (\n      comparePaths &&\n      deepEqual(item[1], handler[1], { strict: true }) &&\n      deepEqual(item[2], handler[2], { strict: true })\n    );\n    if (isSame && !isReplyOnce) {\n      index =  i;\n    }\n  }\n  return index;\n}\n\nfunction addHandler(method, handlers, handler) {\n  if (method === 'any') {\n    VERBS.forEach(function(verb) {\n      handlers[verb].push(handler);\n    });\n  } else {\n    var indexOfExistingHandler = findInHandlers(method, handlers, handler);\n    if (indexOfExistingHandler > -1 && handler.length < 7) {\n      handlers[method].splice(indexOfExistingHandler, 1, handler);\n    } else {\n      handlers[method].push(handler);\n    }\n  }\n}\n\nmodule.exports = MockAdapter;\nmodule.exports.default = MockAdapter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL2luZGV4LmpzP2JlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZSgnZGVlcC1lcXVhbCcpO1xuXG52YXIgaGFuZGxlUmVxdWVzdCA9IHJlcXVpcmUoJy4vaGFuZGxlX3JlcXVlc3QnKTtcblxudmFyIFZFUkJTID0gWydnZXQnLCAncG9zdCcsICdoZWFkJywgJ2RlbGV0ZScsICdwYXRjaCcsICdwdXQnLCAnb3B0aW9ucycsICdsaXN0J107XG5cbmZ1bmN0aW9uIGFkYXB0ZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb25maWcpIHtcbiAgICB2YXIgbW9ja0FkYXB0ZXIgPSB0aGlzO1xuICAgIC8vIGF4aW9zID49IDAuMTMuMCBvbmx5IHBhc3NlcyB0aGUgY29uZmlnIGFuZCBleHBlY3RzIGEgcHJvbWlzZSB0byBiZVxuICAgIC8vIHJldHVybmVkLiBheGlvcyA8IDAuMTMuMCBwYXNzZXMgKGNvbmZpZywgcmVzb2x2ZSwgcmVqZWN0KS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgaGFuZGxlUmVxdWVzdChtb2NrQWRhcHRlciwgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaGFuZGxlUmVxdWVzdChtb2NrQWRhcHRlciwgcmVzb2x2ZSwgcmVqZWN0LCBjb25maWcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LmJpbmQodGhpcyk7XG59XG5cbmZ1bmN0aW9uIGdldFZlcmJPYmplY3QoKSB7XG4gIHJldHVybiBWRVJCUy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZlcmIpIHtcbiAgICBhY2N1bXVsYXRvclt2ZXJiXSA9IFtdO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcmVzZXRIYW5kbGVycy5jYWxsKHRoaXMpO1xuICByZXNldEhpc3RvcnkuY2FsbCh0aGlzKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYW5kbGVycygpIHtcbiAgdGhpcy5oYW5kbGVycyA9IGdldFZlcmJPYmplY3QoKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIaXN0b3J5KCkge1xuICB0aGlzLmhpc3RvcnkgPSBnZXRWZXJiT2JqZWN0KCk7XG59XG5cbmZ1bmN0aW9uIE1vY2tBZGFwdGVyKGF4aW9zSW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgcmVzZXQuY2FsbCh0aGlzKTtcblxuICBpZiAoYXhpb3NJbnN0YW5jZSkge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zSW5zdGFuY2U7XG4gICAgdGhpcy5vcmlnaW5hbEFkYXB0ZXIgPSBheGlvc0luc3RhbmNlLmRlZmF1bHRzLmFkYXB0ZXI7XG4gICAgdGhpcy5kZWxheVJlc3BvbnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5UmVzcG9uc2UgPiAwID8gb3B0aW9ucy5kZWxheVJlc3BvbnNlIDogbnVsbDtcbiAgICBheGlvc0luc3RhbmNlLmRlZmF1bHRzLmFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXIuY2FsbCh0aGlzKTtcbiAgfVxufVxuXG5Nb2NrQWRhcHRlci5wcm90b3R5cGUuYWRhcHRlciA9IGFkYXB0ZXI7XG5cbk1vY2tBZGFwdGVyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgaWYgKHRoaXMuYXhpb3NJbnN0YW5jZSkge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5kZWZhdWx0cy5hZGFwdGVyID0gdGhpcy5vcmlnaW5hbEFkYXB0ZXI7XG4gIH1cbn07XG5cbk1vY2tBZGFwdGVyLnByb3RvdHlwZS5yZXNldCA9IHJlc2V0O1xuTW9ja0FkYXB0ZXIucHJvdG90eXBlLnJlc2V0SGFuZGxlcnMgPSByZXNldEhhbmRsZXJzO1xuTW9ja0FkYXB0ZXIucHJvdG90eXBlLnJlc2V0SGlzdG9yeSA9IHJlc2V0SGlzdG9yeTtcblxuVkVSQlMuY29uY2F0KCdhbnknKS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICB2YXIgbWV0aG9kTmFtZSA9ICdvbicgKyBtZXRob2QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBtZXRob2Quc2xpY2UoMSk7XG4gIE1vY2tBZGFwdGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKG1hdGNoZXIsIGJvZHksIHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgbWF0Y2hlciA9IG1hdGNoZXIgPT09IHVuZGVmaW5lZCA/IC8uKi8gOiBtYXRjaGVyO1xuXG4gICAgZnVuY3Rpb24gcmVwbHkoY29kZSwgcmVzcG9uc2UsIGhlYWRlcnMpIHtcbiAgICAgIHZhciBoYW5kbGVyID0gW21hdGNoZXIsIGJvZHksIHJlcXVlc3RIZWFkZXJzLCBjb2RlLCByZXNwb25zZSwgaGVhZGVyc107XG4gICAgICBhZGRIYW5kbGVyKG1ldGhvZCwgX3RoaXMuaGFuZGxlcnMsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGx5T25jZShjb2RlLCByZXNwb25zZSwgaGVhZGVycykge1xuICAgICAgdmFyIGhhbmRsZXIgPSBbbWF0Y2hlciwgYm9keSwgcmVxdWVzdEhlYWRlcnMsIGNvZGUsIHJlc3BvbnNlLCBoZWFkZXJzLCB0cnVlXTtcbiAgICAgIGFkZEhhbmRsZXIobWV0aG9kLCBfdGhpcy5oYW5kbGVycywgaGFuZGxlcik7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcGx5OiByZXBseSxcblxuICAgICAgcmVwbHlPbmNlOiByZXBseU9uY2UsXG5cbiAgICAgIHBhc3NUaHJvdWdoOiBmdW5jdGlvbiBwYXNzVGhyb3VnaCgpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBbbWF0Y2hlciwgYm9keV07XG4gICAgICAgIGFkZEhhbmRsZXIobWV0aG9kLCBfdGhpcy5oYW5kbGVycywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH0sXG5cbiAgICAgIG5ldHdvcmtFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcGx5KGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTmV0d29yayBFcnJvcicpO1xuICAgICAgICAgIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIG5ldHdvcmtFcnJvck9uY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXBseU9uY2UoZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdOZXR3b3JrIEVycm9yJyk7XG4gICAgICAgICAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgdGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcGx5KGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnKTtcbiAgICAgICAgICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTkFCT1JURUQnO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgdGltZW91dE9uY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXBseU9uY2UoZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcpO1xuICAgICAgICAgIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBmaW5kSW5IYW5kbGVycyhtZXRob2QsIGhhbmRsZXJzLCBoYW5kbGVyKSB7XG4gIHZhciBpbmRleCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzW21ldGhvZF0ubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgaXRlbSA9IGhhbmRsZXJzW21ldGhvZF1baV07XG4gICAgdmFyIGlzUmVwbHlPbmNlID0gaXRlbS5sZW5ndGggPT09IDc7XG4gICAgdmFyIGNvbXBhcmVQYXRocyA9IGl0ZW1bMF0gaW5zdGFuY2VvZiBSZWdFeHAgJiYgaGFuZGxlclswXSBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgPyBTdHJpbmcoaXRlbVswXSkgPT09IFN0cmluZyhoYW5kbGVyWzBdKVxuICAgICAgOiBpdGVtWzBdID09PSBoYW5kbGVyWzBdO1xuICAgIHZhciBpc1NhbWUgPSAoXG4gICAgICBjb21wYXJlUGF0aHMgJiZcbiAgICAgIGRlZXBFcXVhbChpdGVtWzFdLCBoYW5kbGVyWzFdLCB7IHN0cmljdDogdHJ1ZSB9KSAmJlxuICAgICAgZGVlcEVxdWFsKGl0ZW1bMl0sIGhhbmRsZXJbMl0sIHsgc3RyaWN0OiB0cnVlIH0pXG4gICAgKTtcbiAgICBpZiAoaXNTYW1lICYmICFpc1JlcGx5T25jZSkge1xuICAgICAgaW5kZXggPSAgaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKG1ldGhvZCwgaGFuZGxlcnMsIGhhbmRsZXIpIHtcbiAgaWYgKG1ldGhvZCA9PT0gJ2FueScpIHtcbiAgICBWRVJCUy5mb3JFYWNoKGZ1bmN0aW9uKHZlcmIpIHtcbiAgICAgIGhhbmRsZXJzW3ZlcmJdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluZGV4T2ZFeGlzdGluZ0hhbmRsZXIgPSBmaW5kSW5IYW5kbGVycyhtZXRob2QsIGhhbmRsZXJzLCBoYW5kbGVyKTtcbiAgICBpZiAoaW5kZXhPZkV4aXN0aW5nSGFuZGxlciA+IC0xICYmIGhhbmRsZXIubGVuZ3RoIDwgNykge1xuICAgICAgaGFuZGxlcnNbbWV0aG9kXS5zcGxpY2UoaW5kZXhPZkV4aXN0aW5nSGFuZGxlciwgMSwgaGFuZGxlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzW21ldGhvZF0ucHVzaChoYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQWRhcHRlcjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBNb2NrQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js\n");

/***/ }),

/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar axios = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\nvar deepEqual = __webpack_require__(/*! deep-equal */ \"./node_modules/_deep-equal@1.1.0@deep-equal/index.js\");\n\nfunction isEqual(a, b) {\n  return deepEqual(a, b, { strict: true });\n}\n\n// < 0.13.0 will not have default headers set on a custom instance\nvar rejectWithError = !!axios.create().defaults.headers;\n\nfunction find(array, predicate) {\n  var length = array.length;\n  for (var i = 0; i < length; i++) {\n    var value = array[i];\n    if (predicate(value)) return value;\n  }\n}\n\nfunction combineUrls(baseURL, url) {\n  if (baseURL) {\n    return baseURL.replace(/\\/+$/, '') + '/' + url.replace(/^\\/+/, '');\n  }\n\n  return url;\n}\n\nfunction findHandler(handlers, method, url, body, parameters, headers, baseURL) {\n  return find(handlers[method.toLowerCase()], function(handler) {\n    if (typeof handler[0] === 'string') {\n      return (isUrlMatching(url, handler[0]) || isUrlMatching(combineUrls(baseURL, url), handler[0])) && isBodyOrParametersMatching(method, body, parameters, handler[1])  && isRequestHeadersMatching(headers, handler[2]);\n    } else if (handler[0] instanceof RegExp) {\n      return (handler[0].test(url) || handler[0].test(combineUrls(baseURL, url))) && isBodyOrParametersMatching(method, body, parameters, handler[1]) && isRequestHeadersMatching(headers, handler[2]);\n    }\n  });\n}\n\nfunction isUrlMatching(url, required) {\n  var noSlashUrl = url[0] === '/' ? url.substr(1) : url;\n  var noSlashRequired = required[0] === '/' ? required.substr(1) : required;\n  return (noSlashUrl === noSlashRequired);\n}\n\nfunction isRequestHeadersMatching(requestHeaders, required) {\n  if (required === undefined) return true;\n  return isEqual(requestHeaders, required);\n}\n\nfunction isBodyOrParametersMatching(method, body, parameters, required) {\n  var allowedParamsMethods = ['delete', 'get', 'head', 'options'];\n  if (allowedParamsMethods.indexOf(method.toLowerCase()) >= 0 ) {\n    var params = required ? required.params : undefined;\n    return isParametersMatching(parameters, params);\n  } else {\n    return isBodyMatching(body, required);\n  }\n}\n\nfunction isParametersMatching(parameters, required) {\n  if (required === undefined) return true;\n\n  return isEqual(parameters, required);\n}\n\nfunction isBodyMatching(body, requiredBody) {\n  if (requiredBody === undefined) {\n    return true;\n  }\n  var parsedBody;\n  try {\n    parsedBody = JSON.parse(body);\n  } catch (e) { }\n  return parsedBody ? isEqual(parsedBody, requiredBody) : isEqual(body, requiredBody);\n}\n\nfunction purgeIfReplyOnce(mock, handler) {\n  Object.keys(mock.handlers).forEach(function(key) {\n    var index = mock.handlers[key].indexOf(handler);\n    if (index > -1) {\n      mock.handlers[key].splice(index, 1);\n    }\n  });\n}\n\nfunction settle(resolve, reject, response, delay) {\n  if (delay > 0) {\n    setTimeout(function() {\n      settle(resolve, reject, response);\n    }, delay);\n    return;\n  }\n\n  if (response.config && response.config.validateStatus) {\n    response.config.validateStatus(response.status)\n      ? resolve(response)\n      : reject(createErrorResponse(\n        'Request failed with status code ' + response.status,\n        response.config,\n        response\n      ));\n    return;\n  }\n\n  // Support for axios < 0.11\n  if (response.status >= 200 && response.status < 300) {\n    resolve(response);\n  } else {\n    reject(response);\n  }\n}\n\nfunction createErrorResponse(message, config, response) {\n  // Support for axios < 0.13.0\n  if (!rejectWithError) return response;\n\n  var error = new Error(message);\n  error.config = config;\n  error.response = response;\n  return error;\n}\n\nfunction isSimpleObject(value) {\n  return value !== null && value !== undefined && value.toString() === '[object Object]';\n}\n\nmodule.exports = {\n  find: find,\n  findHandler: findHandler,\n  isSimpleObject: isSimpleObject,\n  purgeIfReplyOnce: purgeIfReplyOnce,\n  settle: settle\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL3V0aWxzLmpzP2NlZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xudmFyIGRlZXBFcXVhbCA9IHJlcXVpcmUoJ2RlZXAtZXF1YWwnKTtcblxuZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgeyBzdHJpY3Q6IHRydWUgfSk7XG59XG5cbi8vIDwgMC4xMy4wIHdpbGwgbm90IGhhdmUgZGVmYXVsdCBoZWFkZXJzIHNldCBvbiBhIGN1c3RvbSBpbnN0YW5jZVxudmFyIHJlamVjdFdpdGhFcnJvciA9ICEhYXhpb3MuY3JlYXRlKCkuZGVmYXVsdHMuaGVhZGVycztcblxuZnVuY3Rpb24gZmluZChhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVUkwsIHVybCkge1xuICBpZiAoYmFzZVVSTCkge1xuICAgIHJldHVybiBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgdXJsLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoaGFuZGxlcnMsIG1ldGhvZCwgdXJsLCBib2R5LCBwYXJhbWV0ZXJzLCBoZWFkZXJzLCBiYXNlVVJMKSB7XG4gIHJldHVybiBmaW5kKGhhbmRsZXJzW21ldGhvZC50b0xvd2VyQ2FzZSgpXSwgZnVuY3Rpb24oaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlclswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoaXNVcmxNYXRjaGluZyh1cmwsIGhhbmRsZXJbMF0pIHx8IGlzVXJsTWF0Y2hpbmcoY29tYmluZVVybHMoYmFzZVVSTCwgdXJsKSwgaGFuZGxlclswXSkpICYmIGlzQm9keU9yUGFyYW1ldGVyc01hdGNoaW5nKG1ldGhvZCwgYm9keSwgcGFyYW1ldGVycywgaGFuZGxlclsxXSkgICYmIGlzUmVxdWVzdEhlYWRlcnNNYXRjaGluZyhoZWFkZXJzLCBoYW5kbGVyWzJdKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXJbMF0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAoaGFuZGxlclswXS50ZXN0KHVybCkgfHwgaGFuZGxlclswXS50ZXN0KGNvbWJpbmVVcmxzKGJhc2VVUkwsIHVybCkpKSAmJiBpc0JvZHlPclBhcmFtZXRlcnNNYXRjaGluZyhtZXRob2QsIGJvZHksIHBhcmFtZXRlcnMsIGhhbmRsZXJbMV0pICYmIGlzUmVxdWVzdEhlYWRlcnNNYXRjaGluZyhoZWFkZXJzLCBoYW5kbGVyWzJdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1VybE1hdGNoaW5nKHVybCwgcmVxdWlyZWQpIHtcbiAgdmFyIG5vU2xhc2hVcmwgPSB1cmxbMF0gPT09ICcvJyA/IHVybC5zdWJzdHIoMSkgOiB1cmw7XG4gIHZhciBub1NsYXNoUmVxdWlyZWQgPSByZXF1aXJlZFswXSA9PT0gJy8nID8gcmVxdWlyZWQuc3Vic3RyKDEpIDogcmVxdWlyZWQ7XG4gIHJldHVybiAobm9TbGFzaFVybCA9PT0gbm9TbGFzaFJlcXVpcmVkKTtcbn1cblxuZnVuY3Rpb24gaXNSZXF1ZXN0SGVhZGVyc01hdGNoaW5nKHJlcXVlc3RIZWFkZXJzLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBpc0VxdWFsKHJlcXVlc3RIZWFkZXJzLCByZXF1aXJlZCk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keU9yUGFyYW1ldGVyc01hdGNoaW5nKG1ldGhvZCwgYm9keSwgcGFyYW1ldGVycywgcmVxdWlyZWQpIHtcbiAgdmFyIGFsbG93ZWRQYXJhbXNNZXRob2RzID0gWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddO1xuICBpZiAoYWxsb3dlZFBhcmFtc01ldGhvZHMuaW5kZXhPZihtZXRob2QudG9Mb3dlckNhc2UoKSkgPj0gMCApIHtcbiAgICB2YXIgcGFyYW1zID0gcmVxdWlyZWQgPyByZXF1aXJlZC5wYXJhbXMgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzUGFyYW1ldGVyc01hdGNoaW5nKHBhcmFtZXRlcnMsIHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGlzQm9keU1hdGNoaW5nKGJvZHksIHJlcXVpcmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhcmFtZXRlcnNNYXRjaGluZyhwYXJhbWV0ZXJzLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzRXF1YWwocGFyYW1ldGVycywgcmVxdWlyZWQpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHlNYXRjaGluZyhib2R5LCByZXF1aXJlZEJvZHkpIHtcbiAgaWYgKHJlcXVpcmVkQm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIHBhcnNlZEJvZHk7XG4gIHRyeSB7XG4gICAgcGFyc2VkQm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gIH0gY2F0Y2ggKGUpIHsgfVxuICByZXR1cm4gcGFyc2VkQm9keSA/IGlzRXF1YWwocGFyc2VkQm9keSwgcmVxdWlyZWRCb2R5KSA6IGlzRXF1YWwoYm9keSwgcmVxdWlyZWRCb2R5KTtcbn1cblxuZnVuY3Rpb24gcHVyZ2VJZlJlcGx5T25jZShtb2NrLCBoYW5kbGVyKSB7XG4gIE9iamVjdC5rZXlzKG1vY2suaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gbW9jay5oYW5kbGVyc1trZXldLmluZGV4T2YoaGFuZGxlcik7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIG1vY2suaGFuZGxlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlLCBkZWxheSkge1xuICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICB9LCBkZWxheSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNvbmZpZyAmJiByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXMpIHtcbiAgICByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgPyByZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgOiByZWplY3QoY3JlYXRlRXJyb3JSZXNwb25zZShcbiAgICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgICByZXNwb25zZVxuICAgICAgKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU3VwcG9ydCBmb3IgYXhpb3MgPCAwLjExXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChyZXNwb25zZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JSZXNwb25zZShtZXNzYWdlLCBjb25maWcsIHJlc3BvbnNlKSB7XG4gIC8vIFN1cHBvcnQgZm9yIGF4aW9zIDwgMC4xMy4wXG4gIGlmICghcmVqZWN0V2l0aEVycm9yKSByZXR1cm4gcmVzcG9uc2U7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaW5kOiBmaW5kLFxuICBmaW5kSGFuZGxlcjogZmluZEhhbmRsZXIsXG4gIGlzU2ltcGxlT2JqZWN0OiBpc1NpbXBsZU9iamVjdCxcbiAgcHVyZ2VJZlJlcGx5T25jZTogcHVyZ2VJZlJlcGx5T25jZSxcbiAgc2V0dGxlOiBzZXR0bGVcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/index.js":
/*!***************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/index.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/_axios@0.19.0@axios/lib/axios.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2luZGV4LmpzPzI0MjciXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/index.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js":
/*!**************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/_axios@0.19.0@axios/lib/core/settle.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/_axios@0.19.0@axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js\");\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYWRhcHRlcnMveGhyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz8xM2E3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICB2YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG5cbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/axios.js":
/*!*******************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/axios.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\");\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/_axios@0.19.0@axios/lib/core/Axios.js\");\nvar mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ \"./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\");\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/_axios@0.19.0@axios/lib/defaults.js\");\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\");\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js\");\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYXhpb3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYXhpb3MuanM/YjI5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/axios.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js":
/*!***************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzPzY5MzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js":
/*!********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\");\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz8xYzBmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9kZWFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/Axios.js":
/*!************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/Axios.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar buildURL = __webpack_require__(/*! ../helpers/buildURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\");\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js\");\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js\");\nvar mergeConfig = __webpack_require__(/*! ./mergeConfig */ \"./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\");\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n  config.method = config.method ? config.method.toLowerCase() : 'get';\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9BeGlvcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzUyMWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QgPyBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCkgOiAnZ2V0JztcblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/Axios.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/YWM5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/createError.js":
/*!******************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/createError.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js\");\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzPzZkMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/createError.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/_axios@0.19.0@axios/lib/core/transformData.js\");\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\");\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/_axios@0.19.0@axios/lib/defaults.js\");\nvar isAbsoluteURL = __webpack_require__(/*! ./../helpers/isAbsoluteURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js\");\nvar combineURLs = __webpack_require__(/*! ./../helpers/combineURLs */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js\");\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanM/NTZiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzIHx8IHt9XG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js":
/*!*******************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanM/NTAzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js":
/*!******************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach([\n    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n    'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n    'socketPath'\n  ], function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzPzE1ZDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHV0aWxzLmZvckVhY2goWyd1cmwnLCAnbWV0aG9kJywgJ3BhcmFtcycsICdkYXRhJ10sIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5J10sIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goW1xuICAgICdiYXNlVVJMJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLCAnbWF4Q29udGVudExlbmd0aCcsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLCAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsXG4gICAgJ3NvY2tldFBhdGgnXG4gIF0sIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/settle.js":
/*!*************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/settle.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/_axios@0.19.0@axios/lib/core/createError.js\");\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9zZXR0bGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9zZXR0bGUuanM/OTM3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/settle.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/core/transformData.js":
/*!********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/core/transformData.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz9mOThjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/transformData.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/defaults.js":
/*!**********************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/defaults.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  // Only Node.JS has a process variable that is of [[Class]] process\n  if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\");\n  } else if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\");\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_process@0.11.10@process/browser.js */ \"./node_modules/_process@0.11.10@process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvZGVmYXVsdHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvZGVmYXVsdHMuanM/YTMxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICAvLyBPbmx5IE5vZGUuSlMgaGFzIGEgcHJvY2VzcyB2YXJpYWJsZSB0aGF0IGlzIG9mIFtbQ2xhc3NdXSBwcm9jZXNzXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/defaults.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js":
/*!**************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9iaW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz9jOWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js":
/*!******************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2M5NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzA5MmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz8xMjYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js":
/*!***********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz85ODg0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanM/ZjFiZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcz8wM2NlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/ZmI3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js":
/*!****************************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/OGNjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js\n");

/***/ }),

/***/ "./node_modules/_axios@0.19.0@axios/lib/utils.js":
/*!*******************************************************!*\
  !*** ./node_modules/_axios@0.19.0@axios/lib/utils.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\");\nvar isBuffer = __webpack_require__(/*! is-buffer */ \"./node_modules/_is-buffer@2.0.4@is-buffer/index.js\");\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvdXRpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvdXRpbHMuanM/NGExNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGVxdWFsIHRvIG1lcmdlIHdpdGggdGhlIGRpZmZlcmVuY2UgYmVpbmcgdGhhdCBubyByZWZlcmVuY2VcbiAqIHRvIG9yaWdpbmFsIG9iamVjdHMgaXMga2VwdC5cbiAqXG4gKiBAc2VlIG1lcmdlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBkZWVwTWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZGVlcE1lcmdlOiBkZWVwTWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/utils.js\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=script&lang=js& ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es7.object.get-own-property-descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\");\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var _components_home_header_header_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @components/home/header/header.vue */ \"./src/components/home/header/header.vue\");\n/* harmony import */ var _components_home_footer_footer_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @components/home/footer/footer.vue */ \"./src/components/home/footer/footer.vue\");\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar UA = __webpack_require__(/*! ua-device */ \"./node_modules/_ua-device@0.1.10@ua-device/index.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  name: \"app\",\n  components: {\n    VHeader: _components_home_header_header_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n    VFooter: _components_home_footer_footer_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n  },\n  computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__[\"mapState\"])({\n    isMobile: function isMobile(state) {\n      return state.isMobile;\n    }\n  })),\n  methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__[\"mapActions\"])([\"pcorphone\"])),\n  created: function created() {\n    var _this = this; // 设置UA\n\n\n    var output = new UA(navigator.userAgent);\n    var deviceType = output.device.type;\n    var isMobile = deviceType == \"mobile\";\n    this.$store.commit(\"IS_MOBILE\", isMobile); //\n\n    var userInfoStr = decodeURIComponent(Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_5__[\"getCookie\"])(\"_user_profile\"));\n\n    if (userInfoStr) {\n      try {\n        var userInfo = JSON.parse(decodeURIComponent(userInfoStr));\n        this.$store.commit(\"SET_USER_INFO\", userInfo);\n      } catch (e) {}\n    }\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9BcHAudnVlPzIzNGUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwiYXBwXCI+XG4gICAgPHYtaGVhZGVyPjwvdi1oZWFkZXI+XG4gICAgPG1haW4gcmVmPVwiY29udGFpbmVyXCIgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiPlxuICAgICAgPHJvdXRlci12aWV3IC8+XG4gICAgPC9tYWluPlxuICAgIDx2LWZvb3Rlcj48L3YtZm9vdGVyPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cblxuPHNjcmlwdD5cbmltcG9ydCB7IG1hcEdldHRlcnMsIG1hcEFjdGlvbnMsIG1hcFN0YXRlIH0gZnJvbSBcInZ1ZXhcIjtcbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gXCJAdXRpbHMvdXRpbHMuanNcIjtcbmltcG9ydCBWSGVhZGVyIGZyb20gXCJAY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlXCI7XG5pbXBvcnQgVkZvb3RlciBmcm9tIFwiQGNvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZVwiO1xudmFyIFVBID0gcmVxdWlyZShcInVhLWRldmljZVwiKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiBcImFwcFwiLFxuICBjb21wb25lbnRzOiB7XG4gICAgVkhlYWRlcixcbiAgICBWRm9vdGVyXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgLi4ubWFwU3RhdGUoe1xuICAgICAgaXNNb2JpbGU6IHN0YXRlID0+IHN0YXRlLmlzTW9iaWxlXG4gICAgfSlcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIC4uLm1hcEFjdGlvbnMoW1wicGNvcnBob25lXCJdKVxuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgLy8g6K6+572uVUFcbiAgICBsZXQgb3V0cHV0ID0gbmV3IFVBKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGxldCBkZXZpY2VUeXBlID0gb3V0cHV0LmRldmljZS50eXBlO1xuICAgIGxldCBpc01vYmlsZSA9IGRldmljZVR5cGUgPT0gXCJtb2JpbGVcIjtcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoXCJJU19NT0JJTEVcIiwgaXNNb2JpbGUpO1xuXG4gICAgLy9cbiAgICBsZXQgdXNlckluZm9TdHIgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0Q29va2llKFwiX3VzZXJfcHJvZmlsZVwiKSk7XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgdXNlckluZm8gPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh1c2VySW5mb1N0cikpO1xuICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoXCJTRVRfVVNFUl9JTkZPXCIsIHVzZXJJbmZvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCBcIkAvc3R5bGVzL19zdXBwb3J0XCI7XG5cbmh0bWwge1xuICBmb250LWZhbWlseTogXCJNaWNyb3NvZnQgWWFIZWlcIiwgXCJBcmlhbFwiO1xuICBmb250LXNpemU6IDEycHg7XG4gIHdvcmQtc3BhY2luZzogMXB4O1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgLy8gLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8vIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLy8gLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgLy8gLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmh0bWwsXG5ib2R5IHtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xufVxuXG5ib2R5LFxuZGl2IHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbiosXG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG59XG5cbmJvZHksXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYsXG5ocixcbnAsXG5ibG9ja3F1b3RlLFxuZGwsXG5kdCxcbmRkLFxudWwsXG5vbCxcbmxpLFxucHJlLFxuZm9ybSxcbmZpZWxkc2V0LFxubGVnZW5kLFxuYnV0dG9uLFxuaW5wdXQsXG50ZXh0YXJlYSxcbnRoLFxudGQsXG5pZnJhbWUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmltZyxcbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5LFxudGltZSxcbm1hcmssXG5hdWRpbyxcbnZpZGVvIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1zaXplOiAxMDAlO1xufVxuXG5maWVsZHNldCxcbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuYWRkcmVzcyxcbmNhcHRpb24sXG5jaXRlLFxuZGZuLFxuZW0sXG50aCxcbnZhcixcbmksXG5lbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxub2wsXG51bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBpbmhlcml0O1xuICAmOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuYSxcbmxhYmVsLFxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3Qge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5cbmlucHV0LFxuc2VsZWN0LFxuYnV0dG9uIHtcbiAgLy8gZm9udDogMTAwJSB0YWhvbWEsIFwiXFw1YjhiXFw0ZjUzXCIsIGFyaWFsO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5zZWxlY3Qge1xuICBvdXRsaW5lOiBub25lO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbn1cbnNlbGVjdDo6LW1zLWV4cGFuZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmlucHV0IHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dCxcbmlucHV0W3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0W3R5cGU9XCJidXR0b25cIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXRbdHlwZT1cImZpbGVcIl0gPiBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiBub25lO1xufVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZSAhaW1wb3J0YW50O1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dDotd2Via2l0LWF1dG9maWxsIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxMDAwcHggd2hpdGUgaW5zZXQ7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0sXG5pbnB1dFt0eXBlPVwidGVsXCJdLFxuaW5wdXRbdHlwZT1cInRleHRcIl0sXG5pbnB1dCB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLyrljrvpmaTns7vnu5/pu5jorqTnmoTmoLflvI8qL1xuICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAvLyBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuaW5wdXQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbi8vICAgY29sb3I6ICRjR3JheSAhaW1wb3J0YW50O1xuLy8gfVxuXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAvKiBXZWJLaXQsIEJsaW5rLCBFZGdlICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46LW1vei1wbGFjZWhvbGRlciB7XG4gIC8qIE1vemlsbGEgRmlyZWZveCA0IHRvIDE4ICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46Oi1tb3otcGxhY2Vob2xkZXIge1xuICAvKiBNb3ppbGxhIEZpcmVmb3ggMTkrICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgLyogSW50ZXJuZXQgRXhwbG9yZXIgMTAtMTEgKi9cbiAgY29sb3I6ICRjR3JheTtcbiAgb3BhY2l0eTogMTtcbn1cblxuc2VsZWN0LFxuaW5wdXQsXG5vcHRpb24ge1xuICBjb2xvcjogJGNMaWdodEJsYWNrO1xufVxuXG50ZXh0YXJlYSB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcmVzaXplOiBub25lO1xuICAvLyBmb250OiAxMDAlIHRhaG9tYSwgXCJcXDViOGJcXDRmNTNcIiwgYXJpYWw7XG4gIGNvbG9yOiAkY0xpZ2h0QmxhY2s7XG59XG5cbi5jT3JhbmdlIHtcbiAgY29sb3I6ICRjT3JhbmdlO1xufVxuLmNHcmVlbiB7XG4gIGNvbG9yOiAkY0dyZWVuO1xufVxuLmNHcmF5IHtcbiAgY29sb3I6ICRjR3JheTtcbn1cbi5jRGFyayB7XG4gIGNvbG9yOiAkY0Rhcms7XG59XG5cbiNhcHAge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLm1haW4tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgd2lkdGg6IDEwMCU7XG4gIC8vIG1heC13aWR0aDogMTAyNHB4OyAvLyDorr7orqHnqL/lrr3luqZcbiAgLy8gbWluLWhlaWdodDogNDByZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cblxuLmNvbnRlbnQge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uYm94LXcge1xuICAvLyBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWF4LXdpZHRoOiA5NTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uYm94IHtcbiAgbWF4LXdpZHRoOiA5NTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZm9jdXN7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjT3JhbmdlIDtcbn1cblxuLmFwcF9fd2lkdGgge1xuICB3aWR0aDogNzUwcHg7XG59XG5cbi5hcHBfX3dpZHRoIHtcbiAgd2lkdGg6IDc1MHB4O1xufVxuXG4uYXBwX19pbm5lciB7XG4gIG1hcmdpbjogMjBweDtcbn1cblxuLmFwcF9fdGl0bGUge1xuICBmb250LXNpemU6ICRmb250U2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRmb250U2l6ZSArIDRweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXItYm90dG9tOiAwLjVweCBzb2xpZCAjZWVlZWVlO1xufVxuXG4uYXBwX19kZXNjIHtcbiAgZm9udC1zaXplOiAkZm9udFNpemVTbWFsbGVyO1xuICBsaW5lLWhlaWdodDogJGZvbnRTaXplU21hbGxlciArIDJweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICRjb2xvckdyYXk7XG59XG5cbi5hcHBfX2JnYyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmFwcF9fYmcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5hcHBfX3RvcC1zaGFkb3cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiA3NTBweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJveC1zaGFkb3c6IDBweCA0cHggMC45cHggMC4xcHggcmdiYSg2LCAwLCAxLCAwLjA3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLmFwcF9fY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XG4gIHdpZHRoOiAxcmVtICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXJlbSAhaW1wb3J0YW50O1xufVxuXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6ICNmMDVhMjMgIWltcG9ydGFudDtcbn1cblxuXG4uaXB0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAkY09yYW5nZSAhaW1wb3J0YW50O1xufVxuXG4uaXB0LmVyciB7XG4gIGJvcmRlci1jb2xvcjogJGNPcmFuZ2UgIWltcG9ydGFudDtcbn1cblxuPC9zdHlsZT5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBRUE7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&":
/*!*******************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js& ***!
  \*******************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  name: \"DropDownList\",\n  data: function data() {\n    return {\n      activeIndex: 0,\n      sTitle: this.dataObj && this.dataObj.name || ''\n    };\n  },\n  props: {\n    type: {\n      type: String,\n      default: function _default() {\n        return \"nav\";\n      }\n    },\n    dataObj: {\n      type: Object,\n      default: function _default() {\n        return {};\n      }\n    },\n    dataList: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    labelProperty: {\n      type: String,\n      default: function _default() {\n        return \"name\";\n      }\n    }\n  },\n  directives: {\n    dpl: {\n      bind: function bind(el) {\n        el.style.display = \"none\";\n      }\n    }\n  },\n  methods: {\n    onNavHandler: function onNavHandler() {\n      var path = this.dataObj && this.dataObj.path || \"\";\n\n      if (path) {\n        this.$router.push({\n          path: path\n        });\n      }\n    },\n    onOverHandler: function onOverHandler(event) {\n      var ul = event.currentTarget.childNodes[1].childNodes[1];\n      ul.style.display = \"block\";\n    },\n    onOutHandler: function onOutHandler(event) {\n      // console.log(event);\n      var ul = event.currentTarget.childNodes[1].childNodes[1];\n      ul.style.display = \"none\";\n    },\n    onClickHandler: function onClickHandler(event, index) {\n      // 隐藏其他\n      // let path = event.path || (event.composedPath && event.composedPath()); //兼容火狐和safari\n      // path[1].style.display = \"none\";\n      if (this.$refs.ul) {\n        this.$refs.ul.style.display = \"none\";\n      } // 选择item\n\n\n      this.activeIndex = index;\n      var curData = this.dataList[index];\n\n      if (this.type == \"lang\") {\n        // 如果是语言设置,则设置语言\n        var lang = curData.value;\n        this.$i18n.locale = lang;\n        localStorage.setItem(\"lang\", lang);\n        this.sTitle = curData.name;\n        window.location.reload();\n      } else {\n        // console.log(\"curData.value == =\", curData.value)\n        if (curData.value == \"logout\") {\n          // this.$store.commit(\"SET_USER_INFO\", null);\n          this._loginHandler();\n        } else {\n          // 不是的话,跳转页面\n          this.$router.push({\n            path: curData.path\n          });\n        }\n      } // console.log(\"name:\", this.dataList[index].name);\n      // this.$emit(\"change\", {\n      // \tindex: index,\n      // \tvalue: this.dataList[index]\n      // });\n\n    },\n    _loginHandler: function _loginHandler() {\n      var _this = this;\n\n      Object(_api_fetch_api_js__WEBPACK_IMPORTED_MODULE_3__[\"httpPost\"])({\n        url: _api_api__WEBPACK_IMPORTED_MODULE_2___default.a.logout\n      }).then(function () {\n        _this.$store.commit(\"SET_USER_INFO\", null);\n\n        _this._showLogoutTip();\n      });\n    },\n    _showLogoutTip: function _showLogoutTip() {\n      // 登出后的提示\n      alert(\"登出成功\");\n    }\n  },\n  computed: {\n    dplLable: function dplLable() {\n      return this.dataList[this.activeIndex][this.labelProperty];\n    }\n  },\n  created: function created() {// this.\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24uanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9kcm9wZG93bi9kcm9wZG93bi5qcz85Mzc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdG1hcFN0YXRlXG59IGZyb20gJ3Z1ZXgnXG5cbmltcG9ydCBhcGkgZnJvbSAnQC9hcGkvYXBpJ1xuaW1wb3J0IHsgaHR0cFBvc3QgfSBmcm9tICdAL2FwaS9mZXRjaC1hcGkuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0bmFtZTogXCJEcm9wRG93bkxpc3RcIixcblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YWN0aXZlSW5kZXg6IDAsXG5cdFx0XHRzVGl0bGU6IHRoaXMuZGF0YU9iaiAmJiB0aGlzLmRhdGFPYmoubmFtZSB8fCAnJyxcblx0XHR9O1xuXHR9LFxuXHRwcm9wczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHR5cGU6IFN0cmluZyxcblx0XHRcdGRlZmF1bHQoKSB7XG5cdFx0XHRcdHJldHVybiBcIm5hdlwiO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGF0YU9iajoge1xuXHRcdFx0dHlwZTogT2JqZWN0LFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGF0YUxpc3Q6IHtcblx0XHRcdHR5cGU6IEFycmF5LFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGFiZWxQcm9wZXJ0eToge1xuXHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIFwibmFtZVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGlyZWN0aXZlczoge1xuXHRcdGRwbDoge1xuXHRcdFx0YmluZChlbCkge1xuXHRcdFx0XHRlbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0b25OYXZIYW5kbGVyKCkge1xuXHRcdFx0bGV0IHBhdGggPSB0aGlzLmRhdGFPYmogJiYgdGhpcy5kYXRhT2JqLnBhdGggfHwgXCJcIjtcblx0XHRcdGlmIChwYXRoKSB7XG5cdFx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0XHRwYXRoOiBwYXRoXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbk92ZXJIYW5kbGVyKGV2ZW50KSB7XG5cblx0XHRcdGxldCB1bCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdO1xuXHRcdFx0dWwuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0XHR9LFxuXHRcdG9uT3V0SGFuZGxlcihldmVudCkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coZXZlbnQpO1xuXHRcdFx0bGV0IHVsID0gZXZlbnQuY3VycmVudFRhcmdldC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV07XG5cdFx0XHR1bC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0fSxcblx0XHRvbkNsaWNrSGFuZGxlcihldmVudCwgaW5kZXgpIHtcblx0XHRcdC8vIOmakOiXj+WFtuS7llxuXHRcdFx0Ly8gbGV0IHBhdGggPSBldmVudC5wYXRoIHx8IChldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKCkpOyAvL+WFvOWuueeBq+eLkOWSjHNhZmFyaVxuXHRcdFx0Ly8gcGF0aFsxXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHRpZiAodGhpcy4kcmVmcy51bCkge1xuXHRcdFx0XHR0aGlzLiRyZWZzLnVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8g6YCJ5oupaXRlbVxuXHRcdFx0dGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuXHRcdFx0bGV0IGN1ckRhdGEgPSB0aGlzLmRhdGFMaXN0W2luZGV4XTtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT0gXCJsYW5nXCIpIHtcblx0XHRcdFx0Ly8g5aaC5p6c5piv6K+t6KiA6K6+572u77yM5YiZ6K6+572u6K+t6KiAXG5cdFx0XHRcdGxldCBsYW5nID0gY3VyRGF0YS52YWx1ZTtcblx0XHRcdFx0dGhpcy4kaTE4bi5sb2NhbGUgPSBsYW5nO1xuXHRcdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmdcIiwgbGFuZyk7XG5cdFx0XHRcdHRoaXMuc1RpdGxlID0gY3VyRGF0YS5uYW1lO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1ckRhdGEudmFsdWUgPT0gPVwiLCBjdXJEYXRhLnZhbHVlKVxuXHRcdFx0XHRpZiAoY3VyRGF0YS52YWx1ZSA9PSBcImxvZ291dFwiKSB7XG5cdFx0XHRcdFx0Ly8gdGhpcy4kc3RvcmUuY29tbWl0KFwiU0VUX1VTRVJfSU5GT1wiLCBudWxsKTtcblx0XHRcdFx0XHR0aGlzLl9sb2dpbkhhbmRsZXIoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyDkuI3mmK/nmoTor53vvIzot7PovazpobXpnaJcblx0XHRcdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdFx0XHRwYXRoOiBjdXJEYXRhLnBhdGhcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIm5hbWU6XCIsIHRoaXMuZGF0YUxpc3RbaW5kZXhdLm5hbWUpO1xuXHRcdFx0Ly8gdGhpcy4kZW1pdChcImNoYW5nZVwiLCB7XG5cdFx0XHQvLyBcdGluZGV4OiBpbmRleCxcblx0XHRcdC8vIFx0dmFsdWU6IHRoaXMuZGF0YUxpc3RbaW5kZXhdXG5cdFx0XHQvLyB9KTtcblx0XHR9LFxuXHRcdF9sb2dpbkhhbmRsZXIoKSB7XG5cdFx0XHRodHRwUG9zdCh7IHVybDogYXBpLmxvZ291dCB9KS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiU0VUX1VTRVJfSU5GT1wiLCBudWxsKTtcblx0XHRcdFx0dGhpcy5fc2hvd0xvZ291dFRpcCgpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRfc2hvd0xvZ291dFRpcCgpIHtcblx0XHRcdC8vIOeZu+WHuuWQjueahOaPkOekulxuXHRcdFx0YWxlcnQoXCLnmbvlh7rmiJDlip9cIik7XG5cdFx0fVxuXHR9LFxuXHRjb21wdXRlZDoge1xuXHRcdGRwbExhYmxlKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF0YUxpc3RbdGhpcy5hY3RpdmVJbmRleF1bdGhpcy5sYWJlbFByb3BlcnR5XTtcblx0XHR9XG5cdH0sXG5cdGNyZWF0ZWQoKSB7XG5cdFx0Ly8gdGhpcy5cblx0fSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBbkJBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhFQTtBQWtFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFFQTtBQWxIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/footer/footer.js?vue&type=script&lang=js& ***!
  \***************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  data: function data() {\n    return {\n      key: 'value'\n    };\n  },\n  components: {},\n  methods: {\n    toPage: function toPage(name) {\n      document.documentElement.scrollTop = 0;\n      document.body.scrollTop = 0;\n      this.$router.push({\n        name: name\n      });\n    },\n    initData: function initData() {}\n  },\n  mounted: function mounted() {},\n  created: function created() {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIuanM/MGNmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gJ0AvYXBpL2FwaSdcbmltcG9ydCB7XG5cdGh0dHBHZXQsXG5cdGh0dHBQb3N0XG59IGZyb20gJ0AvYXBpL2ZldGNoLWFwaS5qcydcblxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogJ3ZhbHVlJ1xuXHRcdH1cblx0fSxcblx0Y29tcG9uZW50czoge30sXG5cdG1ldGhvZHM6IHtcblx0XHR0b1BhZ2UobmFtZSkge1xuXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG5cdFx0XHRkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IDA7XG5cdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdG5hbWU6IG5hbWVcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRpbml0RGF0YSgpIHt9XG5cdH0sXG5cdG1vdW50ZWQoKSB7fSxcblx0Y3JlYXRlZCgpIHt9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBbEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/header/header.js?vue&type=script&lang=js& ***!
  \***************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es7.object.get-own-property-descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\");\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var _components_home_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @components/home/dropdown/dropdown.vue */ \"./src/components/home/dropdown/dropdown.vue\");\n\n\n\n\n\n\nvar _name$components$comp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_name$components$comp = {\n  name: 'VHeader',\n  components: {\n    VDropdown: _components_home_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n  },\n  computed: {\n    i18n: function i18n() {\n      return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};\n    }\n  },\n  data: function data() {\n    return {\n      maxClientWidth: 950,\n      navList: [],\n      loginData: {},\n      langData: {\n        name: \"繁\",\n        path: \"\",\n        list: [{\n          name: \"繁\",\n          path: \"\",\n          value: \"tc\"\n        }, {\n          name: \"简\",\n          path: \"\",\n          value: \"zh\"\n        }, {\n          name: \"EN\",\n          path: \"\",\n          value: \"en\"\n        }]\n      }\n    };\n  }\n}, Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"computed\", _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_5__[\"mapState\"])({\n  isSmallScreen: function isSmallScreen(state) {\n    return state.isSmallScreen;\n  },\n  userInfo: function userInfo(state) {\n    return state.userInfo;\n  }\n}))), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"methods\", {\n  toIndex: function toIndex() {\n    this.$router.push({\n      path: \"/\"\n    });\n  },\n  checkIsSmallScreen: function checkIsSmallScreen() {\n    var self = this;\n\n    if (document.body.clientWidth > self.maxClientWidth) {\n      self.$store.commit('IS_SMALL_SCREEN', false);\n    } else {\n      self.$store.commit('IS_SMALL_SCREEN', true);\n    }\n  },\n  initData: function initData() {\n    var i18n = this.$i18n.messages[this.$i18n.locale] || {}; // this.loginData = i18n.nav.loginData;\n\n    this._buildLoginMenu();\n\n    this.navList = i18n.nav.navList;\n    var curLang = Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_6__[\"getObjByListKeyValue\"])(this.$i18n.locale, \"value\", this.langData.list);\n    this.langData.name = curLang.name;\n  },\n  _buildLoginMenu: function _buildLoginMenu() {\n    // 构建登录页\n    var i18n = this.$i18n.messages[this.$i18n.locale] || {};\n    var menuData = JSON.parse(JSON.stringify(i18n.nav.loginData));\n    var list = [];\n\n    if (this.userInfo && this.userInfo.name) {\n      menuData.name = this.userInfo.name;\n      menuData.list.forEach(function (element) {\n        if (element.type == \"auth\") {\n          list.push(element);\n        }\n      });\n    } else {\n      menuData.list.forEach(function (element) {\n        if (element.type == \"noAuth\") {\n          list.push(element);\n        }\n      });\n    }\n\n    menuData.list = list;\n    this.$set(this, 'loginData', menuData);\n  }\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"mounted\", function mounted() {\n  var self = this;\n  self.checkIsSmallScreen();\n\n  document.body.onresize = function () {\n    self.checkIsSmallScreen();\n  };\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"watch\", {\n  userInfo: function userInfo(val) {\n    this._buildLoginMenu();\n  }\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"created\", function created() {\n  this.initData();\n}), _name$components$comp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIuanM/M2FmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRtYXBTdGF0ZVxufSBmcm9tICd2dWV4J1xuXG5pbXBvcnQge1xuXHRnZXRPYmpCeUxpc3RLZXlWYWx1ZVxufSBmcm9tICdAdXRpbHMvdXRpbHMuanMnXG5pbXBvcnQgVkRyb3Bkb3duIGZyb20gJ0Bjb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICdWSGVhZGVyJyxcblx0Y29tcG9uZW50czoge1xuXHRcdFZEcm9wZG93blxuXHR9LFxuXHRjb21wdXRlZDoge1xuXHRcdGkxOG4oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5tZXNzYWdlcyAmJiB0aGlzLiRpMThuLmxvY2FsZSA/IHRoaXMuJGkxOG4ubWVzc2FnZXNbdGhpcy4kaTE4bi5sb2NhbGVdIDoge307XG5cdFx0fVxuXHR9LFxuXHRkYXRhKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtYXhDbGllbnRXaWR0aDogOTUwLFxuXHRcdFx0bmF2TGlzdDogW10sXG5cdFx0XHRsb2dpbkRhdGE6IHt9LFxuXHRcdFx0bGFuZ0RhdGE6IHtcblx0XHRcdFx0bmFtZTogXCLnuYFcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0bGlzdDogW3tcblx0XHRcdFx0XHRuYW1lOiBcIue5gVwiLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwidGNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCLnroBcIixcblx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcInpoXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiRU5cIixcblx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImVuXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHQuLi5tYXBTdGF0ZSh7XG5cdFx0XHRpc1NtYWxsU2NyZWVuOiBzdGF0ZSA9PiBzdGF0ZS5pc1NtYWxsU2NyZWVuLFxuXHRcdFx0dXNlckluZm86IHN0YXRlID0+IHN0YXRlLnVzZXJJbmZvXG5cdFx0fSlcblx0fSxcblx0bWV0aG9kczoge1xuXHRcdHRvSW5kZXgoKSB7XG5cdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdHBhdGg6IFwiL1wiXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0Y2hlY2tJc1NtYWxsU2NyZWVuKCkge1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA+IHNlbGYubWF4Q2xpZW50V2lkdGgpIHtcblx0XHRcdFx0c2VsZi4kc3RvcmUuY29tbWl0KCdJU19TTUFMTF9TQ1JFRU4nLCBmYWxzZSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuJHN0b3JlLmNvbW1pdCgnSVNfU01BTExfU0NSRUVOJywgdHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluaXREYXRhKCkge1xuXHRcdFx0bGV0IGkxOG4gPSB0aGlzLiRpMThuLm1lc3NhZ2VzW3RoaXMuJGkxOG4ubG9jYWxlXSB8fCB7fTtcblx0XHRcdC8vIHRoaXMubG9naW5EYXRhID0gaTE4bi5uYXYubG9naW5EYXRhO1xuXHRcdFx0dGhpcy5fYnVpbGRMb2dpbk1lbnUoKTtcblx0XHRcdHRoaXMubmF2TGlzdCA9IGkxOG4ubmF2Lm5hdkxpc3Q7XG5cdFx0XHRsZXQgY3VyTGFuZyA9IGdldE9iakJ5TGlzdEtleVZhbHVlKHRoaXMuJGkxOG4ubG9jYWxlLCBcInZhbHVlXCIsIHRoaXMubGFuZ0RhdGEubGlzdClcblx0XHRcdHRoaXMubGFuZ0RhdGEubmFtZSA9IGN1ckxhbmcubmFtZTtcblx0XHR9LFxuXHRcdF9idWlsZExvZ2luTWVudSgpIHtcblx0XHRcdC8vIOaehOW7uueZu+W9lemhtVxuXHRcdFx0bGV0IGkxOG4gPSB0aGlzLiRpMThuLm1lc3NhZ2VzW3RoaXMuJGkxOG4ubG9jYWxlXSB8fCB7fTtcblx0XHRcdGxldCBtZW51RGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaTE4bi5uYXYubG9naW5EYXRhKSk7XG5cdFx0XHRsZXQgbGlzdCA9IFtdO1xuXHRcdFx0aWYgKHRoaXMudXNlckluZm8gJiYgdGhpcy51c2VySW5mby5uYW1lKSB7XG5cdFx0XHRcdG1lbnVEYXRhLm5hbWUgPSB0aGlzLnVzZXJJbmZvLm5hbWU7XG5cdFx0XHRcdG1lbnVEYXRhLmxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudC50eXBlID09IFwiYXV0aFwiKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVEYXRhLmxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudC50eXBlID09IFwibm9BdXRoXCIpIHtcblx0XHRcdFx0XHRcdGxpc3QucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0bWVudURhdGEubGlzdCA9IGxpc3Q7XG5cdFx0XHR0aGlzLiRzZXQodGhpcywgJ2xvZ2luRGF0YScsIG1lbnVEYXRhKTtcblx0XHR9XG5cdH0sXG5cdG1vdW50ZWQoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c2VsZi5jaGVja0lzU21hbGxTY3JlZW4oKTtcblx0XHRkb2N1bWVudC5ib2R5Lm9ucmVzaXplID0gKCkgPT4ge1xuXHRcdFx0c2VsZi5jaGVja0lzU21hbGxTY3JlZW4oKTtcblx0XHR9XG5cdH0sXG5cdHdhdGNoOiB7XG5cdFx0dXNlckluZm8odmFsKSB7XG5cdFx0XHR0aGlzLl9idWlsZExvZ2luTWVudSgpO1xuXHRcdH1cblx0fSxcblx0Y3JlYXRlZCgpIHtcblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUlBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQWJBO0FBSkE7QUF5QkE7QUFwQ0E7QUF1Q0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBM0NBO0FBOENBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/pages/index?vue&type=script&lang=js& ***!
  \******************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  data: function data() {\n    return {\n      key: 'value',\n      swiperOption: {\n        navigation: {\n          nextEl: '.swiper-button-next',\n          prevEl: '.swiper-button-prev'\n        },\n        pagination: {\n          el: '.swiper-pagination' // renderBullet(index, className) {\n          // \treturn `<span class=\"${className} swiper-pagination-bullet-custom\">${index + 1}</span>`\n          // }\n\n        },\n        autoplay: {\n          delay: 5000,\n          stopOnLastSlide: false,\n          disableOnInteraction: false\n        },\n        speed: 1000\n      }\n    };\n  },\n  components: {},\n  computed: {\n    locale: function locale() {\n      return this.$i18n.locale || 'tc';\n    },\n    i18n: function i18n() {\n      return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};\n    }\n  },\n  methods: {\n    /**\n     * 推荐产品\n     */\n    onRecommendHandler: function onRecommendHandler(val) {\n      if (val == 1) {\n        this.$router.push({\n          path: \"/product\"\n        });\n      }\n\n      if (val == 2) {\n        this.$router.push({\n          path: \"/custom/service?q=m6\"\n        });\n      }\n\n      if (val == 3) {\n        this.$router.push({\n          path: \"/custom/product\"\n        });\n      }\n    },\n\n    /**\n     * 推荐产品\n     */\n    onMoreNewsHandler: function onMoreNewsHandler() {\n      this.$router.push({\n        path: \"/news/list\"\n      });\n    },\n\n    /**\n     * 去新闻详情页面\n     * 需要带id\n     */\n    toNewsDetail: function toNewsDetail() {\n      this.$router.push({\n        path: '/news/detail'\n      });\n    },\n    toProfile: function toProfile() {\n      this.$router.push({\n        path: '/profile'\n      });\n    },\n    initData: function initData() {}\n  },\n  mounted: function mounted() {},\n  created: function created() {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9wYWdlcy9pbmRleC9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXguanM/NDRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gJ0AvYXBpL2FwaSdcbmltcG9ydCB7XG5cdGh0dHBHZXQsXG5cdGh0dHBQb3N0XG59IGZyb20gJ0AvYXBpL2ZldGNoLWFwaS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuXHRkYXRhKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6ICd2YWx1ZScsXG5cdFx0XHRzd2lwZXJPcHRpb246IHtcblx0XHRcdFx0bmF2aWdhdGlvbjoge1xuXHRcdFx0XHRcdG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLFxuXHRcdFx0XHRcdHByZXZFbDogJy5zd2lwZXItYnV0dG9uLXByZXYnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhZ2luYXRpb246IHtcblx0XHRcdFx0XHRlbDogJy5zd2lwZXItcGFnaW5hdGlvbicsXG5cdFx0XHRcdFx0Ly8gcmVuZGVyQnVsbGV0KGluZGV4LCBjbGFzc05hbWUpIHtcblx0XHRcdFx0XHQvLyBcdHJldHVybiBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX0gc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWN1c3RvbVwiPiR7aW5kZXggKyAxfTwvc3Bhbj5gXG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhdXRvcGxheToge1xuXHRcdFx0XHRcdGRlbGF5OiA1MDAwLFxuXHRcdFx0XHRcdHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG5cdFx0XHRcdFx0ZGlzYWJsZU9uSW50ZXJhY3Rpb246IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNwZWVkOiAxMDAwLFxuXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRjb21wb25lbnRzOiB7fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHRsb2NhbGUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5sb2NhbGUgfHwgJ3RjJztcblx0XHR9LFxuXHRcdGkxOG4oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5tZXNzYWdlcyAmJiB0aGlzLiRpMThuLmxvY2FsZSA/IHRoaXMuJGkxOG4ubWVzc2FnZXNbdGhpcy4kaTE4bi5sb2NhbGVdIDoge307XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0LyoqXG5cdFx0ICog5o6o6I2Q5Lqn5ZOBXG5cdFx0ICovXG5cdFx0b25SZWNvbW1lbmRIYW5kbGVyKHZhbCkge1xuXHRcdFx0aWYgKHZhbCA9PSAxKSB7XG5cdFx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0XHRwYXRoOiBcIi9wcm9kdWN0XCJcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGlmICh2YWwgPT0gMikge1xuXHRcdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNlwiXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsID09IDMpIHtcblx0XHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9wcm9kdWN0XCJcblx0XHRcdFx0fSlcblx0XHRcdH1cblxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiDmjqjojZDkuqflk4Fcblx0XHQgKi9cblx0XHRvbk1vcmVOZXdzSGFuZGxlcigpIHtcblx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0cGF0aDogXCIvbmV3cy9saXN0XCJcblx0XHRcdH0pXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIOWOu+aWsOmXu+ivpuaDhemhtemdolxuXHRcdCAqIOmcgOimgeW4pmlkXG5cdFx0ICovXG5cdFx0dG9OZXdzRGV0YWlsKCkge1xuXHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRwYXRoOiAnL25ld3MvZGV0YWlsJ1xuXHRcdFx0fSlcblx0XHR9LFxuXHRcdHRvUHJvZmlsZSgpe1xuXHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRwYXRoOiAnL3Byb2ZpbGUnXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0aW5pdERhdGEoKSB7fVxuXHR9LFxuXHRtb3VudGVkKCkge30sXG5cdGNyZWF0ZWQoKSB7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBaEJBO0FBRkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQTlDQTtBQWdEQTtBQUNBO0FBbkZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=template&id=7ba5bd90& ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { attrs: { id: \"app\" } },\n    [\n      _c(\"v-header\"),\n      _c(\n        \"main\",\n        { ref: \"container\", staticClass: \"main-container\" },\n        [_c(\"router-view\")],\n        1\n      ),\n      _c(\"v-footer\")\n    ],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9BcHAudnVlP2U2ZjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgYXR0cnM6IHsgaWQ6IFwiYXBwXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwidi1oZWFkZXJcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJtYWluXCIsXG4gICAgICAgIHsgcmVmOiBcImNvbnRhaW5lclwiLCBzdGF0aWNDbGFzczogXCJtYWluLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFtfYyhcInJvdXRlci12aWV3XCIpXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF9jKFwidi1mb290ZXJcIilcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", [\n    _c(\n      \"div\",\n      {\n        staticClass: \"drop-list\",\n        on: {\n          mouseover: function($event) {\n            return _vm.onOverHandler($event)\n          },\n          mouseout: function($event) {\n            return _vm.onOutHandler($event)\n          }\n        }\n      },\n      [\n        _vm.type == \"login\"\n          ? [\n              _c(\"div\", { staticClass: \"user\" }, [\n                _c(\"img\", {\n                  staticClass: \"icon-img\",\n                  attrs: { src: __webpack_require__(/*! @/assets/images/home/icon-user.png */ \"./src/assets/images/home/icon-user.png\") }\n                }),\n                _c(\"span\", [_vm._v(_vm._s(_vm.dataObj.name))])\n              ])\n            ]\n          : [\n              _c(\n                \"span\",\n                {\n                  on: {\n                    click: function($event) {\n                      return _vm.onNavHandler()\n                    }\n                  }\n                },\n                [\n                  _vm._v(\n                    \"\\n\\t\\t\\t\\t\" +\n                      _vm._s(\n                        _vm.type == \"lang\" ? _vm.sTitle : _vm.dataObj.name\n                      ) +\n                      \"\\n\\t\\t\\t\"\n                  )\n                ]\n              )\n            ],\n        _c(\"div\", { staticClass: \"list\" }, [\n          _c(\"div\", { staticClass: \"space\" }),\n          _c(\n            \"ul\",\n            { directives: [{ name: \"dpl\", rawName: \"v-dpl\" }], ref: \"ul\" },\n            _vm._l(_vm.dataList, function(item, index) {\n              return _c(\n                \"li\",\n                {\n                  key: index,\n                  on: {\n                    mousedown: function($event) {\n                      return _vm.onClickHandler($event, index)\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(item[_vm.labelProperty]))]\n              )\n            }),\n            0\n          )\n        ])\n      ],\n      2\n    )\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNiNGYzNWFmJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlPzc0ODMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJkcm9wLWxpc3RcIixcbiAgICAgICAgb246IHtcbiAgICAgICAgICBtb3VzZW92ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5vbk92ZXJIYW5kbGVyKCRldmVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vdXNlb3V0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0ub25PdXRIYW5kbGVyKCRldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS50eXBlID09IFwibG9naW5cIlxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInVzZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiaWNvbi1pbWdcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmdcIikgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZGF0YU9iai5uYW1lKSldKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbk5hdkhhbmRsZXIoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuXFx0XFx0XFx0XFx0XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS50eXBlID09IFwibGFuZ1wiID8gX3ZtLnNUaXRsZSA6IF92bS5kYXRhT2JqLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcblxcdFxcdFxcdFwiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImxpc3RcIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzcGFjZVwiIH0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBkaXJlY3RpdmVzOiBbeyBuYW1lOiBcImRwbFwiLCByYXdOYW1lOiBcInYtZHBsXCIgfV0sIHJlZjogXCJ1bFwiIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLmRhdGFMaXN0LCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DbGlja0hhbmRsZXIoJGV2ZW50LCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbVtfdm0ubGFiZWxQcm9wZXJ0eV0pKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true& ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"footer\", { staticClass: \"v-footer \" }, [\n    _c(\"div\", { staticClass: \"content footer-containter \" }, [\n      _c(\"div\", { staticClass: \"cont\" }, [\n        _vm._m(0),\n        _c(\"div\", { staticClass: \"line\" }),\n        _c(\"div\", { staticClass: \"info\" }, [\n          _c(\"div\", { staticClass: \"hotline\" }, [\n            _c(\"div\", { staticClass: \"contact\" }, [\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.hkPhone\")))\n              ]),\n              _c(\"div\", { staticClass: \"phone\" }, [_vm._v(\"(852)2983 8866\")])\n            ]),\n            _c(\"div\", { staticClass: \"contact\" }, [\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.cnPhone\")))\n              ]),\n              _c(\"div\", { staticClass: \"phone\" }, [_vm._v(\"(86)40078 95511\")])\n            ])\n          ]),\n          _c(\"div\", { staticClass: \"nav\" }, [\n            _c(\"div\", { staticClass: \"nav-v\" }, [\n              _c(\n                \"div\",\n                {\n                  staticClass: \"n-item\",\n                  on: {\n                    click: function($event) {\n                      return _vm.toPage(\"profile\")\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(_vm.$t(\"footer.aboutUs\")))]\n              ),\n              _c(\n                \"div\",\n                {\n                  staticClass: \"n-item\",\n                  on: {\n                    click: function($event) {\n                      return _vm.toPage(\"profile\")\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(_vm.$t(\"footer.companyIntroduction\")))]\n              ),\n              _c(\n                \"div\",\n                {\n                  staticClass: \"n-item\",\n                  on: {\n                    click: function($event) {\n                      return _vm.toPage(\"newsList\")\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(_vm.$t(\"footer.news\")))]\n              ),\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.joinUs\")))\n              ])\n            ]),\n            _c(\"div\", { staticClass: \"nav-v\" }, [\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.helpCenter\")))\n              ]),\n              _c(\n                \"div\",\n                {\n                  staticClass: \"n-item\",\n                  on: {\n                    click: function($event) {\n                      return _vm.toPage(\"privacy\")\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(_vm.$t(\"footer.privacy\")))]\n              ),\n              _c(\n                \"div\",\n                {\n                  staticClass: \"n-item\",\n                  on: {\n                    click: function($event) {\n                      return _vm.toPage(\"terms\")\n                    }\n                  }\n                },\n                [_vm._v(_vm._s(_vm.$t(\"footer.terms\")))]\n              ),\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.map\")))\n              ])\n            ]),\n            _c(\"div\", { staticClass: \"nav-v\" }, [\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.contactUs\")))\n              ]),\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.contactInformation\")))\n              ]),\n              _c(\"div\", { staticClass: \"n-item\" }, [\n                _vm._v(_vm._s(_vm.$t(\"footer.service\")))\n              ])\n            ])\n          ]),\n          _c(\"div\", { staticClass: \"public\" }, [\n            _c(\"div\", { staticClass: \"tit\" }, [\n              _vm._v(_vm._s(_vm.$t(\"footer.qrcode\")))\n            ]),\n            _c(\"img\", {\n              staticClass: \"qrcode\",\n              attrs: {\n                src: __webpack_require__(/*! @/assets/images/home/qrcode-focus.png */ \"./src/assets/images/home/qrcode-focus.png\"),\n                alt: \"\"\n              }\n            })\n          ])\n        ]),\n        _c(\"div\", { staticClass: \"line\" }),\n        _c(\"div\", { staticClass: \"copyright\" }, [\n          _vm._v(\n            \"\\n\\t\\t\\t\\t\" + _vm._s(_vm.$t(\"footer.copyright\")) + \"\\n\\t\\t\\t\\t\"\n          ),\n          _c(\"br\"),\n          _vm._v(\n            \"Copyright © PING AN INSURANCE (GROUP) COMPANY OF CHINA ,LTD. All Rights Reserved\\n\\t\\t\\t\"\n          )\n        ])\n      ])\n    ])\n  ])\n}\nvar staticRenderFns = [\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"logo-wrap\" }, [\n      _c(\"img\", {\n        staticClass: \"logo-img\",\n        attrs: {\n          src: __webpack_require__(/*! @/assets/images/home/footer-logo.png */ \"./src/assets/images/home/footer-logo.png\"),\n          alt: \"中国平安人寿保险\"\n        }\n      })\n    ])\n  }\n]\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3OGZjMjImc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZT85MzMzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJmb290ZXJcIiwgeyBzdGF0aWNDbGFzczogXCJ2LWZvb3RlciBcIiB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250ZW50IGZvb3Rlci1jb250YWludGVyIFwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udFwiIH0sIFtcbiAgICAgICAgX3ZtLl9tKDApLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImxpbmVcIiB9KSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbmZvXCIgfSwgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaG90bGluZVwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGFjdFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuaGtQaG9uZVwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBob25lXCIgfSwgW192bS5fdihcIig4NTIpMjk4MyA4ODY2XCIpXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250YWN0XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImZvb3Rlci5jblBob25lXCIpKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicGhvbmVcIiB9LCBbX3ZtLl92KFwiKDg2KTQwMDc4IDk1NTExXCIpXSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXZcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi12XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJvZmlsZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuYWJvdXRVc1wiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJvZmlsZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuY29tcGFueUludHJvZHVjdGlvblwiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwibmV3c0xpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLm5ld3NcIikpKV1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuam9pblVzXCIpKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtdlwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuaGVscENlbnRlclwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJpdmFjeVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIucHJpdmFjeVwiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwidGVybXNcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLnRlcm1zXCIpKSldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibi1pdGVtXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLm1hcFwiKSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LXZcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibi1pdGVtXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLmNvbnRhY3RVc1wiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImZvb3Rlci5jb250YWN0SW5mb3JtYXRpb25cIikpKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuc2VydmljZVwiKSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHVibGljXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0aXRcIiB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLnFyY29kZVwiKSkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicXJjb2RlXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2hvbWUvcXJjb2RlLWZvY3VzLnBuZ1wiKSxcbiAgICAgICAgICAgICAgICBhbHQ6IFwiXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJsaW5lXCIgfSksXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29weXJpZ2h0XCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIFwiXFxuXFx0XFx0XFx0XFx0XCIgKyBfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLmNvcHlyaWdodFwiKSkgKyBcIlxcblxcdFxcdFxcdFxcdFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcImJyXCIpLFxuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIFwiQ29weXJpZ2h0IMKpIFBJTkcgQU4gSU5TVVJBTkNFIChHUk9VUCkgQ09NUEFOWSBPRiBDSElOQSDvvIxMVEQuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG5cXHRcXHRcXHRcIlxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibG9nby13cmFwXCIgfSwgW1xuICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJsb2dvLWltZ1wiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9ob21lL2Zvb3Rlci1sb2dvLnBuZ1wiKSxcbiAgICAgICAgICBhbHQ6IFwi5Lit5Zu95bmz5a6J5Lq65a+/5L+d6ZmpXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdKVxuICB9XG5dXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true& ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"header\", { staticClass: \"v-header\" }, [\n    _c(\"div\", { staticClass: \"header-container\" }, [\n      _c(\"img\", {\n        staticClass: \"logo-img\",\n        attrs: {\n          src: __webpack_require__(/*! @/assets/images/home/header-logo.png */ \"./src/assets/images/home/header-logo.png\"),\n          alt: \"中国平安人寿保险\"\n        },\n        on: { click: _vm.toIndex }\n      }),\n      _c(\"div\", { staticClass: \"main-nav\" }, [\n        _c(\"div\", { staticClass: \"nav-list\" }, [\n          _c(\n            \"div\",\n            { staticClass: \"main-nav-list\" },\n            _vm._l(_vm.navList, function(item) {\n              return _c(\"v-dropdown\", {\n                key: item.id,\n                attrs: { \"data-obj\": item, \"data-list\": item.list }\n              })\n            }),\n            1\n          ),\n          _c(\"div\", { staticClass: \"nav-item search\" }),\n          _c(\"div\", { staticClass: \"nav-item submit\" }),\n          _c(\n            \"div\",\n            { staticClass: \"nav-item auth\" },\n            [\n              _c(\"v-dropdown\", {\n                staticClass: \"lang\",\n                attrs: {\n                  type: \"login\",\n                  \"data-obj\": _vm.loginData,\n                  \"data-list\": _vm.loginData.list\n                }\n              }),\n              _c(\"v-dropdown\", {\n                staticClass: \"lang\",\n                attrs: {\n                  type: \"lang\",\n                  \"data-obj\": _vm.langData,\n                  \"data-list\": _vm.langData.list\n                }\n              })\n            ],\n            1\n          )\n        ])\n      ])\n    ])\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZiYThkYWYmc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZT8wZDUzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJoZWFkZXJcIiwgeyBzdGF0aWNDbGFzczogXCJ2LWhlYWRlclwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImhlYWRlci1jb250YWluZXJcIiB9LCBbXG4gICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImxvZ28taW1nXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2hvbWUvaGVhZGVyLWxvZ28ucG5nXCIpLFxuICAgICAgICAgIGFsdDogXCLkuK3lm73lubPlronkurrlr7/kv53pmalcIlxuICAgICAgICB9LFxuICAgICAgICBvbjogeyBjbGljazogX3ZtLnRvSW5kZXggfVxuICAgICAgfSksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1haW4tbmF2XCIgfSwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1saXN0XCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibWFpbi1uYXYtbGlzdFwiIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLm5hdkxpc3QsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFwidi1kcm9wZG93blwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiZGF0YS1vYmpcIjogaXRlbSwgXCJkYXRhLWxpc3RcIjogaXRlbS5saXN0IH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtaXRlbSBzZWFyY2hcIiB9KSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtIHN1Ym1pdFwiIH0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW0gYXV0aFwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidi1kcm9wZG93blwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibGFuZ1wiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImxvZ2luXCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtb2JqXCI6IF92bS5sb2dpbkRhdGEsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtbGlzdFwiOiBfdm0ubG9naW5EYXRhLmxpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfYyhcInYtZHJvcGRvd25cIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImxhbmdcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJsYW5nXCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtb2JqXCI6IF92bS5sYW5nRGF0YSxcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1saXN0XCI6IF92bS5sYW5nRGF0YS5saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true& ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", [\n    _c(\"div\", { staticClass: \"content\" }, [\n      _c(\"div\", { staticClass: \"banner-contaner\" }, [\n        _c(\n          \"div\",\n          { staticClass: \"banner\" },\n          [\n            _c(\n              \"swiper\",\n              { attrs: { options: _vm.swiperOption } },\n              [\n                _c(\"swiper-slide\", [\n                  _c(\"img\", {\n                    staticClass: \"banner-img\",\n                    attrs: { src: __webpack_require__(/*! @/assets/images/index/banner.png */ \"./src/assets/images/index/banner.png\") }\n                  })\n                ]),\n                _c(\"swiper-slide\", [\n                  _c(\"img\", {\n                    staticClass: \"banner-img\",\n                    attrs: { src: __webpack_require__(/*! @/assets/images/index/banner.png */ \"./src/assets/images/index/banner.png\") }\n                  })\n                ]),\n                _c(\"div\", {\n                  staticClass: \"swiper-button-prev\",\n                  attrs: { slot: \"button-prev\" },\n                  slot: \"button-prev\"\n                }),\n                _c(\"div\", {\n                  staticClass: \"swiper-button-next\",\n                  attrs: { slot: \"button-next\" },\n                  slot: \"button-next\"\n                }),\n                _c(\"div\", {\n                  staticClass: \"swiper-pagination\",\n                  attrs: { slot: \"pagination\" },\n                  slot: \"pagination\"\n                })\n              ],\n              1\n            )\n          ],\n          1\n        )\n      ]),\n      _c(\"div\", { staticClass: \"box recommend\" }, [\n        _c(\"div\", { staticClass: \"recommend-item\" }, [\n          _c(\n            \"div\",\n            {\n              staticClass: \"btn pointer\",\n              on: {\n                click: function($event) {\n                  return _vm.onRecommendHandler(1)\n                }\n              }\n            },\n            [_vm._v(_vm._s(_vm.$t(\"index.recommend.item1.btn\")))]\n          ),\n          _c(\"div\", { staticClass: \"tt t1\" }, [\n            _vm._v(_vm._s(_vm.$t(\"index.recommend.item1.t1\")))\n          ]),\n          _c(\"img\", {\n            attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-1.png */ \"./src/assets/images/index/recommend-1.png\") }\n          })\n        ]),\n        _c(\"div\", { staticClass: \"recommend-item\" }, [\n          _c(\n            \"div\",\n            {\n              staticClass: \"btn pointer\",\n              on: {\n                click: function($event) {\n                  return _vm.onRecommendHandler(2)\n                }\n              }\n            },\n            [_vm._v(_vm._s(_vm.$t(\"index.recommend.item2.btn\")))]\n          ),\n          _c(\"div\", { staticClass: \"tt t1\" }, [\n            _vm._v(_vm._s(_vm.$t(\"index.recommend.item2.t1\")))\n          ]),\n          _c(\"img\", {\n            attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-2.png */ \"./src/assets/images/index/recommend-2.png\") }\n          })\n        ]),\n        _c(\"div\", { staticClass: \"recommend-item\" }, [\n          _c(\n            \"div\",\n            {\n              staticClass: \"btn pointer\",\n              on: {\n                click: function($event) {\n                  return _vm.onRecommendHandler(3)\n                }\n              }\n            },\n            [_vm._v(_vm._s(_vm.$t(\"index.recommend.item3.btn\")))]\n          ),\n          _c(\"div\", { staticClass: \"tt t2\" }, [\n            _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t1\")))\n          ]),\n          _c(\"div\", { staticClass: \"tt t1\" }, [\n            _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t2\")) + \"\\n\\t\\t\\t\\t\\t\"),\n            _c(\"span\", { staticClass: \"cOrange\" }, [\n              _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t3\")))\n            ]),\n            _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t4\")))\n          ]),\n          _c(\"img\", {\n            attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-3.png */ \"./src/assets/images/index/recommend-3.png\") }\n          })\n        ])\n      ]),\n      _c(\"div\", { staticClass: \"box more\" }, [\n        _c(\"div\", { staticClass: \"cont\" }, [\n          _c(\"div\", {\n            staticClass: \"btn pointer\",\n            on: {\n              click: function($event) {\n                return _vm.toProfile()\n              }\n            }\n          }),\n          _c(\"img\", {\n            attrs: {\n              src: __webpack_require__(\"./src/assets/images/index sync recursive ^\\\\.\\\\/more\\\\-1\\\\-.*\\\\.png$\")(\"./more-1-\" +\n                _vm.locale +\n                \".png\")\n            }\n          })\n        ])\n      ]),\n      _c(\"div\", { staticClass: \"box news\" }, [\n        _c(\"div\", { staticClass: \"linear\" }),\n        _c(\"div\", { staticClass: \"tit\" }, [\n          _vm._v(_vm._s(_vm.$t(\"index.news\")))\n        ]),\n        _c(\"div\", { staticClass: \"under-line\" }),\n        _c(\n          \"div\",\n          { staticClass: \"news-wrap\" },\n          [\n            _vm.locale == \"zh\"\n              ? [\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"more pointer\",\n                      on: { click: _vm.onMoreNewsHandler }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\\t\\t\" +\n                          _vm._s(_vm.$t(\"index.newMore\")) +\n                          \" >\\n\\t\\t\\t\\t\\t\"\n                      )\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"平安人寿2019年2季度保险消费报告出炉!\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"公益献礼华诞年,创新开拓扶贫路\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"平安920要放大招啦!内含超强攻略!\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"突发!平安人寿迅速应对广东阳江大巴交通事故\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"伴成长、助扶贫,平安人寿客服节给家庭“AI”的力量\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  )\n                ]\n              : [\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"more pointer\",\n                      on: { click: _vm.onMoreNewsHandler }\n                    },\n                    [\n                      _vm._v(\n                        \"\\n\\t\\t\\t\\t\\t\\t\" +\n                          _vm._s(_vm.$t(\"index.newMore\")) +\n                          \" >\\n\\t\\t\\t\\t\\t\"\n                      )\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"平安人壽2019年2季度保險消費報告出爐!\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"公益獻禮華誕年,創新開拓扶貧路\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"平安920要放大招啦!內含超強攻略!\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"突發!平安人壽迅速應對廣東陽江大巴交通事故\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  ),\n                  _c(\n                    \"div\",\n                    {\n                      staticClass: \"news-item\",\n                      on: {\n                        click: function($event) {\n                          return _vm.toNewsDetail()\n                        }\n                      }\n                    },\n                    [\n                      _c(\"div\", { staticClass: \"news-item-tit\" }, [\n                        _vm._v(\"伴成長、助扶貧,平安人壽客服節給家庭“AI”的力量\")\n                      ]),\n                      _c(\"div\", { staticClass: \"news-item-date\" }, [\n                        _vm._v(\"2019-09-27\")\n                      ])\n                    ]\n                  )\n                ]\n          ],\n          2\n        )\n      ])\n    ])\n  ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhZGM4MDEmc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4L2luZGV4LnZ1ZT9jN2RlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGVudFwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWNvbnRhbmVyXCIgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYmFubmVyXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzd2lwZXJcIixcbiAgICAgICAgICAgICAgeyBhdHRyczogeyBvcHRpb25zOiBfdm0uc3dpcGVyT3B0aW9uIH0gfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3dpcGVyLXNsaWRlXCIsIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWltZ1wiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZ1wiKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF9jKFwic3dpcGVyLXNsaWRlXCIsIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWltZ1wiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZ1wiKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN3aXBlci1idXR0b24tcHJldlwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2xvdDogXCJidXR0b24tcHJldlwiIH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcImJ1dHRvbi1wcmV2XCJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzd2lwZXItYnV0dG9uLW5leHRcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwiYnV0dG9uLW5leHRcIiB9LFxuICAgICAgICAgICAgICAgICAgc2xvdDogXCJidXR0b24tbmV4dFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3dpcGVyLXBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwicGFnaW5hdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImJveCByZWNvbW1lbmRcIiB9LCBbXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicmVjb21tZW5kLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gcG9pbnRlclwiLFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25SZWNvbW1lbmRIYW5kbGVyKDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0xLmJ0blwiKSkpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0dCB0MVwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0xLnQxXCIpKSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvcmVjb21tZW5kLTEucG5nXCIpIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyZWNvbW1lbmQtaXRlbVwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBwb2ludGVyXCIsXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vblJlY29tbWVuZEhhbmRsZXIoMilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTIuYnRuXCIpKSldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInR0IHQxXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTIudDFcIikpKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmdcIikgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJlY29tbWVuZC1pdGVtXCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIHBvaW50ZXJcIixcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUmVjb21tZW5kSGFuZGxlcigzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy5idG5cIikpKV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidHQgdDJcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy50MVwiKSkpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0dCB0MVwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0zLnQyXCIpKSArIFwiXFxuXFx0XFx0XFx0XFx0XFx0XCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY09yYW5nZVwiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTMudDNcIikpKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy50NFwiKSkpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2luZGV4L3JlY29tbWVuZC0zLnBuZ1wiKSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJib3ggbW9yZVwiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250XCIgfSwgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBwb2ludGVyXCIsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS50b1Byb2ZpbGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2luZGV4L21vcmUtMS1cIiArXG4gICAgICAgICAgICAgICAgX3ZtLmxvY2FsZSArXG4gICAgICAgICAgICAgICAgXCIucG5nXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJib3ggbmV3c1wiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJsaW5lYXJcIiB9KSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0aXRcIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5uZXdzXCIpKSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidW5kZXItbGluZVwiIH0pLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmV3cy13cmFwXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0ubG9jYWxlID09IFwiemhcIlxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibW9yZSBwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbk1vcmVOZXdzSGFuZGxlciB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS4kdChcImluZGV4Lm5ld01vcmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgPlxcblxcdFxcdFxcdFxcdFxcdFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5bmz5a6J5Lq65a+/MjAxOeW5tDLlraPluqbkv53pmanmtojotLnmiqXlkYrlh7rngonvvIFcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLlhaznm4rnjK7npLzljY7or57lubTvvIzliJvmlrDlvIDmi5PmibbotKvot69cIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLlubPlrok5MjDopoHmlL7lpKfmi5vllabvvIHlhoXlkKvotoXlvLrmlLvnlaXvvIFcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLnqoHlj5HvvIHlubPlronkurrlr7/ov4XpgJ/lupTlr7nlub/kuJzpmLPmsZ/lpKflt7TkuqTpgJrkuovmlYVcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLkvLTmiJDplb/jgIHliqnmibbotKvvvIzlubPlronkurrlr7/lrqLmnI3oioLnu5nlrrbluq3igJxBSeKAneeahOWKm+mHj1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtLWRhdGVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIyMDE5LTA5LTI3XCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm1vcmUgcG9pbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub25Nb3JlTmV3c0hhbmRsZXIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uJHQoXCJpbmRleC5uZXdNb3JlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiID5cXG5cXHRcXHRcXHRcXHRcXHRcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50b05ld3NEZXRhaWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtLXRpdFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIuW5s+WuieS6uuWjvTIwMTnlubQy5a2j5bqm5L+d6Zqq5raI6LK75aCx5ZGK5Ye654iQ77yBXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5YWs55uK542756au6I+v6KqV5bm077yM5Ym15paw6ZaL5ouT5om26LKn6LevXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5bmz5a6JOTIw6KaB5pS+5aSn5oub5ZWm77yB5YWn5ZCr6LaF5by35pS755Wl77yBXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi56qB55m877yB5bmz5a6J5Lq65aO96L+F6YCf5oeJ5bCN5buj5p2x6Zm95rGf5aSn5be05Lqk6YCa5LqL5pWFXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5Ly05oiQ6ZW344CB5Yqp5om26LKn77yM5bmz5a6J5Lq65aO95a6i5pyN56+A57Wm5a625bqt4oCcQUnigJ3nmoTlipvph49cIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzPzg0NTEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcz9hYjE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar at = __webpack_require__(/*! ./_string-at */ \"./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/ZmYwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/NWUwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcz84Y2FjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/MWY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_classof.js":
/*!******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_classof.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzPzAyZjIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_cof.js":
/*!**************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_cof.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY29mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2NvZi5qcz82MDc3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_core.js":
/*!***************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_core.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var core = module.exports = { version: '2.6.10' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY29yZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzP2RhMjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMCcgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_core.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcz9lMzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js":
/*!**************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY3R4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2N0eC5qcz9lODVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_defined.js":
/*!******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_defined.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzPzMwMzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/ZjlhNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzPzY2MTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js":
/*!************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzP2Q5M2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_export.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_export.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcz8yNDk4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_export.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_fails.js":
/*!****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_fails.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/MGNjMSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n__webpack_require__(/*! ./es6.regexp.exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzPzZhZjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_flags.js":
/*!****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_flags.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/ZTdhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js\");\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcz8yMmFlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcz82ZmUwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_global.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_global.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcz8zZjhiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_global.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_has.js":
/*!**************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_has.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faGFzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2hhcy5qcz81NDlkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_has.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_hide.js":
/*!***************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_hide.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faGlkZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzP2I4ZWEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_html.js":
/*!***************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_html.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19odG1sLmpzPzE3Y2IiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_html.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n  return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/MjVhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js":
/*!******************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./_set-proto */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js\").set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzPzFlMDEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcz8yZjFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js":
/*!******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzPzk5NTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js":
/*!************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzPzY3YzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcz9kYTBiIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\nvar MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcz81ZjljIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcz9kZDgwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/YzI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/NGFlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/YjMwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcz9jOGU5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcz9lM2IzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge307XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_library.js":
/*!******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_library.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzPzZjYzIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_library.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar macrotask = __webpack_require__(/*! ./_task */ \"./node_modules/_core-js@2.6.10@core-js/modules/_task.js\").set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcz85NDk3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzPzIxY2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js":
/*!************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzPzg3YzUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js":
/*!************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(/*! ./_html */ \"./node_modules/_core-js@2.6.10@core-js/modules/_html.js\").appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzPzY1YzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcz9kM2Q4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzPzhkNjkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/ZTQ5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\");\nvar hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/Y2IyZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/OWQ2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzP2QxNWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/N2FmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/N2Q1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzP2M4NjQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzPzg4NjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js":
/*!*******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar Reflect = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/ZjM2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_perform.js":
/*!******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_perform.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzP2Q4YmQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_perform.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcz9hMDdjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js":
/*!************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzPzA2MTQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js":
/*!***********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcz9hMTdjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js":
/*!*******************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar SRC = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\").inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/YTZkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/MjEzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/MTMzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcz9hZTZlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js":
/*!**********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/ZTQ2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js":
/*!****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/M2Q4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzPzk5NDciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_shared.js":
/*!*****************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_shared.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\") ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcz9mMzQxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js":
/*!******************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js ***!
  \******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzPzk1ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcz8xZWIwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_task.js":
/*!***************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_task.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js\");\nvar html = __webpack_require__(/*! ./_html */ \"./node_modules/_core-js@2.6.10@core-js/modules/_html.js\");\nvar cel = __webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (__webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\")(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdGFzay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190YXNrLmpzPzJkYmMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_task.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js":
/*!****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/YzNhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzP2E2YWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzPzYxMTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcz84OTQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js":
/*!********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcz9hOWNmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js":
/*!***********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcz8yYWIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_uid.js":
/*!**************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_uid.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdWlkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3VpZC5qcz80ZDJjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzPzFjZDciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_wks.js":
/*!**************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/_wks.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fd2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3drcy5qcz8xMjc3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js":
/*!**********************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js ***!
  \**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\").getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/NWZmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js":
/*!****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/OTZkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js":
/*!***************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzPzdjZmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js":
/*!***************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzP2U3ODMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js\")('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/ZWQ4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar task = __webpack_require__(/*! ./_task */ \"./node_modules/_core-js@2.6.10@core-js/modules/_task.js\").set;\nvar microtask = __webpack_require__(/*! ./_microtask */ \"./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js\")();\nvar newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\");\nvar perform = __webpack_require__(/*! ./_perform */ \"./node_modules/_core-js@2.6.10@core-js/modules/_perform.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\");\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js\")($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n__webpack_require__(/*! ./_set-species */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\")(PROMISE);\nWrapper = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\")[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js\")(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzP2E2MGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js":
/*!********************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\").f;\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\");\nvar $flags = __webpack_require__(/*! ./_flags */ \"./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\");\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && (!CORRECT_NEW || __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n  re2[__webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n  $RegExp = function RegExp(p, f) {\n    var tiRE = this instanceof $RegExp;\n    var piRE = isRegExp(p);\n    var fiU = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function (key) {\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function () { return Base[key]; },\n      set: function (it) { Base[key] = it; }\n    });\n  };\n  for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\")(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(/*! ./_set-species */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\")('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcz9kNDc5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js":
/*!*************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\n__webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\")({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjNmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\n\n// @@match logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[MATCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n    function (regexp) {\n      var res = maybeCallNative($match, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      if (!rx.global) return regExpExec(rx, S);\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = String(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcz9lYmVjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js":
/*!****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YzA0MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar callRegExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return $split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = regexpExec.call(separatorCopy, string)) {\n        lastIndex = separatorCopy[LAST_INDEX];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n    };\n  } else {\n    internalSplit = $split;\n  }\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = defined(this);\n      var splitter = separator == undefined ? undefined : separator[SPLIT];\n      return splitter !== undefined\n        ? splitter.call(separator, O, limit)\n        : internalSplit.call(String(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (regexp, limit) {\n      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          A.push(S.slice(p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            A.push(z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      A.push(S.slice(p));\n      return A;\n    }\n  ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcz9lNmQxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js ***!
  \*************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar ownKeys = __webpack_require__(/*! ./_own-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js\");\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/ZWZjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\");\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcz84YjFmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js\n");

/***/ }),

/***/ "./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var $iterators = __webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcz80NjM0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css ***!
  \*******************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports = module.exports = __webpack_require__(/*! ../../../_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"/**\\n * Swiper 4.5.1\\n * Most modern mobile touch slider and framework with hardware accelerated transitions\\n * http://www.idangero.us/swiper/\\n *\\n * Copyright 2014-2019 Vladimir Kharlampidi\\n *\\n * Released under the MIT License\\n *\\n * Released on: September 13, 2019\\n */\\n.swiper-container {\\n  margin-left: auto;\\n  margin-right: auto;\\n  position: relative;\\n  overflow: hidden;\\n  list-style: none;\\n  padding: 0;\\n  /* Fix of Webkit flickering */\\n  z-index: 1;\\n}\\n.swiper-container-no-flexbox .swiper-slide {\\n  float: left;\\n}\\n.swiper-container-vertical > .swiper-wrapper {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n  -webkit-flex-direction: column;\\n  -ms-flex-direction: column;\\n  flex-direction: column;\\n}\\n.swiper-wrapper {\\n  position: relative;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 1;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-transition-property: -webkit-transform;\\n  transition-property: -webkit-transform;\\n  -o-transition-property: transform;\\n  transition-property: transform;\\n  transition-property: transform, -webkit-transform;\\n  -webkit-box-sizing: content-box;\\n  box-sizing: content-box;\\n}\\n.swiper-container-android .swiper-slide,\\n.swiper-wrapper {\\n  -webkit-transform: translate3d(0px, 0, 0);\\n  transform: translate3d(0px, 0, 0);\\n}\\n.swiper-container-multirow > .swiper-wrapper {\\n  -webkit-flex-wrap: wrap;\\n  -ms-flex-wrap: wrap;\\n  flex-wrap: wrap;\\n}\\n.swiper-container-free-mode > .swiper-wrapper {\\n  -webkit-transition-timing-function: ease-out;\\n  -o-transition-timing-function: ease-out;\\n  transition-timing-function: ease-out;\\n  margin: 0 auto;\\n}\\n.swiper-slide {\\n  -webkit-flex-shrink: 0;\\n  -ms-flex-negative: 0;\\n  flex-shrink: 0;\\n  width: 100%;\\n  height: 100%;\\n  position: relative;\\n  -webkit-transition-property: -webkit-transform;\\n  transition-property: -webkit-transform;\\n  -o-transition-property: transform;\\n  transition-property: transform;\\n  transition-property: transform, -webkit-transform;\\n}\\n.swiper-slide-invisible-blank {\\n  visibility: hidden;\\n}\\n/* Auto Height */\\n.swiper-container-autoheight,\\n.swiper-container-autoheight .swiper-slide {\\n  height: auto;\\n}\\n.swiper-container-autoheight .swiper-wrapper {\\n  -webkit-box-align: start;\\n  -webkit-align-items: flex-start;\\n  -ms-flex-align: start;\\n  align-items: flex-start;\\n  -webkit-transition-property: height, -webkit-transform;\\n  transition-property: height, -webkit-transform;\\n  -o-transition-property: transform, height;\\n  transition-property: transform, height;\\n  transition-property: transform, height, -webkit-transform;\\n}\\n/* 3D Effects */\\n.swiper-container-3d {\\n  -webkit-perspective: 1200px;\\n  perspective: 1200px;\\n}\\n.swiper-container-3d .swiper-wrapper,\\n.swiper-container-3d .swiper-slide,\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom,\\n.swiper-container-3d .swiper-cube-shadow {\\n  -webkit-transform-style: preserve-3d;\\n  transform-style: preserve-3d;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  width: 100%;\\n  height: 100%;\\n  pointer-events: none;\\n  z-index: 10;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left {\\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-right {\\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-top {\\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n/* IE10 Windows Phone 8 Fixes */\\n.swiper-container-wp8-horizontal,\\n.swiper-container-wp8-horizontal > .swiper-wrapper {\\n  -ms-touch-action: pan-y;\\n  touch-action: pan-y;\\n}\\n.swiper-container-wp8-vertical,\\n.swiper-container-wp8-vertical > .swiper-wrapper {\\n  -ms-touch-action: pan-x;\\n  touch-action: pan-x;\\n}\\n.swiper-button-prev,\\n.swiper-button-next {\\n  position: absolute;\\n  top: 50%;\\n  width: 27px;\\n  height: 44px;\\n  margin-top: -22px;\\n  z-index: 10;\\n  cursor: pointer;\\n  background-size: 27px 44px;\\n  background-position: center;\\n  background-repeat: no-repeat;\\n}\\n.swiper-button-prev.swiper-button-disabled,\\n.swiper-button-next.swiper-button-disabled {\\n  opacity: 0.35;\\n  cursor: auto;\\n  pointer-events: none;\\n}\\n.swiper-button-prev,\\n.swiper-container-rtl .swiper-button-next {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\\\");\\n  left: 10px;\\n  right: auto;\\n}\\n.swiper-button-next,\\n.swiper-container-rtl .swiper-button-prev {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\\\");\\n  right: 10px;\\n  left: auto;\\n}\\n.swiper-button-prev.swiper-button-white,\\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-next.swiper-button-white,\\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-prev.swiper-button-black,\\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-next.swiper-button-black,\\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-lock {\\n  display: none;\\n}\\n.swiper-pagination {\\n  position: absolute;\\n  text-align: center;\\n  -webkit-transition: 300ms opacity;\\n  -o-transition: 300ms opacity;\\n  transition: 300ms opacity;\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n  z-index: 10;\\n}\\n.swiper-pagination.swiper-pagination-hidden {\\n  opacity: 0;\\n}\\n/* Common Styles */\\n.swiper-pagination-fraction,\\n.swiper-pagination-custom,\\n.swiper-container-horizontal > .swiper-pagination-bullets {\\n  bottom: 10px;\\n  left: 0;\\n  width: 100%;\\n}\\n/* Bullets */\\n.swiper-pagination-bullets-dynamic {\\n  overflow: hidden;\\n  font-size: 0;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n  -webkit-transform: scale(0.33);\\n  -ms-transform: scale(0.33);\\n  transform: scale(0.33);\\n  position: relative;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\\n  -webkit-transform: scale(1);\\n  -ms-transform: scale(1);\\n  transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\\n  -webkit-transform: scale(1);\\n  -ms-transform: scale(1);\\n  transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\\n  -webkit-transform: scale(0.66);\\n  -ms-transform: scale(0.66);\\n  transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\\n  -webkit-transform: scale(0.33);\\n  -ms-transform: scale(0.33);\\n  transform: scale(0.33);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\\n  -webkit-transform: scale(0.66);\\n  -ms-transform: scale(0.66);\\n  transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\\n  -webkit-transform: scale(0.33);\\n  -ms-transform: scale(0.33);\\n  transform: scale(0.33);\\n}\\n.swiper-pagination-bullet {\\n  width: 8px;\\n  height: 8px;\\n  display: inline-block;\\n  border-radius: 100%;\\n  background: #000;\\n  opacity: 0.2;\\n}\\nbutton.swiper-pagination-bullet {\\n  border: none;\\n  margin: 0;\\n  padding: 0;\\n  -webkit-box-shadow: none;\\n  box-shadow: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  appearance: none;\\n}\\n.swiper-pagination-clickable .swiper-pagination-bullet {\\n  cursor: pointer;\\n}\\n.swiper-pagination-bullet-active {\\n  opacity: 1;\\n  background: #007aff;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets {\\n  right: 10px;\\n  top: 50%;\\n  -webkit-transform: translate3d(0px, -50%, 0);\\n  transform: translate3d(0px, -50%, 0);\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {\\n  margin: 6px 0;\\n  display: block;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n  top: 50%;\\n  -webkit-transform: translateY(-50%);\\n  -ms-transform: translateY(-50%);\\n  transform: translateY(-50%);\\n  width: 8px;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n  display: inline-block;\\n  -webkit-transition: 200ms top, 200ms -webkit-transform;\\n  transition: 200ms top, 200ms -webkit-transform;\\n  -o-transition: 200ms transform, 200ms top;\\n  transition: 200ms transform, 200ms top;\\n  transition: 200ms transform, 200ms top, 200ms -webkit-transform;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {\\n  margin: 0 4px;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n  left: 50%;\\n  -webkit-transform: translateX(-50%);\\n  -ms-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n  white-space: nowrap;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n  -webkit-transition: 200ms left, 200ms -webkit-transform;\\n  transition: 200ms left, 200ms -webkit-transform;\\n  -o-transition: 200ms transform, 200ms left;\\n  transition: 200ms transform, 200ms left;\\n  transition: 200ms transform, 200ms left, 200ms -webkit-transform;\\n}\\n.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n  -webkit-transition: 200ms right, 200ms -webkit-transform;\\n  transition: 200ms right, 200ms -webkit-transform;\\n  -o-transition: 200ms transform, 200ms right;\\n  transition: 200ms transform, 200ms right;\\n  transition: 200ms transform, 200ms right, 200ms -webkit-transform;\\n}\\n/* Progress */\\n.swiper-pagination-progressbar {\\n  background: rgba(0, 0, 0, 0.25);\\n  position: absolute;\\n}\\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n  background: #007aff;\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  width: 100%;\\n  height: 100%;\\n  -webkit-transform: scale(0);\\n  -ms-transform: scale(0);\\n  transform: scale(0);\\n  -webkit-transform-origin: left top;\\n  -ms-transform-origin: left top;\\n  transform-origin: left top;\\n}\\n.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n  -webkit-transform-origin: right top;\\n  -ms-transform-origin: right top;\\n  transform-origin: right top;\\n}\\n.swiper-container-horizontal > .swiper-pagination-progressbar,\\n.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n  width: 100%;\\n  height: 4px;\\n  left: 0;\\n  top: 0;\\n}\\n.swiper-container-vertical > .swiper-pagination-progressbar,\\n.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n  width: 4px;\\n  height: 100%;\\n  left: 0;\\n  top: 0;\\n}\\n.swiper-pagination-white .swiper-pagination-bullet-active {\\n  background: #ffffff;\\n}\\n.swiper-pagination-progressbar.swiper-pagination-white {\\n  background: rgba(255, 255, 255, 0.25);\\n}\\n.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {\\n  background: #ffffff;\\n}\\n.swiper-pagination-black .swiper-pagination-bullet-active {\\n  background: #000000;\\n}\\n.swiper-pagination-progressbar.swiper-pagination-black {\\n  background: rgba(0, 0, 0, 0.25);\\n}\\n.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {\\n  background: #000000;\\n}\\n.swiper-pagination-lock {\\n  display: none;\\n}\\n/* Scrollbar */\\n.swiper-scrollbar {\\n  border-radius: 10px;\\n  position: relative;\\n  -ms-touch-action: none;\\n  background: rgba(0, 0, 0, 0.1);\\n}\\n.swiper-container-horizontal > .swiper-scrollbar {\\n  position: absolute;\\n  left: 1%;\\n  bottom: 3px;\\n  z-index: 50;\\n  height: 5px;\\n  width: 98%;\\n}\\n.swiper-container-vertical > .swiper-scrollbar {\\n  position: absolute;\\n  right: 3px;\\n  top: 1%;\\n  z-index: 50;\\n  width: 5px;\\n  height: 98%;\\n}\\n.swiper-scrollbar-drag {\\n  height: 100%;\\n  width: 100%;\\n  position: relative;\\n  background: rgba(0, 0, 0, 0.5);\\n  border-radius: 10px;\\n  left: 0;\\n  top: 0;\\n}\\n.swiper-scrollbar-cursor-drag {\\n  cursor: move;\\n}\\n.swiper-scrollbar-lock {\\n  display: none;\\n}\\n.swiper-zoom-container {\\n  width: 100%;\\n  height: 100%;\\n  display: -webkit-box;\\n  display: -webkit-flex;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-pack: center;\\n  -webkit-justify-content: center;\\n  -ms-flex-pack: center;\\n  justify-content: center;\\n  -webkit-box-align: center;\\n  -webkit-align-items: center;\\n  -ms-flex-align: center;\\n  align-items: center;\\n  text-align: center;\\n}\\n.swiper-zoom-container > img,\\n.swiper-zoom-container > svg,\\n.swiper-zoom-container > canvas {\\n  max-width: 100%;\\n  max-height: 100%;\\n  -o-object-fit: contain;\\n  object-fit: contain;\\n}\\n.swiper-slide-zoomed {\\n  cursor: move;\\n}\\n/* Preloader */\\n.swiper-lazy-preloader {\\n  width: 42px;\\n  height: 42px;\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  margin-left: -21px;\\n  margin-top: -21px;\\n  z-index: 10;\\n  -webkit-transform-origin: 50%;\\n  -ms-transform-origin: 50%;\\n  transform-origin: 50%;\\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\\n  animation: swiper-preloader-spin 1s steps(12, end) infinite;\\n}\\n.swiper-lazy-preloader:after {\\n  display: block;\\n  content: '';\\n  width: 100%;\\n  height: 100%;\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\\\");\\n  background-position: 50%;\\n  background-size: 100%;\\n  background-repeat: no-repeat;\\n}\\n.swiper-lazy-preloader-white:after {\\n  background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\\\");\\n}\\n@-webkit-keyframes swiper-preloader-spin {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n@keyframes swiper-preloader-spin {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n/* a11y */\\n.swiper-container .swiper-notification {\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  pointer-events: none;\\n  opacity: 0;\\n  z-index: -1000;\\n}\\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\\n  -webkit-transition-timing-function: ease-out;\\n  -o-transition-timing-function: ease-out;\\n  transition-timing-function: ease-out;\\n}\\n.swiper-container-fade .swiper-slide {\\n  pointer-events: none;\\n  -webkit-transition-property: opacity;\\n  -o-transition-property: opacity;\\n  transition-property: opacity;\\n}\\n.swiper-container-fade .swiper-slide .swiper-slide {\\n  pointer-events: none;\\n}\\n.swiper-container-fade .swiper-slide-active,\\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\\n  pointer-events: auto;\\n}\\n.swiper-container-cube {\\n  overflow: visible;\\n}\\n.swiper-container-cube .swiper-slide {\\n  pointer-events: none;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  z-index: 1;\\n  visibility: hidden;\\n  -webkit-transform-origin: 0 0;\\n  -ms-transform-origin: 0 0;\\n  transform-origin: 0 0;\\n  width: 100%;\\n  height: 100%;\\n}\\n.swiper-container-cube .swiper-slide .swiper-slide {\\n  pointer-events: none;\\n}\\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\\n  -webkit-transform-origin: 100% 0;\\n  -ms-transform-origin: 100% 0;\\n  transform-origin: 100% 0;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-active .swiper-slide-active {\\n  pointer-events: auto;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-next,\\n.swiper-container-cube .swiper-slide-prev,\\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\\n  pointer-events: auto;\\n  visibility: visible;\\n}\\n.swiper-container-cube .swiper-slide-shadow-top,\\n.swiper-container-cube .swiper-slide-shadow-bottom,\\n.swiper-container-cube .swiper-slide-shadow-left,\\n.swiper-container-cube .swiper-slide-shadow-right {\\n  z-index: 0;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n.swiper-container-cube .swiper-cube-shadow {\\n  position: absolute;\\n  left: 0;\\n  bottom: 0px;\\n  width: 100%;\\n  height: 100%;\\n  background: #000;\\n  opacity: 0.6;\\n  -webkit-filter: blur(50px);\\n  filter: blur(50px);\\n  z-index: 0;\\n}\\n.swiper-container-flip {\\n  overflow: visible;\\n}\\n.swiper-container-flip .swiper-slide {\\n  pointer-events: none;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  z-index: 1;\\n}\\n.swiper-container-flip .swiper-slide .swiper-slide {\\n  pointer-events: none;\\n}\\n.swiper-container-flip .swiper-slide-active,\\n.swiper-container-flip .swiper-slide-active .swiper-slide-active {\\n  pointer-events: auto;\\n}\\n.swiper-container-flip .swiper-slide-shadow-top,\\n.swiper-container-flip .swiper-slide-shadow-bottom,\\n.swiper-container-flip .swiper-slide-shadow-left,\\n.swiper-container-flip .swiper-slide-shadow-right {\\n  z-index: 0;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n.swiper-container-coverflow .swiper-wrapper {\\n  /* Windows 8 IE 10 fix */\\n  -ms-perspective: 1200px;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9jc3Mvc3dpcGVyLmNzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fc3dpcGVyQDQuNS4xQHN3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzPzQ3ZTciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qKlxcbiAqIFN3aXBlciA0LjUuMVxcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXFxuICogaHR0cDovL3d3dy5pZGFuZ2Vyby51cy9zd2lwZXIvXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE5IFZsYWRpbWlyIEtoYXJsYW1waWRpXFxuICpcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcXG4gKlxcbiAqIFJlbGVhc2VkIG9uOiBTZXB0ZW1iZXIgMTMsIDIwMTlcXG4gKi9cXG4uc3dpcGVyLWNvbnRhaW5lciB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG4gIC8qIEZpeCBvZiBXZWJraXQgZmxpY2tlcmluZyAqL1xcbiAgei1pbmRleDogMTtcXG59XFxuLnN3aXBlci1jb250YWluZXItbm8tZmxleGJveCAuc3dpcGVyLXNsaWRlIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItd3JhcHBlciB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxuICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5zd2lwZXItd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IDE7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgLXdlYmtpdC10cmFuc2Zvcm07XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWFuZHJvaWQgLnN3aXBlci1zbGlkZSxcXG4uc3dpcGVyLXdyYXBwZXIge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMCwgMCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMCwgMCk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLW11bHRpcm93ID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZnJlZS1tb2RlID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgLW8tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5zd2lwZXItc2xpZGUge1xcbiAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgLXdlYmtpdC10cmFuc2Zvcm07XFxufVxcbi5zd2lwZXItc2xpZGUtaW52aXNpYmxlLWJsYW5rIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLyogQXV0byBIZWlnaHQgKi9cXG4uc3dpcGVyLWNvbnRhaW5lci1hdXRvaGVpZ2h0LFxcbi5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci1zbGlkZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IGhlaWdodCwgLXdlYmtpdC10cmFuc2Zvcm07XFxuICAtby10cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGhlaWdodDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgaGVpZ2h0O1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBoZWlnaHQsIC13ZWJraXQtdHJhbnNmb3JtO1xcbn1cXG4vKiAzRCBFZmZlY3RzICovXFxuLnN3aXBlci1jb250YWluZXItM2Qge1xcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTIwMHB4O1xcbiAgcGVyc3BlY3RpdmU6IDEyMDBweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci13cmFwcGVyLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItY3ViZS1zaGFkb3cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgei1pbmRleDogMTA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIHJpZ2h0IHRvcCwgbGVmdCB0b3AsIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQocmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3Age1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShyZ2JhKDAsIDAsIDAsIDAuNSkpLCB0byhyZ2JhKDAsIDAsIDAsIDApKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChib3R0b20sIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxufVxcbi8qIElFMTAgV2luZG93cyBQaG9uZSA4IEZpeGVzICovXFxuLnN3aXBlci1jb250YWluZXItd3A4LWhvcml6b250YWwsXFxuLnN3aXBlci1jb250YWluZXItd3A4LWhvcml6b250YWwgPiAuc3dpcGVyLXdyYXBwZXIge1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogcGFuLXk7XFxuICB0b3VjaC1hY3Rpb246IHBhbi15O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci13cDgtdmVydGljYWwsXFxuLnN3aXBlci1jb250YWluZXItd3A4LXZlcnRpY2FsID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi14O1xcbiAgdG91Y2gtYWN0aW9uOiBwYW4teDtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldixcXG4uc3dpcGVyLWJ1dHRvbi1uZXh0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgd2lkdGg6IDI3cHg7XFxuICBoZWlnaHQ6IDQ0cHg7XFxuICBtYXJnaW4tdG9wOiAtMjJweDtcXG4gIHotaW5kZXg6IDEwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyN3B4IDQ0cHg7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24tZGlzYWJsZWQsXFxuLnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMzU7XFxuICBjdXJzb3I6IGF1dG87XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldixcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tbmV4dCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMCUyQzIyTDIyJTJDMGwyLjElMkMyLjFMNC4yJTJDMjJsMTkuOSUyQzE5LjlMMjIlMkM0NEwwJTJDMjJMMCUyQzIyTDAlMkMyMnonJTIwZmlsbCUzRCclMjMwMDdhZmYnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBsZWZ0OiAxMHB4O1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5zd2lwZXItYnV0dG9uLW5leHQsXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmclMjB4bWxucyUzRCdodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmcnJTIwdmlld0JveCUzRCcwJTIwMCUyMDI3JTIwNDQnJTNFJTNDcGF0aCUyMGQlM0QnTTI3JTJDMjJMMjclMkMyMkw1JTJDNDRsLTIuMS0yLjFMMjIuOCUyQzIyTDIuOSUyQzIuMUw1JTJDMEwyNyUyQzIyTDI3JTJDMjJ6JyUyMGZpbGwlM0QnJTIzMDA3YWZmJyUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgcmlnaHQ6IDEwcHg7XFxuICBsZWZ0OiBhdXRvO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24td2hpdGUsXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMCUyQzIyTDIyJTJDMGwyLjElMkMyLjFMNC4yJTJDMjJsMTkuOSUyQzE5LjlMMjIlMkM0NEwwJTJDMjJMMCUyQzIyTDAlMkMyMnonJTIwZmlsbCUzRCclMjNmZmZmZmYnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxufVxcbi5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi13aGl0ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHZpZXdCb3glM0QnMCUyMDAlMjAyNyUyMDQ0JyUzRSUzQ3BhdGglMjBkJTNEJ00yNyUyQzIyTDI3JTJDMjJMNSUyQzQ0bC0yLjEtMi4xTDIyLjglMkMyMkwyLjklMkMyLjFMNSUyQzBMMjclMkMyMkwyNyUyQzIyeiclMjBmaWxsJTNEJyUyM2ZmZmZmZiclMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLWJsYWNrLFxcbi5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24tYmxhY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmclMjB4bWxucyUzRCdodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmcnJTIwdmlld0JveCUzRCcwJTIwMCUyMDI3JTIwNDQnJTNFJTNDcGF0aCUyMGQlM0QnTTAlMkMyMkwyMiUyQzBsMi4xJTJDMi4xTDQuMiUyQzIybDE5LjklMkMxOS45TDIyJTJDNDRMMCUyQzIyTDAlMkMyMkwwJTJDMjJ6JyUyMGZpbGwlM0QnJTIzMDAwMDAwJyUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24tYmxhY2ssXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMjclMkMyMkwyNyUyQzIyTDUlMkM0NGwtMi4xLTIuMUwyMi44JTJDMjJMMi45JTJDMi4xTDUlMkMwTDI3JTJDMjJMMjclMkMyMnonJTIwZmlsbCUzRCclMjMwMDAwMDAnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxufVxcbi5zd2lwZXItYnV0dG9uLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogMzAwbXMgb3BhY2l0eTtcXG4gIC1vLXRyYW5zaXRpb246IDMwMG1zIG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uOiAzMDBtcyBvcGFjaXR5O1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24uc3dpcGVyLXBhZ2luYXRpb24taGlkZGVuIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi8qIENvbW1vbiBTdHlsZXMgKi9cXG4uc3dpcGVyLXBhZ2luYXRpb24tZnJhY3Rpb24sXFxuLnN3aXBlci1wYWdpbmF0aW9uLWN1c3RvbSxcXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMge1xcbiAgYm90dG9tOiAxMHB4O1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4vKiBCdWxsZXRzICovXFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1tYWluIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2IHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjY2KTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjY2KTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2LXByZXYge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC42Nik7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQtbmV4dCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgwLjMzKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogOHB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBvcGFjaXR5OiAwLjI7XFxufVxcbmJ1dHRvbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZDogIzAwN2FmZjtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cyB7XFxuICByaWdodDogMTBweDtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgLTUwJSwgMCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgLTUwJSwgMCk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBtYXJnaW46IDZweCAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIHtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDIwMG1zIHRvcCwgMjAwbXMgLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0b3AsIDIwMG1zIC13ZWJraXQtdHJhbnNmb3JtO1xcbiAgLW8tdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyB0b3A7XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0cmFuc2Zvcm0sIDIwMG1zIHRvcDtcXG4gIHRyYW5zaXRpb246IDIwMG1zIHRyYW5zZm9ybSwgMjAwbXMgdG9wLCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgbWFyZ2luOiAwIDRweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyB7XFxuICBsZWZ0OiA1MCU7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAyMDBtcyBsZWZ0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IDIwMG1zIGxlZnQsIDIwMG1zIC13ZWJraXQtdHJhbnNmb3JtO1xcbiAgLW8tdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbC5zd2lwZXItY29udGFpbmVyLXJ0bCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDIwMG1zIHJpZ2h0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IDIwMG1zIHJpZ2h0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb246IDIwMG1zIHRyYW5zZm9ybSwgMjAwbXMgcmlnaHQ7XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0cmFuc2Zvcm0sIDIwMG1zIHJpZ2h0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyByaWdodCwgMjAwbXMgLXdlYmtpdC10cmFuc2Zvcm07XFxufVxcbi8qIFByb2dyZXNzICovXFxuLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA3YWZmO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcXG4gIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxsIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhcixcXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogNHB4O1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIsXFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZSB7XFxuICB3aWR0aDogNHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLXdoaXRlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24td2hpdGUgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJsYWNrIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDAwMDA7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24tYmxhY2sgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwge1xcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLyogU2Nyb2xsYmFyICovXFxuLnN3aXBlci1zY3JvbGxiYXIge1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwgPiAuc3dpcGVyLXNjcm9sbGJhciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAxJTtcXG4gIGJvdHRvbTogM3B4O1xcbiAgei1pbmRleDogNTA7XFxuICBoZWlnaHQ6IDVweDtcXG4gIHdpZHRoOiA5OCU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1zY3JvbGxiYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDNweDtcXG4gIHRvcDogMSU7XFxuICB6LWluZGV4OiA1MDtcXG4gIHdpZHRoOiA1cHg7XFxuICBoZWlnaHQ6IDk4JTtcXG59XFxuLnN3aXBlci1zY3JvbGxiYXItZHJhZyB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbn1cXG4uc3dpcGVyLXNjcm9sbGJhci1jdXJzb3ItZHJhZyB7XFxuICBjdXJzb3I6IG1vdmU7XFxufVxcbi5zd2lwZXItc2Nyb2xsYmFyLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnN3aXBlci16b29tLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uc3dpcGVyLXpvb20tY29udGFpbmVyID4gaW1nLFxcbi5zd2lwZXItem9vbS1jb250YWluZXIgPiBzdmcsXFxuLnN3aXBlci16b29tLWNvbnRhaW5lciA+IGNhbnZhcyB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcXG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XFxufVxcbi5zd2lwZXItc2xpZGUtem9vbWVkIHtcXG4gIGN1cnNvcjogbW92ZTtcXG59XFxuLyogUHJlbG9hZGVyICovXFxuLnN3aXBlci1sYXp5LXByZWxvYWRlciB7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogNTAlO1xcbiAgbWFyZ2luLWxlZnQ6IC0yMXB4O1xcbiAgbWFyZ2luLXRvcDogLTIxcHg7XFxuICB6LWluZGV4OiAxMDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzd2lwZXItcHJlbG9hZGVyLXNwaW4gMXMgc3RlcHMoMTIsIGVuZCkgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHN3aXBlci1wcmVsb2FkZXItc3BpbiAxcyBzdGVwcygxMiwgZW5kKSBpbmZpbml0ZTtcXG59XFxuLnN3aXBlci1sYXp5LXByZWxvYWRlcjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHZpZXdCb3glM0QnMCUyMDAlMjAxMjAlMjAxMjAnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHhtbG5zJTNBeGxpbmslM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmsnJTNFJTNDZGVmcyUzRSUzQ2xpbmUlMjBpZCUzRCdsJyUyMHgxJTNEJzYwJyUyMHgyJTNEJzYwJyUyMHkxJTNEJzcnJTIweTIlM0QnMjcnJTIwc3Ryb2tlJTNEJyUyMzZjNmM2YyclMjBzdHJva2Utd2lkdGglM0QnMTEnJTIwc3Ryb2tlLWxpbmVjYXAlM0Qncm91bmQnJTJGJTNFJTNDJTJGZGVmcyUzRSUzQ2clM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMjcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSg2MCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoOTAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDEyMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMTUwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMzcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgxODAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy40NiclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDIxMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjU2JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMjQwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuNjYnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgyNzAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy43NSclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjg1JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMzMwJTIwNjAlMkM2MCknJTJGJTNFJTNDJTJGZyUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuLnN3aXBlci1sYXp5LXByZWxvYWRlci13aGl0ZTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHZpZXdCb3glM0QnMCUyMDAlMjAxMjAlMjAxMjAnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHhtbG5zJTNBeGxpbmslM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmsnJTNFJTNDZGVmcyUzRSUzQ2xpbmUlMjBpZCUzRCdsJyUyMHgxJTNEJzYwJyUyMHgyJTNEJzYwJyUyMHkxJTNEJzcnJTIweTIlM0QnMjcnJTIwc3Ryb2tlJTNEJyUyM2ZmZiclMjBzdHJva2Utd2lkdGglM0QnMTEnJTIwc3Ryb2tlLWxpbmVjYXAlM0Qncm91bmQnJTJGJTNFJTNDJTJGZGVmcyUzRSUzQ2clM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMjcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSg2MCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoOTAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDEyMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMTUwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMzcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgxODAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy40NiclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDIxMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjU2JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMjQwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuNjYnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgyNzAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy43NSclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjg1JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMzMwJTIwNjAlMkM2MCknJTJGJTNFJTNDJTJGZyUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3dpcGVyLXByZWxvYWRlci1zcGluIHtcXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgc3dpcGVyLXByZWxvYWRlci1zcGluIHtcXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbi8qIGExMXkgKi9cXG4uc3dpcGVyLWNvbnRhaW5lciAuc3dpcGVyLW5vdGlmaWNhdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBvcGFjaXR5OiAwO1xcbiAgei1pbmRleDogLTEwMDA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUuc3dpcGVyLWNvbnRhaW5lci1mcmVlLW1vZGUgLnN3aXBlci1zbGlkZSB7XFxuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG4gIC1vLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmFkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5O1xcbiAgLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmUge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgei1pbmRleDogMTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZS5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXNsaWRlIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0LFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1wcmV2LFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0ICsgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogYXV0bztcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0IHtcXG4gIHotaW5kZXg6IDA7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLWN1YmUtc2hhZG93IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIC13ZWJraXQtZmlsdGVyOiBibHVyKDUwcHgpO1xcbiAgZmlsdGVyOiBibHVyKDUwcHgpO1xcbiAgei1pbmRleDogMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB6LWluZGV4OiAxO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsXFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCB7XFxuICB6LWluZGV4OiAwO1xcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWNvdmVyZmxvdyAuc3dpcGVyLXdyYXBwZXIge1xcbiAgLyogV2luZG93cyA4IElFIDEwIGZpeCAqL1xcbiAgLW1zLXBlcnNwZWN0aXZlOiAxMjAwcHg7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=style&index=0&lang=scss& ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports = module.exports = __webpack_require__(/*! ../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis {\\n  background-repeat: no-repeat;\\n  background-size: 100% 100%;\\n}\\n.fl {\\n  display: flex;\\n}\\n.fj {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n.fla {\\n  display: flex;\\n  align-items: center;\\n}\\n.fcc {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.bb {\\n  box-sizing: border-box;\\n}\\n.fullp {\\n  width: 100%;\\n  height: 100%;\\n}\\n.pointer {\\n  cursor: pointer;\\n}\\n.text-l {\\n  text-align: left;\\n}\\n.text-r {\\n  text-align: right;\\n}\\n.text-c {\\n  text-align: center;\\n}\\n.bc {\\n  text-align: center;\\n}\\n.flex1 {\\n  flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n  font-family: 'iconfont';\\n  src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont {\\n  font-family: 'iconfont' !important;\\n  font-size: 16px;\\n  font-style: normal;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh:before {\\n  content: '\\\\E874';\\n}\\n.iconempty:before {\\n  content: '\\\\E6A6';\\n}\\n.iconclose:before {\\n  content: '\\\\E849';\\n}\\nhtml {\\n  font-family: \\\"Microsoft YaHei\\\", \\\"Arial\\\";\\n  font-size: 12px;\\n  word-spacing: 1px;\\n  word-break: break-word;\\n  text-rendering: optimizeLegibility;\\n  color: #333;\\n  background-color: #ffffff;\\n  box-sizing: border-box;\\n}\\nhtml,\\nbody {\\n  -webkit-text-size-adjust: none;\\n}\\nbody,\\ndiv {\\n  border: 0;\\n  margin: 0;\\n  padding: 0;\\n}\\n*,\\n*:before,\\n*:after {\\n  box-sizing: border-box;\\n  margin: 0;\\n}\\nbody,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\nhr,\\np,\\nblockquote,\\ndl,\\ndt,\\ndd,\\nul,\\nol,\\nli,\\npre,\\nform,\\nfieldset,\\nlegend,\\nbutton,\\ninput,\\ntextarea,\\nth,\\ntd,\\niframe {\\n  margin: 0;\\n  padding: 0;\\n}\\nimg,\\narticle,\\naside,\\ndetails,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nmenu,\\nnav,\\nsection,\\nsummary,\\ntime,\\nmark,\\naudio,\\nvideo {\\n  display: block;\\n  margin: 0;\\n  padding: 0;\\n}\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n  font-size: 100%;\\n}\\nfieldset,\\nimg {\\n  border: 0;\\n}\\naddress,\\ncaption,\\ncite,\\ndfn,\\nem,\\nth,\\nvar,\\ni,\\nem {\\n  font-style: normal;\\n  font-weight: normal;\\n}\\nol,\\nul {\\n  list-style: none;\\n}\\na {\\n  text-decoration: none;\\n  color: inherit;\\n}\\na:hover {\\n    text-decoration: none;\\n}\\na,\\nlabel,\\nbutton,\\ninput,\\nselect {\\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\ninput,\\nselect,\\nbutton {\\n  vertical-align: baseline;\\n  border-radius: 0;\\n  background-color: transparent;\\n}\\nselect {\\n  outline: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n}\\nselect::-ms-expand {\\n  display: none;\\n}\\ninput {\\n  background: none;\\n  outline: none;\\n  border: none;\\n}\\nbutton::-moz-focus-inner,\\ninput,\\ninput[type=\\\"reset\\\"]::-moz-focus-inner,\\ninput[type=\\\"button\\\"]::-moz-focus-inner,\\ninput[type=\\\"submit\\\"]::-moz-focus-inner,\\ninput[type=\\\"file\\\"] > input[type=\\\"button\\\"]::-moz-focus-inner {\\n  border: none;\\n}\\ninput[type=\\\"checkbox\\\"],\\ninput[type=\\\"radio\\\"] {\\n  vertical-align: middle;\\n}\\ninput[type=\\\"number\\\"]::-webkit-outer-spin-button,\\ninput[type=\\\"number\\\"]::-webkit-inner-spin-button {\\n  -webkit-appearance: none !important;\\n  -moz-appearance: none !important;\\n  margin: 0;\\n}\\ninput:-webkit-autofill {\\n  -webkit-box-shadow: 0 0 0 1000px white inset;\\n}\\ninput[type=\\\"search\\\"],\\ninput[type=\\\"tel\\\"],\\ninput[type=\\\"text\\\"],\\ninput {\\n  -webkit-appearance: none;\\n  /*去除系统默认的样式*/\\n  -webkit-box-sizing: content-box;\\n  font-size: 100%;\\n  box-sizing: border-box;\\n}\\ninput::-webkit-search-decoration,\\ninput::-webkit-search-cancel-button {\\n  display: none;\\n}\\n::-webkit-input-placeholder {\\n  /* WebKit, Blink, Edge */\\n  color: #bfbfbf;\\n  opacity: 1;\\n}\\n:-moz-placeholder {\\n  /* Mozilla Firefox 4 to 18 */\\n  color: #bfbfbf;\\n  opacity: 1;\\n}\\n::-moz-placeholder {\\n  /* Mozilla Firefox 19+ */\\n  color: #bfbfbf;\\n  opacity: 1;\\n}\\n:-ms-input-placeholder {\\n  /* Internet Explorer 10-11 */\\n  color: #bfbfbf;\\n  opacity: 1;\\n}\\nselect,\\ninput,\\noption {\\n  color: #333333;\\n}\\ntextarea {\\n  outline: none;\\n  border-radius: 0;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  overflow: auto;\\n  resize: none;\\n  color: #333333;\\n}\\n.cOrange {\\n  color: #f05a23;\\n}\\n.cGreen {\\n  color: #006441;\\n}\\n.cGray {\\n  color: #bfbfbf;\\n}\\n.cDark {\\n  color: #dcdcdc;\\n}\\n#app {\\n  border: 0;\\n  margin: 0;\\n  padding: 0;\\n}\\n.main-container {\\n  position: relative;\\n  margin: 0 auto;\\n  width: 100%;\\n}\\n.main-container::after {\\n    display: table;\\n    content: \\\"\\\";\\n    clear: both;\\n}\\n.content {\\n  max-width: 1024px;\\n  width: 100%;\\n  margin: 0 auto;\\n}\\n.box-w {\\n  max-width: 950px;\\n  width: 100%;\\n  margin: 0 auto;\\n}\\n.box {\\n  max-width: 950px;\\n  width: 100%;\\n  margin: 0 auto;\\n}\\n.focus {\\n  border: 1px solid #f05a23;\\n}\\n.app__width {\\n  width: 750px;\\n}\\n.app__width {\\n  width: 750px;\\n}\\n.app__inner {\\n  margin: 20px;\\n}\\n.app__title {\\n  font-size: 32px;\\n  line-height: 36px;\\n  font-weight: bold;\\n  padding-bottom: 10px;\\n  margin-bottom: 20px;\\n  border-bottom: 0.5px solid #eeeeee;\\n}\\n.app__desc {\\n  font-size: 24px;\\n  line-height: 26px;\\n  margin-bottom: 20px;\\n  color: #475669;\\n}\\n.app__bgc {\\n  position: fixed;\\n  background-color: #ffffff;\\n  width: 100%;\\n  height: 100%;\\n}\\n.app__bg {\\n  position: absolute;\\n  width: 100%;\\n  height: 100%;\\n}\\n.app__top-shadow {\\n  position: fixed;\\n  width: 750px;\\n  height: 1px;\\n  box-shadow: 0px 4px 0.9px 0.1px rgba(6, 0, 1, 0.07);\\n  background-color: #ffffff;\\n}\\n.app__content {\\n  position: relative;\\n}\\n.swiper-pagination-bullet {\\n  width: 1rem !important;\\n  height: 1rem !important;\\n}\\n.swiper-pagination-bullet-active {\\n  background: #f05a23 !important;\\n}\\n.ipt:focus {\\n  border-color: #f05a23 !important;\\n}\\n.ipt.err {\\n  border-color: #f05a23 !important;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9iZjcwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiDmlK/mjIHmlofku7ZcXG4gKiDpnIDopoHlvJXnlKjnmoTlnLDmlrnlnYfpnIDopoHliqDkuIrov5nkuKrmlK/mjIHmlofku7ZcXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyBNaW54aW5zXFxuICpcXG4gKiDlj4LogIPmlLbpm4bvvJpcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAtc2Fzcy90cmVlL21hc3Rlci9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGluc1xcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyDlj5jph49cXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLmJpcyB7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxufVxcbi5mbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmoge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLmZsYSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmZjYyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uYmIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZ1bGxwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucG9pbnRlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi50ZXh0LWwge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtciB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtYyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5iYyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGV4MSB7XFxuICBmbGV4OiAxO1xcbn1cXG5cXG4vKiDlm77niYflrZfkvZMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnO1xcbiAgc3JjOiB1cmwoXFxcImRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFBU0VBQXNBQUFBQUNTQUFBQVEzQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIRUlHVmdDRFNBcUZHSVFuQVRZQ0pBTVlDdzRBQkNBRmhHMEhWQnZaQnhHVm5OdklmaHpZRFYrQkFlOXd0SmlHT05UR1l1SEJaL09oNzdRM094dXBJdE9lRkZUY1FqcFJYd0srQUlibjA4bmU3NjZYcHBzaXdSS1Brc1FUajdBTzR4QU92M2ZPQWRzSmMwS05aTzNJbzg5TGY4SzlCa1krY2UrNGRmNERtcyt5WE1hY05OYkVBT09BQXRyYkYxbUJ4QWxxeS9EcTh1cXdyZ01CaVBHQUQ0ZzZkYmdHUWhTc2VRUkFLc3RLOGlGTW1GQVZCTUhTZHNGV0Zwa05IaFl6aGJrRVlKYjNlZklHUVVRSURDYUZ0WFEwbDFLRWhPZktWK0cwMTlBcnk3R2diemdIQUdFWFVJQVBBQlpJWjZHckdUU0krb0JpYTcvQTRnVkFpb1dCZXE1OHZ2SGxrSmVOcjhJTkJoSXl5MGR3d1Y4ZXNKZzRNQkFnZkdDVmxLVU5qL0hndVpJYXdHcnFqWmdMUEhnNXhBQ0sxWTJZQ3d5OENwZGNsbzQvWUlNSWNCTEFOWmg5WUdrSVBIdGEyTm9yVEt4VVNsVU5WN0tvejJ6c3dvMG1SZk5OUnM5ZmJGcThZSnI1dUVYTFdvN2NFZCs2cGJsOVczdjNyajRnN3R6UnBVKzdIYXVSMFlibUoyK2RhbExFTFp5NnVkZTB1R2grNzVacDVpWEZDeFpNVzJRKzBJUU9Lc2E3U01KSUtIMThoM3k5aFdZK21ONHRFdFcwYllUMm1lbVdwazFkYjdMODF0UTdkZ3MzaXNVYnQxcnJsMGtVMHl5MVN6YTdaQ3cwbTRsQ0l6Rk1GMnd3MTUrUXAxdTQzc1JrL2hKVDdZSk41dWFMbHVvbFBaU1R2cTFtNHZtYmdSN3ZlTTExNk9qQkdwMksyMW9NYmtSR252cWdsbkNMVmhhcnVBTTZnbCt0b1ROWVBaczVkb3laRFh5SGJ4L1JTdlpNdDZ0TnR4N1JsemtXbGN5c1dReVNWMkkrUGlvMDA4TnA4bVF2TC9qMENFVkxMSUl0bG9pRUlQSUZuQ0JETjdacEM2bjNpL2VyRTB1WElDVC90KzI2OXJWcmp4NGRlK3dyd3luZmpvMUJhTi90WFFtekozd0lGOWtyZ2hVSHFOMWVGQjRmTXZ1Q1JPcm52Vndka1VlV0xmZjJrNzBJaU84ZnMyeU9hYlhwSEhkbHZYK0E1cm1LNmR4NHBpWGxiSHVuaWIraU5lVk0rVW5YRnZXWmpSMnVsZVZGL2pzYksxMndvOE9XRHBZK1RSSDBqUDhzeUxzMFdJbE9BSURoRkhPUCtnSUExVEYza0NPQk9jYmFqOUZqZ1lDSjk3Q0VGdnd0MzVHZktaMllxNGo1SmlHVXNBQytKdXU3c2FTWmF2REsxV2dzL2plYWFnQi9RMFdVc3VZdXRUT2RJS0RsbVRMaEFUYTAzTXNrTjArRzB0MXZjanlFVENNTUFyWTRDTG1RaXVhRFNTSUVUU2dlbTdkQnUwL0c2bzJSRWdHZUppQVFTcnZBa0RzS1N1a3lpYVU5Qm8rWmQrQlRaZ3d4WGRaSFNyakZybzRab3FLbGdqK1ZTZTRVc2RhVlgzaURmZ2VSNDFLUDhVSXVOa0NCZmdIcHhCVWQ4aEFyR2o3NjBGZ1ZjWmtqcGFMYkVBSlRiV1lIV1RlbHRmYU52ejlYOUtKTkljZkJTcklNaEFwYXBNQWZLU094am5KNlY2dk0rMjlBZXd1RVhORlI0MzJCckxDRGswQitBaHFRcnFxdVVjZWxqRzd3b1IwMHFoUTdpNU94aUtSaUJ3U0lNbEpiUE1rQnFkb283UkR1TmZ5WmJseFQxV1o2VGJ6TGZiQlo1M1FZUWdsTGVJUlBCQkI5aFBUSEg5b0xNaFE1cjVpcERGd3dNUnd4UmV6cmZ6QUFBQT09XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO1xcbn1cXG4uaWNvbmZvbnQge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG59XFxuLmljb25yZWZyZXNoOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NzQnO1xcbn1cXG4uaWNvbmVtcHR5OmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU2QTYnO1xcbn1cXG4uaWNvbmNsb3NlOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NDknO1xcbn1cXG5odG1sIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiTWljcm9zb2Z0IFlhSGVpXFxcIiwgXFxcIkFyaWFsXFxcIjtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIHdvcmQtc3BhY2luZzogMXB4O1xcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XFxuICBjb2xvcjogIzMzMztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5odG1sLFxcbmJvZHkge1xcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xcbn1cXG5ib2R5LFxcbmRpdiB7XFxuICBib3JkZXI6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4qLFxcbio6YmVmb3JlLFxcbio6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG1hcmdpbjogMDtcXG59XFxuYm9keSxcXG5oMSxcXG5oMixcXG5oMyxcXG5oNCxcXG5oNSxcXG5oNixcXG5ocixcXG5wLFxcbmJsb2NrcXVvdGUsXFxuZGwsXFxuZHQsXFxuZGQsXFxudWwsXFxub2wsXFxubGksXFxucHJlLFxcbmZvcm0sXFxuZmllbGRzZXQsXFxubGVnZW5kLFxcbmJ1dHRvbixcXG5pbnB1dCxcXG50ZXh0YXJlYSxcXG50aCxcXG50ZCxcXG5pZnJhbWUge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuaW1nLFxcbmFydGljbGUsXFxuYXNpZGUsXFxuZGV0YWlscyxcXG5maWdjYXB0aW9uLFxcbmZpZ3VyZSxcXG5mb290ZXIsXFxuaGVhZGVyLFxcbm1lbnUsXFxubmF2LFxcbnNlY3Rpb24sXFxuc3VtbWFyeSxcXG50aW1lLFxcbm1hcmssXFxuYXVkaW8sXFxudmlkZW8ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5oMSxcXG5oMixcXG5oMyxcXG5oNCxcXG5oNSxcXG5oNiB7XFxuICBmb250LXNpemU6IDEwMCU7XFxufVxcbmZpZWxkc2V0LFxcbmltZyB7XFxuICBib3JkZXI6IDA7XFxufVxcbmFkZHJlc3MsXFxuY2FwdGlvbixcXG5jaXRlLFxcbmRmbixcXG5lbSxcXG50aCxcXG52YXIsXFxuaSxcXG5lbSB7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5hIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5hOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5hLFxcbmxhYmVsLFxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3Qge1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcbn1cXG5pbnB1dCxcXG5zZWxlY3QsXFxuYnV0dG9uIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuc2VsZWN0IHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbnNlbGVjdDo6LW1zLWV4cGFuZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5pbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbmlucHV0LFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwiYnV0dG9uXFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwiZmlsZVxcXCJdID4gaW5wdXRbdHlwZT1cXFwiYnV0dG9uXFxcIl06Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdLFxcbmlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuaW5wdXRbdHlwZT1cXFwibnVtYmVyXFxcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuaW5wdXRbdHlwZT1cXFwibnVtYmVyXFxcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcXG4gIG1hcmdpbjogMDtcXG59XFxuaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwIDEwMDBweCB3aGl0ZSBpbnNldDtcXG59XFxuaW5wdXRbdHlwZT1cXFwic2VhcmNoXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwidGVsXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLFxcbmlucHV0IHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC8q5Y676Zmk57O757uf6buY6K6k55qE5qC35byPKi9cXG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixcXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogV2ViS2l0LCBCbGluaywgRWRnZSAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46LW1vei1wbGFjZWhvbGRlciB7XFxuICAvKiBNb3ppbGxhIEZpcmVmb3ggNCB0byAxOCAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogTW96aWxsYSBGaXJlZm94IDE5KyAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEludGVybmV0IEV4cGxvcmVyIDEwLTExICovXFxuICBjb2xvcjogI2JmYmZiZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbnNlbGVjdCxcXG5pbnB1dCxcXG5vcHRpb24ge1xcbiAgY29sb3I6ICMzMzMzMzM7XFxufVxcbnRleHRhcmVhIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IG5vbmU7XFxuICBjb2xvcjogIzMzMzMzMztcXG59XFxuLmNPcmFuZ2Uge1xcbiAgY29sb3I6ICNmMDVhMjM7XFxufVxcbi5jR3JlZW4ge1xcbiAgY29sb3I6ICMwMDY0NDE7XFxufVxcbi5jR3JheSB7XFxuICBjb2xvcjogI2JmYmZiZjtcXG59XFxuLmNEYXJrIHtcXG4gIGNvbG9yOiAjZGNkY2RjO1xcbn1cXG4jYXBwIHtcXG4gIGJvcmRlcjogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5tYWluLWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubWFpbi1jb250YWluZXI6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBjbGVhcjogYm90aDtcXG59XFxuLmNvbnRlbnQge1xcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG4uYm94LXcge1xcbiAgbWF4LXdpZHRoOiA5NTBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5ib3gge1xcbiAgbWF4LXdpZHRoOiA5NTBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5mb2N1cyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZjA1YTIzO1xcbn1cXG4uYXBwX193aWR0aCB7XFxuICB3aWR0aDogNzUwcHg7XFxufVxcbi5hcHBfX3dpZHRoIHtcXG4gIHdpZHRoOiA3NTBweDtcXG59XFxuLmFwcF9faW5uZXIge1xcbiAgbWFyZ2luOiAyMHB4O1xcbn1cXG4uYXBwX190aXRsZSB7XFxuICBmb250LXNpemU6IDMycHg7XFxuICBsaW5lLWhlaWdodDogMzZweDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcbiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgI2VlZWVlZTtcXG59XFxuLmFwcF9fZGVzYyB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBsaW5lLWhlaWdodDogMjZweDtcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxuICBjb2xvcjogIzQ3NTY2OTtcXG59XFxuLmFwcF9fYmdjIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmFwcF9fYmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5hcHBfX3RvcC1zaGFkb3cge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDc1MHB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3gtc2hhZG93OiAwcHggNHB4IDAuOXB4IDAuMXB4IHJnYmEoNiwgMCwgMSwgMC4wNyk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xcbn1cXG4uYXBwX19jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICB3aWR0aDogMXJlbSAhaW1wb3J0YW50O1xcbiAgaGVpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNmMDVhMjMgIWltcG9ydGFudDtcXG59XFxuLmlwdDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNmMDVhMjMgIWltcG9ydGFudDtcXG59XFxuLmlwdC5lcnIge1xcbiAgYm9yZGVyLWNvbG9yOiAjZjA1YTIzICFpbXBvcnRhbnQ7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis[data-v-3b4f35af] {\\n  background-repeat: no-repeat;\\n  background-size: 100% 100%;\\n}\\n.fl[data-v-3b4f35af] {\\n  display: flex;\\n}\\n.fj[data-v-3b4f35af] {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n.fla[data-v-3b4f35af] {\\n  display: flex;\\n  align-items: center;\\n}\\n.fcc[data-v-3b4f35af] {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.bb[data-v-3b4f35af] {\\n  box-sizing: border-box;\\n}\\n.fullp[data-v-3b4f35af] {\\n  width: 100%;\\n  height: 100%;\\n}\\n.pointer[data-v-3b4f35af] {\\n  cursor: pointer;\\n}\\n.text-l[data-v-3b4f35af] {\\n  text-align: left;\\n}\\n.text-r[data-v-3b4f35af] {\\n  text-align: right;\\n}\\n.text-c[data-v-3b4f35af] {\\n  text-align: center;\\n}\\n.bc[data-v-3b4f35af] {\\n  text-align: center;\\n}\\n.flex1[data-v-3b4f35af] {\\n  flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n  font-family: 'iconfont';\\n  src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont[data-v-3b4f35af] {\\n  font-family: 'iconfont' !important;\\n  font-size: 16px;\\n  font-style: normal;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh[data-v-3b4f35af]:before {\\n  content: '\\\\E874';\\n}\\n.iconempty[data-v-3b4f35af]:before {\\n  content: '\\\\E6A6';\\n}\\n.iconclose[data-v-3b4f35af]:before {\\n  content: '\\\\E849';\\n}\\n.drop-list[data-v-3b4f35af] {\\n  display: inline-block;\\n  min-width: 6.25rem;\\n  position: relative;\\n  margin: 0 1rem;\\n}\\n.drop-list .list[data-v-3b4f35af] {\\n    position: absolute;\\n    width: 100%;\\n}\\n.drop-list .list .space[data-v-3b4f35af] {\\n      height: 1.5rem;\\n}\\n.drop-list span[data-v-3b4f35af] {\\n    display: block;\\n    text-align: center;\\n}\\n.drop-list ul[data-v-3b4f35af] {\\n    display: none;\\n    overflow: hidden;\\n    box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15);\\n    border-radius: .5rem;\\n}\\n.drop-list ul li[data-v-3b4f35af] {\\n      border-bottom: solid 1px #f1f1f1;\\n      background: #ffffff;\\n      text-align: center;\\n      padding: 1.5rem 0;\\n}\\n.drop-list ul li[data-v-3b4f35af]:last-child {\\n      border-bottom: none;\\n}\\n.drop-list ul li[data-v-3b4f35af]:hover {\\n      color: #ec6429;\\n}\\n.user[data-v-3b4f35af] {\\n  width: 7.333333rem;\\n  height: 2.25rem;\\n  background-color: #f05a23;\\n  border-radius: 1.333333rem;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  color: #ffffff;\\n}\\n.user span[data-v-3b4f35af] {\\n    max-width: 4.25rem;\\n    /* 51/12 */\\n    overflow: hidden;\\n    white-space: nowrap;\\n    text-overflow: ellipsis;\\n}\\n.user .icon-img[data-v-3b4f35af] {\\n    margin: 0 .5rem;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT83NGE4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiDmlK/mjIHmlofku7ZcXG4gKiDpnIDopoHlvJXnlKjnmoTlnLDmlrnlnYfpnIDopoHliqDkuIrov5nkuKrmlK/mjIHmlofku7ZcXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyBNaW54aW5zXFxuICpcXG4gKiDlj4LogIPmlLbpm4bvvJpcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAtc2Fzcy90cmVlL21hc3Rlci9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGluc1xcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyDlj5jph49cXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLmJpc1tkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuLmZsW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZqW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLmZsYVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uZmNjW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmJiW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZ1bGxwW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5wb2ludGVyW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udGV4dC1sW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtcltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4udGV4dC1jW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uYmNbZGF0YS12LTNiNGYzNWFmXSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGV4MVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi8qIOWbvueJh+Wtl+S9kyAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCc7XFxuICBzcmM6IHVybChcXFwiZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUFTRUFBc0FBQUFBQ1NBQUFBUTNBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhFSUdWZ0NEU0FxRkdJUW5BVFlDSkFNWUN3NEFCQ0FGaEcwSFZCdlpCeEdWbk52SWZoellEVitCQWU5d3RKaUdPTlRHWXVIQlovT2g3N1EzT3h1cEl0T2VGRlRjUWpwUlh3SytBSWJuMDhuZTc2NlhwcHNpd1JLUGtzUVRqN0FPNHhBT3YzZk9BZHNKYzBLTlpPM0lvODlMZjhLOUJrWStjZSs0ZGY0RG1zK3lYTWFjTk5iRUFPT0FBdHJiRjFtQnhBbHF5L0RxOHVxd3JnTUJpUEdBRDRnNmRiZ0dRaFNzZVFSQUtzdEs4aUZNbUZBVkJNSFNkc0ZXRnBrTkhoWXpoYmtFWUpiM2VmSUdRVVFJRENhRnRYUTBsMUtFaE9mS1YrRzAxOUFyeTdHZ2J6Z0hBR0VYVUlBUEFCWklaNkdyR1RTSStvQmlhNy9BNGdWQWlvV0JlcTU4dnZIbGtKZU5yOElOQmhJeXkwZHd3Vjhlc0pnNE1CQWdmR0NWbEtVTmovSGd1Wklhd0dycWpaZ0xQSGc1eEFDSzFZMllDd3k4Q3BkY2xvNC9ZSU1JY0JMQU5aaDlZR2tJUEh0YTJOb3JUS3hVU2xVTlY3S296Mnpzd28wbVJmTk5SczlmYkZxOFlKcjV1RVhMV283Y0VkKzZwYmw5VzN2M3JqNGc3dHpScFUrN0hhdVIwWWJtSjIrZGFsTEVMWnk2dWRlMHVHaCs3NVpwNWlYRkN4Wk1XMlErMElRT0tzYTdTTUpJS0gxOGgzeTloV1krbU40dEV0VzBiWVQybWVtV3BrMWRiN0w4MXRRN2RnczNpc1VidDFycmwwa1UweXkxU3phN1pDdzBtNGxDSXpGTUYyd3cxNStRcDF1NDNzUmsvaEpUN1lKTjV1YUxsdW9sUFpTVHZxMW00dm1iZ1I3dmVNMTE2T2pCR3AySzIxb01ia1JHbnZxZ2xuQ0xWaGFydUFNNmdsK3RvVE5ZUFpzNWRveVpEWHlIYngvUlN2Wk10NnROdHg3Umx6a1dsY3lzV1F5U1YySStQaW8wMDhOcDhtUXZML2owQ0VWTExJSXRsb2lFSVBJRm5DQkRON1pwQzZuM2kvZXJFMHVYSUNUL3QrMjY5clZyang0ZGUrd3J3eW5mam8xQmFOL3RYUW16SjN3SUY5a3JnaFVIcU4xZUZCNGZNdnVDUk9ybnZWd2RrVWVXTGZmMms3MElpTzhmczJ5T2FiWHBISGRsdlgrQTVybUs2ZHg0cGlYbGJIdW5pYitpTmVWTStVblhGdldaalIydWxlVkYvanNiSzEyd284T1dEcFkrVFJIMGpQOHN5THMwV0lsT0FJRGhGSE9QK2dJQTFURjNrQ09CT2NiYWo5RmpnWUNKOTdDRUZ2d3QzNUdmS1oyWXE0ajVKaUdVc0FDK0p1dTdzYVNaYXZESzFXZ3MvamVhYWdCL1EwV1VzdVl1dFRPZElLRGxtVExoQVRhMDNNc2tOMCtHMHQxdmNqeUVUQ01NQXJZNENMbVFpdWFEU1NJRVRTZ2VtN2RCdTAvRzZvMlJFZ0dlSmlBUVNydkFrRHNLU3VreWlhVTlCbytaZCtCVFpnd3hYZFpIU3JqRnJvNFpvcUtsZ2orVlNlNFVzZGFWWDNpRGZnZVI0MUtQOFVJdU5rQ0JmZ0hweEJVZDhoQXJHajc2MEZnVmNaa2pwYUxiRUFKVGJXWUhXVGVsdGZhTnZ6OVg5S0pOSWNmQlNySU1oQXBhcE1BZktTT3hqbko2VjZ2TSsyOUFld3VFWE5GUjQzMkJyTENEazBCK0FocVFycXF1VWNlbGpHN3dvUjAwcWhRN2k1T3hpS1JpQndTSU1sSmJQTWtCcWRvbzdSRHVOZnlaYmx4VDFXWjZUYnpMZmJCWjUzUVlRZ2xMZUlSUEJCQjloUFRISDlvTE1oUTVyNWlwREZ3d01Sd3hSZXpyZnpBQUFBPT1cXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7XFxufVxcbi5pY29uZm9udFtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnICFpbXBvcnRhbnQ7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxufVxcbi5pY29ucmVmcmVzaFtkYXRhLXYtM2I0ZjM1YWZdOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NzQnO1xcbn1cXG4uaWNvbmVtcHR5W2RhdGEtdi0zYjRmMzVhZl06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcRTZBNic7XFxufVxcbi5pY29uY2xvc2VbZGF0YS12LTNiNGYzNWFmXTpiZWZvcmUge1xcbiAgY29udGVudDogJ1xcXFxFODQ5JztcXG59XFxuLmRyb3AtbGlzdFtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1pbi13aWR0aDogNi4yNXJlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbjogMCAxcmVtO1xcbn1cXG4uZHJvcC1saXN0IC5saXN0W2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAxMDAlO1xcbn1cXG4uZHJvcC1saXN0IC5saXN0IC5zcGFjZVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcXG59XFxuLmRyb3AtbGlzdCBzcGFuW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uZHJvcC1saXN0IHVsW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3gtc2hhZG93OiAwIDAgMS41cmVtIDAgcmdiYSgyNTUsIDg3LCAwLCAwLjE1KTtcXG4gICAgYm9yZGVyLXJhZGl1czogLjVyZW07XFxufVxcbi5kcm9wLWxpc3QgdWwgbGlbZGF0YS12LTNiNGYzNWFmXSB7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNmMWYxZjE7XFxuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgcGFkZGluZzogMS41cmVtIDA7XFxufVxcbi5kcm9wLWxpc3QgdWwgbGlbZGF0YS12LTNiNGYzNWFmXTpsYXN0LWNoaWxkIHtcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG4uZHJvcC1saXN0IHVsIGxpW2RhdGEtdi0zYjRmMzVhZl06aG92ZXIge1xcbiAgICAgIGNvbG9yOiAjZWM2NDI5O1xcbn1cXG4udXNlcltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIHdpZHRoOiA3LjMzMzMzM3JlbTtcXG4gIGhlaWdodDogMi4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMDVhMjM7XFxuICBib3JkZXItcmFkaXVzOiAxLjMzMzMzM3JlbTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBjb2xvcjogI2ZmZmZmZjtcXG59XFxuLnVzZXIgc3BhbltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gICAgbWF4LXdpZHRoOiA0LjI1cmVtO1xcbiAgICAvKiA1MS8xMiAqL1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuLnVzZXIgLmljb24taW1nW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBtYXJnaW46IDAgLjVyZW07XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \".bis[data-v-f678fc22] {\\n  background-repeat: no-repeat;\\n  background-size: 100% 100%;\\n}\\n.fl[data-v-f678fc22] {\\n  display: flex;\\n}\\n.fj[data-v-f678fc22] {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n.fla[data-v-f678fc22] {\\n  display: flex;\\n  align-items: center;\\n}\\n.fcc[data-v-f678fc22] {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.bb[data-v-f678fc22] {\\n  box-sizing: border-box;\\n}\\n.fullp[data-v-f678fc22] {\\n  width: 100%;\\n  height: 100%;\\n}\\n.pointer[data-v-f678fc22] {\\n  cursor: pointer;\\n}\\n.text-l[data-v-f678fc22] {\\n  text-align: left;\\n}\\n.text-r[data-v-f678fc22] {\\n  text-align: right;\\n}\\n.text-c[data-v-f678fc22] {\\n  text-align: center;\\n}\\n.bc[data-v-f678fc22] {\\n  text-align: center;\\n}\\n.flex1[data-v-f678fc22] {\\n  flex: 1;\\n}\\n.v-footer[data-v-f678fc22] {\\n  font-family: MicrosoftYaHei;\\n  color: #ffffff;\\n  background-color: #2e2b2a;\\n}\\n.v-footer .footer-containter[data-v-f678fc22] {\\n    margin: 0 auto;\\n}\\n.v-footer .footer-containter .cont[data-v-f678fc22] {\\n      margin-left: 3.166667rem;\\n}\\n.v-footer .footer-containter .cont .logo-wrap[data-v-f678fc22] {\\n        padding: 1.75rem 0;\\n}\\n.v-footer .footer-containter .cont .logo-wrap .logo-img[data-v-f678fc22] {\\n          cursor: pointer;\\n}\\n.v-footer .footer-containter .cont .line[data-v-f678fc22] {\\n        width: 100%;\\n        height: 1px;\\n        opacity: 0.2;\\n        background-color: #ffffff;\\n}\\n.v-footer .footer-containter .cont .info[data-v-f678fc22] {\\n        padding: 1.25rem 0 1.5rem;\\n        display: flex;\\n}\\n.v-footer .footer-containter .cont .info .hotline[data-v-f678fc22] {\\n          min-width: 280px;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact .n-item[data-v-f678fc22] {\\n            margin-bottom: 0.6rem;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact .phone[data-v-f678fc22] {\\n            color: #ea5a26;\\n            font-size: 1.666667rem;\\n            font-weight: bold;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact[data-v-f678fc22]:first-child {\\n            margin-bottom: 2rem;\\n}\\n.v-footer .footer-containter .cont .info .nav[data-v-f678fc22] {\\n          flex: 1;\\n          display: flex;\\n}\\n.v-footer .footer-containter .cont .info .nav .n-item[data-v-f678fc22] {\\n            cursor: pointer;\\n            min-width: 14rem;\\n}\\n.v-footer .footer-containter .cont .info .public[data-v-f678fc22] {\\n          width: 6.25rem;\\n          text-align: center;\\n          margin-right: 3rem;\\n}\\n.v-footer .footer-containter .cont .info .public .qrcode[data-v-f678fc22] {\\n            margin-top: .75rem;\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22] {\\n          margin-bottom: 1.416667rem;\\n          color: rgba(179, 177, 168, 0.5);\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22]:first-child {\\n            color: #ffffff;\\n            margin-bottom: 2rem;\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22]:last-child {\\n            margin-bottom: 0;\\n}\\n.v-footer .footer-containter .cont .copyright[data-v-f678fc22] {\\n        color: rgba(179, 177, 168, 0.5);\\n        padding: 1.5rem 0;\\n        line-height: 1.58;\\n}\\n@media (max-width: 950px) {\\n.v-footer .footer-containter .cont .info[data-v-f678fc22] {\\n    display: block;\\n}\\n.v-footer .footer-containter .cont .info .nav[data-v-f678fc22] {\\n      margin-top: 2rem;\\n      display: flex;\\n}\\n.v-footer .footer-containter .cont .info .nav .nav-v[data-v-f678fc22] {\\n        width: 100%;\\n}\\n.v-footer .footer-containter .cont .info .nav .n-item[data-v-f678fc22] {\\n        min-width: 0;\\n}\\n.v-footer .footer-containter .cont .info .focus[data-v-f678fc22] {\\n      margin-top: 2rem;\\n      text-align: left;\\n}\\n.v-footer .footer-containter .cont .copyright[data-v-f678fc22] {\\n    box-sizing: border-box;\\n    padding-right: 2rem;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/NzhjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5iaXNbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxufVxcbi5mbFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5maltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5mbGFbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmZjY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5iYltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5mdWxscFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucG9pbnRlcltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRleHQtbFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi50ZXh0LXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmJjW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uZmxleDFbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBmbGV4OiAxO1xcbn1cXG4udi1mb290ZXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBmb250LWZhbWlseTogTWljcm9zb2Z0WWFIZWk7XFxuICBjb2xvcjogI2ZmZmZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyZTJiMmE7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgIG1hcmdpbjogMCBhdXRvO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250W2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAzLjE2NjY2N3JlbTtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAubG9nby13cmFwW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgcGFkZGluZzogMS43NXJlbSAwO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5sb2dvLXdyYXAgLmxvZ28taW1nW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmxpbmVbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgIGhlaWdodDogMXB4O1xcbiAgICAgICAgb3BhY2l0eTogMC4yO1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mb1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgIHBhZGRpbmc6IDEuMjVyZW0gMCAxLjVyZW07XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgICBtaW4td2lkdGg6IDI4MHB4O1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0IC5waG9uZVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2VhNWEyNjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEuNjY2NjY3cmVtO1xcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0W2RhdGEtdi1mNjc4ZmMyMl06Zmlyc3QtY2hpbGQge1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgZmxleDogMTtcXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mbyAubmF2IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTRyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLnB1YmxpY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgd2lkdGg6IDYuMjVyZW07XFxuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5wdWJsaWMgLnFyY29kZVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAuNzVyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm4taXRlbVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS40MTY2NjdyZW07XFxuICAgICAgICAgIGNvbG9yOiByZ2JhKDE3OSwgMTc3LCAxNjgsIDAuNSk7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm4taXRlbVtkYXRhLXYtZjY3OGZjMjJdOmZpcnN0LWNoaWxkIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZmZmZjtcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXTpsYXN0LWNoaWxkIHtcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5jb3B5cmlnaHRbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICBjb2xvcjogcmdiYSgxNzksIDE3NywgMTY4LCAwLjUpO1xcbiAgICAgICAgcGFkZGluZzogMS41cmVtIDA7XFxuICAgICAgICBsaW5lLWhlaWdodDogMS41ODtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDk1MHB4KSB7XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mb1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICBtYXJnaW4tdG9wOiAycmVtO1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdiAubmF2LXZbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICB3aWR0aDogMTAwJTtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mbyAubmF2IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICBtaW4td2lkdGg6IDA7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLmZvY3VzW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XFxuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuY29weXJpZ2h0W2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xcbn1cXG59XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \".v-header[data-v-6fba8daf] {\\n  height: 5.833333rem;\\n  background-color: #fff;\\n  color: #4c4948;\\n  position: relative;\\n  z-index: 11;\\n}\\n.v-header .header-container[data-v-6fba8daf] {\\n    max-width: 950px;\\n    height: 100%;\\n    margin: auto;\\n    display: flex;\\n    align-items: center;\\n    position: relative;\\n}\\n.v-header .main-nav[data-v-6fba8daf] {\\n    height: 100%;\\n    flex: 1 0 auto;\\n}\\n.v-header .logo-img[data-v-6fba8daf] {\\n    margin-right: 2rem;\\n    cursor: pointer;\\n}\\n.v-header .nav-list[data-v-6fba8daf] {\\n    height: 100%;\\n    display: flex;\\n    align-items: center;\\n    justify-content: flex-end;\\n    position: relative;\\n}\\n.v-header .nav-item[data-v-6fba8daf] {\\n    display: flex;\\n    align-items: center;\\n    height: 100%;\\n    margin: 0;\\n    font-size: 1rem;\\n    -ms-flex-pack: center;\\n    justify-content: center;\\n    position: relative;\\n    cursor: pointer;\\n}\\n.v-header .main-nav-list[data-v-6fba8daf] {\\n    display: flex;\\n    cursor: pointer;\\n}\\n.v-header .nav-item.link-item[data-v-6fba8daf] {\\n    padding: 0 50px;\\n    height: 5rem;\\n}\\n.v-header .nav-item.search[data-v-6fba8daf] {\\n    flex: 1 1 auto;\\n}\\n.v-header .nav-item.auth[data-v-6fba8daf] {\\n    color: #ffffff;\\n}\\n.v-header .nav-item.auth .user[data-v-6fba8daf] {\\n      width: 7.333333rem;\\n      height: 2.25rem;\\n      background-color: #f05a23;\\n      border-radius: 1.333333rem;\\n      display: flex;\\n      align-items: center;\\n      justify-content: center;\\n}\\n.v-header .nav-item.auth .user .icon-img[data-v-6fba8daf] {\\n        margin: 0 .5rem;\\n}\\n.v-header .nav-item.auth .lang[data-v-6fba8daf] {\\n      color: #f05a23;\\n}\\n@media (max-width: 950px) {\\n.v-header .header-container[data-v-6fba8daf] {\\n    width: 96%;\\n}\\n}\\n@media (max-width: 800px) {\\n.v-header .main-nav-list[data-v-6fba8daf] {\\n    display: none;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/MDZjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi52LWhlYWRlcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gIGhlaWdodDogNS44MzMzMzNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICM0YzQ5NDg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMTtcXG59XFxuLnYtaGVhZGVyIC5oZWFkZXItY29udGFpbmVyW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBtYXgtd2lkdGg6IDk1MHB4O1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIG1hcmdpbjogYXV0bztcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udi1oZWFkZXIgLm1haW4tbmF2W2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGZsZXg6IDEgMCBhdXRvO1xcbn1cXG4udi1oZWFkZXIgLmxvZ28taW1nW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDJyZW07XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnYtaGVhZGVyIC5uYXYtbGlzdFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW1bZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udi1oZWFkZXIgLm1haW4tbmF2LWxpc3RbZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnYtaGVhZGVyIC5uYXYtaXRlbS5saW5rLWl0ZW1bZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIHBhZGRpbmc6IDAgNTBweDtcXG4gICAgaGVpZ2h0OiA1cmVtO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLnNlYXJjaFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgZmxleDogMSAxIGF1dG87XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW0uYXV0aFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgY29sb3I6ICNmZmZmZmY7XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW0uYXV0aCAudXNlcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgICB3aWR0aDogNy4zMzMzMzNyZW07XFxuICAgICAgaGVpZ2h0OiAyLjI1cmVtO1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMDVhMjM7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMS4zMzMzMzNyZW07XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLmF1dGggLnVzZXIgLmljb24taW1nW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICAgICAgbWFyZ2luOiAwIC41cmVtO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLmF1dGggLmxhbmdbZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgICAgY29sb3I6ICNmMDVhMjM7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA5NTBweCkge1xcbi52LWhlYWRlciAuaGVhZGVyLWNvbnRhaW5lcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgd2lkdGg6IDk2JTtcXG59XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xcbi52LWhlYWRlciAubWFpbi1uYXYtbGlzdFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var escape = __webpack_require__(/*! ../../../node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js\");\nexports = module.exports = __webpack_require__(/*! ../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis[data-v-1badc801] {\\n  background-repeat: no-repeat;\\n  background-size: 100% 100%;\\n}\\n.fl[data-v-1badc801] {\\n  display: flex;\\n}\\n.fj[data-v-1badc801] {\\n  display: flex;\\n  justify-content: space-between;\\n}\\n.fla[data-v-1badc801] {\\n  display: flex;\\n  align-items: center;\\n}\\n.fcc[data-v-1badc801] {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.bb[data-v-1badc801] {\\n  box-sizing: border-box;\\n}\\n.fullp[data-v-1badc801] {\\n  width: 100%;\\n  height: 100%;\\n}\\n.pointer[data-v-1badc801] {\\n  cursor: pointer;\\n}\\n.text-l[data-v-1badc801] {\\n  text-align: left;\\n}\\n.text-r[data-v-1badc801] {\\n  text-align: right;\\n}\\n.text-c[data-v-1badc801] {\\n  text-align: center;\\n}\\n.bc[data-v-1badc801] {\\n  text-align: center;\\n}\\n.flex1[data-v-1badc801] {\\n  flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n  font-family: 'iconfont';\\n  src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont[data-v-1badc801] {\\n  font-family: 'iconfont' !important;\\n  font-size: 16px;\\n  font-style: normal;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh[data-v-1badc801]:before {\\n  content: '\\\\E874';\\n}\\n.iconempty[data-v-1badc801]:before {\\n  content: '\\\\E6A6';\\n}\\n.iconclose[data-v-1badc801]:before {\\n  content: '\\\\E849';\\n}\\n.content[data-v-1badc801] {\\n  padding-bottom: 2.25rem;\\n}\\n.top-space[data-v-1badc801] {\\n  height: 2.25rem;\\n}\\n.box[data-v-1badc801] {\\n  position: relative;\\n}\\n.banner-contaner[data-v-1badc801] {\\n  position: relative;\\n  width: 100%;\\n  overflow: hidden;\\n  height: 250px;\\n}\\n.banner[data-v-1badc801] {\\n  position: absolute;\\n  left: 50%;\\n  top: 0;\\n  width: 1024px;\\n  margin-left: -512px;\\n  height: 100%;\\n  overflow: hidden;\\n}\\n.banner-img[data-v-1badc801] {\\n    width: 100%;\\n    height: 100%;\\n}\\n.recommend[data-v-1badc801] {\\n  display: flex;\\n  text-align: center;\\n  justify-content: space-between;\\n  max-width: 79.166667rem;\\n}\\n.recommend-item[data-v-1badc801] {\\n    margin-top: 2.25rem;\\n    position: relative;\\n    width: 25.833333rem;\\n    border-radius: .75rem;\\n    box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15);\\n    background-color: #fbfbfb;\\n    padding: 0 5px;\\n}\\n.recommend-item .btn[data-v-1badc801] {\\n      position: absolute;\\n      left: 0;\\n      right: 0;\\n      bottom: 3rem;\\n      margin: 0 auto;\\n      width: 13.5rem;\\n      height: 4rem;\\n      line-height: 4rem;\\n      font-size: 16px;\\n      border-radius: 4rem;\\n      text-align: center;\\n      color: #ffffff;\\n      background-color: #f05a23;\\n      box-shadow: 0px 10px 13px 0 rgba(236, 100, 41, 0.2);\\n      background-blend-mode: soft-light;\\n      background-image: linear-gradient(to bottom, #f05f28, #f05021);\\n}\\n.recommend-item .tt[data-v-1badc801] {\\n      position: absolute;\\n      width: 100%;\\n      color: #4c4948;\\n}\\n.recommend-item .t1[data-v-1badc801] {\\n      bottom: 9.3rem;\\n}\\n.recommend-item .t2[data-v-1badc801] {\\n      bottom: 11.42rem;\\n}\\n.recommend-item[data-v-1badc801]:first-child {\\n      padding-left: 0;\\n}\\n.recommend-item[data-v-1badc801]:last-child {\\n      padding-right: 0;\\n}\\n.more[data-v-1badc801] {\\n  margin: 3.5rem auto 0;\\n  position: relative;\\n}\\n.more .btn[data-v-1badc801] {\\n    position: absolute;\\n    width: 26%;\\n    height: 8%;\\n    top: 83%;\\n    left: 69%;\\n    z-index: 1;\\n}\\n.more .cont[data-v-1badc801] {\\n    position: relative;\\n    margin-left: 6.583333rem;\\n    width: 85%;\\n}\\n.more .cont img[data-v-1badc801] {\\n      width: 100%;\\n}\\n.news[data-v-1badc801] {\\n  margin: 4.25rem auto 0;\\n}\\n.news .linear[data-v-1badc801] {\\n    width: 100%;\\n    height: 2.04rem;\\n    background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/index/linear.png */ \"./src/assets/images/index/linear.png\")) + \");\\n}\\n.news .tit[data-v-1badc801] {\\n    text-align: center;\\n    color: #f05a23;\\n    font-size: 18px;\\n    font-weight: bold;\\n    letter-spacing: 1.8px;\\n}\\n.news .under-line[data-v-1badc801] {\\n    margin: .75rem auto 0;\\n    width: 4rem;\\n    height: .25rem;\\n    background-color: #275d40;\\n}\\n.news .news-wrap[data-v-1badc801] {\\n    margin: 3.2rem auto 0;\\n    max-width: 100rem;\\n}\\n.news .news-wrap .more[data-v-1badc801] {\\n      width: 85%;\\n      text-align: right;\\n      margin-bottom: .5rem;\\n}\\n.news .news-wrap .news-item[data-v-1badc801] {\\n      width: 85%;\\n      margin: auto;\\n      height: 4.25rem;\\n      color: #4c4948;\\n      display: flex;\\n      justify-content: space-between;\\n      align-items: center;\\n      border-top: solid 1px #dcdddd;\\n      cursor: pointer;\\n}\\n.news .news-wrap .news-item[data-v-1badc801]:last-child {\\n        border-bottom: solid 1px #dcdddd;\\n}\\n.swiper-button-prev[data-v-1badc801] {\\n  background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/common/button-prev.png */ \"./src/assets/images/common/button-prev.png\")) + \");\\n}\\n.swiper-button-next[data-v-1badc801] {\\n  background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/common/button-next.png */ \"./src/assets/images/common/button-next.png\")) + \");\\n}\\n@media (max-width: 950px) {\\n.box[data-v-1badc801] {\\n    width: 96%;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MDQ1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZXNjYXBlID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi91cmwvZXNjYXBlLmpzXCIpO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAY2hhcnNldCBcXFwiVVRGLThcXFwiO1xcbi8qKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqIOaUr+aMgeaWh+S7tlxcbiAqIOmcgOimgeW8leeUqOeahOWcsOaWueWdh+mcgOimgeWKoOS4iui/meS4quaUr+aMgeaWh+S7tlxcbiAqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiBTYXNzIE1pbnhpbnNcXG4gKlxcbiAqIOWPguiAg+aUtumbhu+8mlxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC1zYXNzL3RyZWUvbWFzdGVyL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiBTYXNzIOWPmOmHj1xcbiAqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4uYmlzW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcbn1cXG4uZmxbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmpbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uZmxhW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5mY2NbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uYmJbZGF0YS12LTFiYWRjODAxXSB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4uZnVsbHBbZGF0YS12LTFiYWRjODAxXSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnBvaW50ZXJbZGF0YS12LTFiYWRjODAxXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi50ZXh0LWxbZGF0YS12LTFiYWRjODAxXSB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udGV4dC1yW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50ZXh0LWNbZGF0YS12LTFiYWRjODAxXSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5iY1tkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmZsZXgxW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZmxleDogMTtcXG59XFxuXFxuLyog5Zu+54mH5a2X5L2TICovXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ2ljb25mb250JztcXG4gIHNyYzogdXJsKFxcXCJkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBQVNFQUFzQUFBQUFDU0FBQUFRM0FBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEVJR1ZnQ0RTQXFGR0lRbkFUWUNKQU1ZQ3c0QUJDQUZoRzBIVkJ2WkJ4R1ZuTnZJZmh6WURWK0JBZTl3dEppR09OVEdZdUhCWi9PaDc3UTNPeHVwSXRPZUZGVGNRanBSWHdLK0FJYm4wOG5lNzY2WHBwc2l3UktQa3NRVGo3QU80eEFPdjNmT0Fkc0pjMEtOWk8zSW84OUxmOEs5QmtZK2NlKzRkZjREbXMreVhNYWNOTmJFQU9PQUF0cmJGMW1CeEFscXkvRHE4dXF3cmdNQmlQR0FENGc2ZGJnR1FoU3NlUVJBS3N0SzhpRk1tRkFWQk1IU2RzRldGcGtOSGhZemhia0VZSmIzZWZJR1FVUUlEQ2FGdFhRMGwxS0VoT2ZLVitHMDE5QXJ5N0dnYnpnSEFHRVhVSUFQQUJaSVo2R3JHVFNJK29CaWE3L0E0Z1ZBaW9XQmVxNTh2dkhsa0plTnI4SU5CaEl5eTBkd3dWOGVzSmc0TUJBZ2ZHQ1ZsS1VOai9IZ3VaSWF3R3JxalpnTFBIZzV4QUNLMVkyWUN3eThDcGRjbG80L1lJTUljQkxBTlpoOVlHa0lQSHRhMk5vclRLeFVTbFVOVjdLb3oyenN3bzBtUmZOTlJzOWZiRnE4WUpyNXVFWExXbzdjRWQrNnBibDlXM3Yzcmo0Zzd0elJwVSs3SGF1UjBZYm1KMitkYWxMRUxaeTZ1ZGUwdUdoKzc1WnA1aVhGQ3haTVcyUSswSVFPS3NhN1NNSklLSDE4aDN5OWhXWSttTjR0RXRXMGJZVDJtZW1XcGsxZGI3TDgxdFE3ZGdzM2lzVWJ0MXJybDBrVTB5eTFTemE3WkN3MG00bENJekZNRjJ3dzE1K1FwMXU0M3NSay9oSlQ3WUpONXVhTGx1b2xQWlNUdnExbTR2bWJnUjd2ZU0xMTZPakJHcDJLMjFvTWJrUkdudnFnbG5DTFZoYXJ1QU02Z2wrdG9UTllQWnM1ZG95WkRYeUhieC9SU3ZaTXQ2dE50eDdSbHprV2xjeXNXUXlTVjJJK1BpbzAwOE5wOG1RdkwvajBDRVZMTElJdGxvaUVJUElGbkNCRE43WnBDNm4zaS9lckUwdVhJQ1QvdCsyNjlyVnJqeDRkZSt3cnd5bmZqbzFCYU4vdFhRbXpKM3dJRjlrcmdoVUhxTjFlRkI0Zk12dUNST3JudlZ3ZGtVZVdMZmYyazcwSWlPOGZzMnlPYWJYcEhIZGx2WCtBNXJtSzZkeDRwaVhsYkh1bmliK2lOZVZNK1VuWEZ2V1pqUjJ1bGVWRi9qc2JLMTJ3bzhPV0RwWStUUkgwalA4c3lMczBXSWxPQUlEaEZIT1ArZ0lBMVRGM2tDT0JPY2JhajlGamdZQ0o5N0NFRnZ3dDM1R2ZLWjJZcTRqNUppR1VzQUMrSnV1N3NhU1phdkRLMVdncy9qZWFhZ0IvUTBXVXN1WXV0VE9kSUtEbG1UTGhBVGEwM01za04wK0cwdDF2Y2p5RVRDTU1Bclk0Q0xtUWl1YURTU0lFVFNnZW03ZEJ1MC9HNm8yUkVnR2VKaUFRU3J2QWtEc0tTdWt5aWFVOUJvK1pkK0JUWmd3eFhkWkhTcmpGcm80Wm9xS2xnaitWU2U0VXNkYVZYM2lEZmdlUjQxS1A4VUl1TmtDQmZnSHB4QlVkOGhBckdqNzYwRmdWY1pranBhTGJFQUpUYldZSFdUZWx0ZmFOdno5WDlLSk5JY2ZCU3JJTWhBcGFwTUFmS1NPeGpuSjZWNnZNKzI5QWV3dUVYTkZSNDMyQnJMQ0RrMEIrQWhxUXJxcXVVY2Vsakc3d29SMDBxaFE3aTVPeGlLUmlCd1NJTWxKYlBNa0JxZG9vN1JEdU5meVpibHhUMVdaNlRiekxmYkJaNTNRWVFnbExlSVJQQkJCOWhQVEhIOW9MTWhRNXI1aXBERnd3TVJ3eFJlenJmekFBQUE9PVxcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKTtcXG59XFxuLmljb25mb250W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG59XFxuLmljb25yZWZyZXNoW2RhdGEtdi0xYmFkYzgwMV06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcRTg3NCc7XFxufVxcbi5pY29uZW1wdHlbZGF0YS12LTFiYWRjODAxXTpiZWZvcmUge1xcbiAgY29udGVudDogJ1xcXFxFNkE2JztcXG59XFxuLmljb25jbG9zZVtkYXRhLXYtMWJhZGM4MDFdOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NDknO1xcbn1cXG4uY29udGVudFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHBhZGRpbmctYm90dG9tOiAyLjI1cmVtO1xcbn1cXG4udG9wLXNwYWNlW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgaGVpZ2h0OiAyLjI1cmVtO1xcbn1cXG4uYm94W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uYmFubmVyLWNvbnRhbmVyW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgaGVpZ2h0OiAyNTBweDtcXG59XFxuLmJhbm5lcltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDI0cHg7XFxuICBtYXJnaW4tbGVmdDogLTUxMnB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmJhbm5lci1pbWdbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5yZWNvbW1lbmRbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWF4LXdpZHRoOiA3OS4xNjY2NjdyZW07XFxufVxcbi5yZWNvbW1lbmQtaXRlbVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgbWFyZ2luLXRvcDogMi4yNXJlbTtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB3aWR0aDogMjUuODMzMzMzcmVtO1xcbiAgICBib3JkZXItcmFkaXVzOiAuNzVyZW07XFxuICAgIGJveC1zaGFkb3c6IDAgMCAxLjVyZW0gMCByZ2JhKDI1NSwgODcsIDAsIDAuMTUpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJmYmZiO1xcbiAgICBwYWRkaW5nOiAwIDVweDtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC5idG5bZGF0YS12LTFiYWRjODAxXSB7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgcmlnaHQ6IDA7XFxuICAgICAgYm90dG9tOiAzcmVtO1xcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xcbiAgICAgIHdpZHRoOiAxMy41cmVtO1xcbiAgICAgIGhlaWdodDogNHJlbTtcXG4gICAgICBsaW5lLWhlaWdodDogNHJlbTtcXG4gICAgICBmb250LXNpemU6IDE2cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNHJlbTtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgY29sb3I6ICNmZmZmZmY7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwNWEyMztcXG4gICAgICBib3gtc2hhZG93OiAwcHggMTBweCAxM3B4IDAgcmdiYSgyMzYsIDEwMCwgNDEsIDAuMik7XFxuICAgICAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzb2Z0LWxpZ2h0O1xcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmMDVmMjgsICNmMDUwMjEpO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW0gLnR0W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgICBjb2xvcjogIzRjNDk0ODtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC50MVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICBib3R0b206IDkuM3JlbTtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC50MltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICBib3R0b206IDExLjQycmVtO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW1bZGF0YS12LTFiYWRjODAxXTpmaXJzdC1jaGlsZCB7XFxuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW1bZGF0YS12LTFiYWRjODAxXTpsYXN0LWNoaWxkIHtcXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG4ubW9yZVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIG1hcmdpbjogMy41cmVtIGF1dG8gMDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLm1vcmUgLmJ0bltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMjYlO1xcbiAgICBoZWlnaHQ6IDglO1xcbiAgICB0b3A6IDgzJTtcXG4gICAgbGVmdDogNjklO1xcbiAgICB6LWluZGV4OiAxO1xcbn1cXG4ubW9yZSAuY29udFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBtYXJnaW4tbGVmdDogNi41ODMzMzNyZW07XFxuICAgIHdpZHRoOiA4NSU7XFxufVxcbi5tb3JlIC5jb250IGltZ1tkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICB3aWR0aDogMTAwJTtcXG59XFxuLm5ld3NbZGF0YS12LTFiYWRjODAxXSB7XFxuICBtYXJnaW46IDQuMjVyZW0gYXV0byAwO1xcbn1cXG4ubmV3cyAubGluZWFyW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAyLjA0cmVtO1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBlc2NhcGUocmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9pbmRleC9saW5lYXIucG5nXCIpKSArIFwiKTtcXG59XFxuLm5ld3MgLnRpdFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBjb2xvcjogI2YwNWEyMztcXG4gICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuOHB4O1xcbn1cXG4ubmV3cyAudW5kZXItbGluZVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgbWFyZ2luOiAuNzVyZW0gYXV0byAwO1xcbiAgICB3aWR0aDogNHJlbTtcXG4gICAgaGVpZ2h0OiAuMjVyZW07XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyNzVkNDA7XFxufVxcbi5uZXdzIC5uZXdzLXdyYXBbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIG1hcmdpbjogMy4ycmVtIGF1dG8gMDtcXG4gICAgbWF4LXdpZHRoOiAxMDByZW07XFxufVxcbi5uZXdzIC5uZXdzLXdyYXAgLm1vcmVbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgICAgd2lkdGg6IDg1JTtcXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG59XFxuLm5ld3MgLm5ld3Mtd3JhcCAubmV3cy1pdGVtW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICAgIHdpZHRoOiA4NSU7XFxuICAgICAgbWFyZ2luOiBhdXRvO1xcbiAgICAgIGhlaWdodDogNC4yNXJlbTtcXG4gICAgICBjb2xvcjogIzRjNDk0ODtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAjZGNkZGRkO1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLm5ld3MgLm5ld3Mtd3JhcCAubmV3cy1pdGVtW2RhdGEtdi0xYmFkYzgwMV06bGFzdC1jaGlsZCB7XFxuICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2RjZGRkZDtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIGVzY2FwZShyZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2NvbW1vbi9idXR0b24tcHJldi5wbmdcIikpICsgXCIpO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1uZXh0W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgZXNjYXBlKHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1uZXh0LnBuZ1wiKSkgKyBcIik7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA5NTBweCkge1xcbi5ib3hbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIHdpZHRoOiA5NiU7XFxufVxcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js":
/*!*******************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanM/NjkwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXNlU291cmNlTWFwKSB7XG5cdHZhciBsaXN0ID0gW107XG5cblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHR2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblx0XHRcdGlmKGl0ZW1bMl0pIHtcblx0XHRcdFx0cmV0dXJuIFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgY29udGVudCArIFwifVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fTtcblxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuXHRcdH1cblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcblx0dmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnO1xuXHR2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cdGlmICghY3NzTWFwcGluZykge1xuXHRcdHJldHVybiBjb250ZW50O1xuXHR9XG5cblx0aWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuXHRcdHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0XHRyZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59XG5cbi8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuXHR2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuXG5cdHJldHVybiAnLyojICcgKyBkYXRhICsgJyAqLyc7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\n");

/***/ }),

/***/ "./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function escape(url) {\n    if (typeof url !== 'string') {\n        return url\n    }\n    // If url is already wrapped in quotes, remove them\n    if (/^['\"].*['\"]$/.test(url)) {\n        url = url.slice(1, -1);\n    }\n    // Should url be wrapped?\n    // See https://drafts.csswg.org/css-values-3/#urls\n    if (/[\"'() \\t\\n]/.test(url)) {\n        return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"'\n    }\n\n    return url\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvdXJsL2VzY2FwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi91cmwvZXNjYXBlLmpzPzU0NTQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlc2NhcGUodXJsKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICB9XG4gICAgLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG4gICAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gICAgfVxuICAgIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuICAgIGlmICgvW1wiJygpIFxcdFxcbl0vLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gJ1wiJyArIHVybC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csICdcXFxcbicpICsgJ1wiJ1xuICAgIH1cblxuICAgIHJldHVybiB1cmxcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js\n");

/***/ }),

/***/ "./node_modules/_deep-equal@1.1.0@deep-equal/index.js":
/*!************************************************************!*\
  !*** ./node_modules/_deep-equal@1.1.0@deep-equal/index.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var objectKeys = __webpack_require__(/*! object-keys */ \"./node_modules/_object-keys@1.1.1@object-keys/index.js\");\nvar isArguments = __webpack_require__(/*! is-arguments */ \"./node_modules/_is-arguments@1.0.4@is-arguments/index.js\");\nvar is = __webpack_require__(/*! object-is */ \"./node_modules/_object-is@1.0.1@object-is/index.js\");\nvar isRegex = __webpack_require__(/*! is-regex */ \"./node_modules/_is-regex@1.0.4@is-regex/index.js\");\nvar flags = __webpack_require__(/*! regexp.prototype.flags */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js\");\nvar isDate = __webpack_require__(/*! is-date-object */ \"./node_modules/_is-date-object@1.0.1@is-date-object/index.js\");\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected;\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  /* eslint max-statements: [2, 50] */\n  var i, key;\n  if (typeof a !== typeof b) { return false; }\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if (aIsRegex || bIsRegex) {\n    return a.source === b.source && flags(a) === flags(b);\n  }\n\n  if (isDate(a) && isDate(b)) {\n    return getTime.call(a) === getTime.call(b);\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  try {\n    var ka = objectKeys(a);\n    var kb = objectKeys(b);\n  } catch (e) { // happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; }\n  }\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) { return false; }\n  }\n\n  return true;\n}\n\nmodule.exports = deepEqual;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2RlZXAtZXF1YWxAMS4xLjBAZGVlcC1lcXVhbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZGVlcC1lcXVhbEAxLjEuMEBkZWVwLWVxdWFsL2luZGV4LmpzPzUxMzEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnaXMtYXJndW1lbnRzJyk7XG52YXIgaXMgPSByZXF1aXJlKCdvYmplY3QtaXMnKTtcbnZhciBpc1JlZ2V4ID0gcmVxdWlyZSgnaXMtcmVnZXgnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJ3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3MnKTtcbnZhciBpc0RhdGUgPSByZXF1aXJlKCdpcy1kYXRlLW9iamVjdCcpO1xuXG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKG9wdHMuc3RyaWN0ID8gaXMoYWN0dWFsLCBleHBlY3RlZCkgOiBhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCAodHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBpcyhhY3R1YWwsIGV4cGVjdGVkKSA6IGFjdHVhbCA9PSBleHBlY3RlZDtcbiAgfVxuXG4gIC8qXG4gICAqIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAgKiBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgICogd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAgKiAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gICAqIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gICAqIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIC8qIGVzbGludCBtYXgtc3RhdGVtZW50czogWzIsIDUwXSAqL1xuICB2YXIgaSwga2V5O1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGlmIChpc0FyZ3VtZW50cyhhKSAhPT0gaXNBcmd1bWVudHMoYikpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgdmFyIGFJc1JlZ2V4ID0gaXNSZWdleChhKTtcbiAgdmFyIGJJc1JlZ2V4ID0gaXNSZWdleChiKTtcbiAgaWYgKGFJc1JlZ2V4ICE9PSBiSXNSZWdleCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKGFJc1JlZ2V4IHx8IGJJc1JlZ2V4KSB7XG4gICAgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBmbGFncyhhKSA9PT0gZmxhZ3MoYik7XG4gIH1cblxuICBpZiAoaXNEYXRlKGEpICYmIGlzRGF0ZShiKSkge1xuICAgIHJldHVybiBnZXRUaW1lLmNhbGwoYSkgPT09IGdldFRpbWUuY2FsbChiKTtcbiAgfVxuXG4gIHZhciBhSXNCdWZmZXIgPSBpc0J1ZmZlcihhKTtcbiAgdmFyIGJJc0J1ZmZlciA9IGlzQnVmZmVyKGIpO1xuICBpZiAoYUlzQnVmZmVyICE9PSBiSXNCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhSXNCdWZmZXIgfHwgYklzQnVmZmVyKSB7IC8vICYmIHdvdWxkIHdvcmsgdG9vLCBiZWNhdXNlIGJvdGggYXJlIHRydWUgb3IgYm90aCBmYWxzZSBoZXJlXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgeyByZXR1cm4gZmFsc2U7IH1cblxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSk7XG4gICAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgeyAvLyBoYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvLyB+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgfVxuICAvLyBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZCB+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSB7IHJldHVybiBmYWxzZTsgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcEVxdWFsO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_deep-equal@1.1.0@deep-equal/index.js\n");

/***/ }),

/***/ "./node_modules/_define-properties@1.1.3@define-properties/index.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_define-properties@1.1.3@define-properties/index.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar keys = __webpack_require__(/*! object-keys */ \"./node_modules/_object-keys@1.1.1@object-keys/index.js\");\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2RlZmluZS1wcm9wZXJ0aWVzQDEuMS4zQGRlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19kZWZpbmUtcHJvcGVydGllc0AxLjEuM0BkZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcz9jODkyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_define-properties@1.1.3@define-properties/index.js\n");

/***/ }),

/***/ "./node_modules/_function-bind@1.1.1@function-bind/implementation.js":
/*!***************************************************************************!*\
  !*** ./node_modules/_function-bind@1.1.1@function-bind/implementation.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Z1bmN0aW9uLWJpbmRAMS4xLjFAZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZnVuY3Rpb24tYmluZEAxLjEuMUBmdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzP2E5NWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_function-bind@1.1.1@function-bind/implementation.js\n");

/***/ }),

/***/ "./node_modules/_function-bind@1.1.1@function-bind/index.js":
/*!******************************************************************!*\
  !*** ./node_modules/_function-bind@1.1.1@function-bind/index.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_function-bind@1.1.1@function-bind/implementation.js\");\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Z1bmN0aW9uLWJpbmRAMS4xLjFAZnVuY3Rpb24tYmluZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZnVuY3Rpb24tYmluZEAxLjEuMUBmdW5jdGlvbi1iaW5kL2luZGV4LmpzPzNjZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_function-bind@1.1.1@function-bind/index.js\n");

/***/ }),

/***/ "./node_modules/_has@1.0.3@has/src/index.js":
/*!**************************************************!*\
  !*** ./node_modules/_has@1.0.3@has/src/index.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"./node_modules/_function-bind@1.1.1@function-bind/index.js\");\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2hhc0AxLjAuM0BoYXMvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19oYXNAMS4wLjNAaGFzL3NyYy9pbmRleC5qcz9mYjgxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_has@1.0.3@has/src/index.js\n");

/***/ }),

/***/ "./node_modules/_is-arguments@1.0.4@is-arguments/index.js":
/*!****************************************************************!*\
  !*** ./node_modules/_is-arguments@1.0.4@is-arguments/index.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar toStr = Object.prototype.toString;\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn toStr.call(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\ttoStr.call(value) !== '[object Array]' &&\n\t\ttoStr.call(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWFyZ3VtZW50c0AxLjAuNEBpcy1hcmd1bWVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2lzLWFyZ3VtZW50c0AxLjAuNEBpcy1hcmd1bWVudHMvaW5kZXguanM/ZmI0NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNTdGFuZGFyZEFyZ3VtZW50cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdGlmIChoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdG9TdHIuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxudmFyIGlzTGVnYWN5QXJndW1lbnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0aWYgKGlzU3RhbmRhcmRBcmd1bWVudHModmFsdWUpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmXG5cdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHR0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBzdXBwb3J0c1N0YW5kYXJkQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIGlzU3RhbmRhcmRBcmd1bWVudHMoYXJndW1lbnRzKTtcbn0oKSk7XG5cbmlzU3RhbmRhcmRBcmd1bWVudHMuaXNMZWdhY3lBcmd1bWVudHMgPSBpc0xlZ2FjeUFyZ3VtZW50czsgLy8gZm9yIHRlc3RzXG5cbm1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNTdGFuZGFyZEFyZ3VtZW50cyA/IGlzU3RhbmRhcmRBcmd1bWVudHMgOiBpc0xlZ2FjeUFyZ3VtZW50cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_is-arguments@1.0.4@is-arguments/index.js\n");

/***/ }),

/***/ "./node_modules/_is-buffer@2.0.4@is-buffer/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/_is-buffer@2.0.4@is-buffer/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWJ1ZmZlckAyLjAuNEBpcy1idWZmZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2lzLWJ1ZmZlckAyLjAuNEBpcy1idWZmZXIvaW5kZXguanM/ZWJlNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_is-buffer@2.0.4@is-buffer/index.js\n");

/***/ }),

/***/ "./node_modules/_is-date-object@1.0.1@is-date-object/index.js":
/*!********************************************************************!*\
  !*** ./node_modules/_is-date-object@1.0.1@is-date-object/index.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateObject(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) { return false; }\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWRhdGUtb2JqZWN0QDEuMC4xQGlzLWRhdGUtb2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19pcy1kYXRlLW9iamVjdEAxLjAuMUBpcy1kYXRlLW9iamVjdC9pbmRleC5qcz9iNTdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGdldERheSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGdldERheS5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkYXRlQ2xhc3MgPSAnW29iamVjdCBEYXRlXSc7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0cmV0dXJuIGhhc1RvU3RyaW5nVGFnID8gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkgOiB0b1N0ci5jYWxsKHZhbHVlKSA9PT0gZGF0ZUNsYXNzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_is-date-object@1.0.1@is-date-object/index.js\n");

/***/ }),

/***/ "./node_modules/_is-regex@1.0.4@is-regex/index.js":
/*!********************************************************!*\
  !*** ./node_modules/_is-regex@1.0.4@is-regex/index.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar has = __webpack_require__(/*! has */ \"./node_modules/_has@1.0.3@has/src/index.js\");\nvar regexExec = RegExp.prototype.exec;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar tryRegexExecCall = function tryRegexExec(value) {\n\ttry {\n\t\tvar lastIndex = value.lastIndex;\n\t\tvalue.lastIndex = 0;\n\n\t\tregexExec.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\tvalue.lastIndex = lastIndex;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar regexClass = '[object RegExp]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isRegex(value) {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (!hasToStringTag) {\n\t\treturn toStr.call(value) === regexClass;\n\t}\n\n\tvar descriptor = gOPD(value, 'lastIndex');\n\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\tif (!hasLastIndexDataProperty) {\n\t\treturn false;\n\t}\n\n\treturn tryRegexExecCall(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLXJlZ2V4QDEuMC40QGlzLXJlZ2V4L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19pcy1yZWdleEAxLjAuNEBpcy1yZWdleC9pbmRleC5qcz84ZmVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIHJlZ2V4RXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIHRyeVJlZ2V4RXhlY0NhbGwgPSBmdW5jdGlvbiB0cnlSZWdleEV4ZWModmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgbGFzdEluZGV4ID0gdmFsdWUubGFzdEluZGV4O1xuXHRcdHZhbHVlLmxhc3RJbmRleCA9IDA7XG5cblx0XHRyZWdleEV4ZWMuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0dmFsdWUubGFzdEluZGV4ID0gbGFzdEluZGV4O1xuXHR9XG59O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWdleENsYXNzID0gJ1tvYmplY3QgUmVnRXhwXSc7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICghaGFzVG9TdHJpbmdUYWcpIHtcblx0XHRyZXR1cm4gdG9TdHIuY2FsbCh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH1cblxuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQodmFsdWUsICdsYXN0SW5kZXgnKTtcblx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRpZiAoIWhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnlSZWdleEV4ZWNDYWxsKHZhbHVlKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_is-regex@1.0.4@is-regex/index.js\n");

/***/ }),

/***/ "./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js":
/*!********************************************************!*\
  !*** ./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global require, module, window */\n\tvar Handler = __webpack_require__(1)\n\tvar Util = __webpack_require__(3)\n\tvar Random = __webpack_require__(5)\n\tvar RE = __webpack_require__(20)\n\tvar toJSONSchema = __webpack_require__(23)\n\tvar valid = __webpack_require__(25)\n\n\tvar XHR\n\tif (typeof window !== 'undefined') XHR = __webpack_require__(27)\n\n\t/*!\n\t    Mock - 模拟请求 & 模拟数据\n\t    https://github.com/nuysoft/Mock\n\t    墨智 mozhi.gyy@taobao.com nuysoft@gmail.com\n\t*/\n\tvar Mock = {\n\t    Handler: Handler,\n\t    Random: Random,\n\t    Util: Util,\n\t    XHR: XHR,\n\t    RE: RE,\n\t    toJSONSchema: toJSONSchema,\n\t    valid: valid,\n\t    heredoc: Util.heredoc,\n\t    setup: function(settings) {\n\t        return XHR.setup(settings)\n\t    },\n\t    _mocked: {}\n\t}\n\n\tMock.version = '1.0.1-beta3'\n\n\t// 避免循环依赖\n\tif (XHR) XHR.Mock = Mock\n\n\t/*\n\t    * Mock.mock( template )\n\t    * Mock.mock( function() )\n\t    * Mock.mock( rurl, template )\n\t    * Mock.mock( rurl, function(options) )\n\t    * Mock.mock( rurl, rtype, template )\n\t    * Mock.mock( rurl, rtype, function(options) )\n\n\t    根据数据模板生成模拟数据。\n\t*/\n\tMock.mock = function(rurl, rtype, template) {\n\t    // Mock.mock(template)\n\t    if (arguments.length === 1) {\n\t        return Handler.gen(rurl)\n\t    }\n\t    // Mock.mock(rurl, template)\n\t    if (arguments.length === 2) {\n\t        template = rtype\n\t        rtype = undefined\n\t    }\n\t    // 拦截 XHR\n\t    if (XHR) window.XMLHttpRequest = XHR\n\t    Mock._mocked[rurl + (rtype || '')] = {\n\t        rurl: rurl,\n\t        rtype: rtype,\n\t        template: template\n\t    }\n\t    return Mock\n\t}\n\n\tmodule.exports = Mock\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* \n\t    ## Handler\n\n\t    处理数据模板。\n\t    \n\t    * Handler.gen( template, name?, context? )\n\n\t        入口方法。\n\n\t    * Data Template Definition, DTD\n\t        \n\t        处理数据模板定义。\n\n\t        * Handler.array( options )\n\t        * Handler.object( options )\n\t        * Handler.number( options )\n\t        * Handler.boolean( options )\n\t        * Handler.string( options )\n\t        * Handler.function( options )\n\t        * Handler.regexp( options )\n\t        \n\t        处理路径(相对和绝对)。\n\n\t        * Handler.getValueByKeyPath( key, options )\n\n\t    * Data Placeholder Definition, DPD\n\n\t        处理数据占位符定义\n\n\t        * Handler.placeholder( placeholder, context, templateContext, options )\n\n\t*/\n\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar Parser = __webpack_require__(4)\n\tvar Random = __webpack_require__(5)\n\tvar RE = __webpack_require__(20)\n\n\tvar Handler = {\n\t    extend: Util.extend\n\t}\n\n\t/*\n\t    template        属性值(即数据模板)\n\t    name            属性名\n\t    context         数据上下文,生成后的数据\n\t    templateContext 模板上下文,\n\n\t    Handle.gen(template, name, options)\n\t    context\n\t        currentContext, templateCurrentContext, \n\t        path, templatePath\n\t        root, templateRoot\n\t*/\n\tHandler.gen = function(template, name, context) {\n\t    /* jshint -W041 */\n\t    name = name == undefined ? '' : (name + '')\n\n\t    context = context || {}\n\t    context = {\n\t            // 当前访问路径,只有属性名,不包括生成规则\n\t            path: context.path || [Constant.GUID],\n\t            templatePath: context.templatePath || [Constant.GUID++],\n\t            // 最终属性值的上下文\n\t            currentContext: context.currentContext,\n\t            // 属性值模板的上下文\n\t            templateCurrentContext: context.templateCurrentContext || template,\n\t            // 最终值的根\n\t            root: context.root || context.currentContext,\n\t            // 模板的根\n\t            templateRoot: context.templateRoot || context.templateCurrentContext || template\n\t        }\n\t        // console.log('path:', context.path.join('.'), template)\n\n\t    var rule = Parser.parse(name)\n\t    var type = Util.type(template)\n\t    var data\n\n\t    if (Handler[type]) {\n\t        data = Handler[type]({\n\t            // 属性值类型\n\t            type: type,\n\t            // 属性值模板\n\t            template: template,\n\t            // 属性名 + 生成规则\n\t            name: name,\n\t            // 属性名\n\t            parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name,\n\n\t            // 解析后的生成规则\n\t            rule: rule,\n\t            // 相关上下文\n\t            context: context\n\t        })\n\n\t        if (!context.root) context.root = data\n\t        return data\n\t    }\n\n\t    return template\n\t}\n\n\tHandler.extend({\n\t    array: function(options) {\n\t        var result = [],\n\t            i, ii;\n\n\t        // 'name|1': []\n\t        // 'name|count': []\n\t        // 'name|min-max': []\n\t        if (options.template.length === 0) return result\n\n\t        // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }]\n\t        if (!options.rule.parameters) {\n\t            for (i = 0; i < options.template.length; i++) {\n\t                options.context.path.push(i)\n\t                options.context.templatePath.push(i)\n\t                result.push(\n\t                    Handler.gen(options.template[i], i, {\n\t                        path: options.context.path,\n\t                        templatePath: options.context.templatePath,\n\t                        currentContext: result,\n\t                        templateCurrentContext: options.template,\n\t                        root: options.context.root || result,\n\t                        templateRoot: options.context.templateRoot || options.template\n\t                    })\n\t                )\n\t                options.context.path.pop()\n\t                options.context.templatePath.pop()\n\t            }\n\t        } else {\n\t            // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE']\n\t            if (options.rule.min === 1 && options.rule.max === undefined) {\n\t                // fix #17\n\t                options.context.path.push(options.name)\n\t                options.context.templatePath.push(options.name)\n\t                result = Random.pick(\n\t                    Handler.gen(options.template, undefined, {\n\t                        path: options.context.path,\n\t                        templatePath: options.context.templatePath,\n\t                        currentContext: result,\n\t                        templateCurrentContext: options.template,\n\t                        root: options.context.root || result,\n\t                        templateRoot: options.context.templateRoot || options.template\n\t                    })\n\t                )\n\t                options.context.path.pop()\n\t                options.context.templatePath.pop()\n\t            } else {\n\t                // 'data|+1': [{}, {}]\n\t                if (options.rule.parameters[2]) {\n\t                    options.template.__order_index = options.template.__order_index || 0\n\n\t                    options.context.path.push(options.name)\n\t                    options.context.templatePath.push(options.name)\n\t                    result = Handler.gen(options.template, undefined, {\n\t                        path: options.context.path,\n\t                        templatePath: options.context.templatePath,\n\t                        currentContext: result,\n\t                        templateCurrentContext: options.template,\n\t                        root: options.context.root || result,\n\t                        templateRoot: options.context.templateRoot || options.template\n\t                    })[\n\t                        options.template.__order_index % options.template.length\n\t                    ]\n\n\t                    options.template.__order_index += +options.rule.parameters[2]\n\n\t                    options.context.path.pop()\n\t                    options.context.templatePath.pop()\n\n\t                } else {\n\t                    // 'data|1-10': [{}]\n\t                    for (i = 0; i < options.rule.count; i++) {\n\t                        // 'data|1-10': [{}, {}]\n\t                        for (ii = 0; ii < options.template.length; ii++) {\n\t                            options.context.path.push(result.length)\n\t                            options.context.templatePath.push(ii)\n\t                            result.push(\n\t                                Handler.gen(options.template[ii], result.length, {\n\t                                    path: options.context.path,\n\t                                    templatePath: options.context.templatePath,\n\t                                    currentContext: result,\n\t                                    templateCurrentContext: options.template,\n\t                                    root: options.context.root || result,\n\t                                    templateRoot: options.context.templateRoot || options.template\n\t                                })\n\t                            )\n\t                            options.context.path.pop()\n\t                            options.context.templatePath.pop()\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return result\n\t    },\n\t    object: function(options) {\n\t        var result = {},\n\t            keys, fnKeys, key, parsedKey, inc, i;\n\n\t        // 'obj|min-max': {}\n\t        /* jshint -W041 */\n\t        if (options.rule.min != undefined) {\n\t            keys = Util.keys(options.template)\n\t            keys = Random.shuffle(keys)\n\t            keys = keys.slice(0, options.rule.count)\n\t            for (i = 0; i < keys.length; i++) {\n\t                key = keys[i]\n\t                parsedKey = key.replace(Constant.RE_KEY, '$1')\n\t                options.context.path.push(parsedKey)\n\t                options.context.templatePath.push(key)\n\t                result[parsedKey] = Handler.gen(options.template[key], key, {\n\t                    path: options.context.path,\n\t                    templatePath: options.context.templatePath,\n\t                    currentContext: result,\n\t                    templateCurrentContext: options.template,\n\t                    root: options.context.root || result,\n\t                    templateRoot: options.context.templateRoot || options.template\n\t                })\n\t                options.context.path.pop()\n\t                options.context.templatePath.pop()\n\t            }\n\n\t        } else {\n\t            // 'obj': {}\n\t            keys = []\n\t            fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便\n\t            for (key in options.template) {\n\t                (typeof options.template[key] === 'function' ? fnKeys : keys).push(key)\n\t            }\n\t            keys = keys.concat(fnKeys)\n\n\t            /*\n\t                会改变非函数属性的顺序\n\t                keys = Util.keys(options.template)\n\t                keys.sort(function(a, b) {\n\t                    var afn = typeof options.template[a] === 'function'\n\t                    var bfn = typeof options.template[b] === 'function'\n\t                    if (afn === bfn) return 0\n\t                    if (afn && !bfn) return 1\n\t                    if (!afn && bfn) return -1\n\t                })\n\t            */\n\n\t            for (i = 0; i < keys.length; i++) {\n\t                key = keys[i]\n\t                parsedKey = key.replace(Constant.RE_KEY, '$1')\n\t                options.context.path.push(parsedKey)\n\t                options.context.templatePath.push(key)\n\t                result[parsedKey] = Handler.gen(options.template[key], key, {\n\t                    path: options.context.path,\n\t                    templatePath: options.context.templatePath,\n\t                    currentContext: result,\n\t                    templateCurrentContext: options.template,\n\t                    root: options.context.root || result,\n\t                    templateRoot: options.context.templateRoot || options.template\n\t                })\n\t                options.context.path.pop()\n\t                options.context.templatePath.pop()\n\t                    // 'id|+1': 1\n\t                inc = key.match(Constant.RE_KEY)\n\t                if (inc && inc[2] && Util.type(options.template[key]) === 'number') {\n\t                    options.template[key] += parseInt(inc[2], 10)\n\t                }\n\t            }\n\t        }\n\t        return result\n\t    },\n\t    number: function(options) {\n\t        var result, parts;\n\t        if (options.rule.decimal) { // float\n\t            options.template += ''\n\t            parts = options.template.split('.')\n\t                // 'float1|.1-10': 10,\n\t                // 'float2|1-100.1-10': 1,\n\t                // 'float3|999.1-10': 1,\n\t                // 'float4|.3-10': 123.123,\n\t            parts[0] = options.rule.range ? options.rule.count : parts[0]\n\t            parts[1] = (parts[1] || '').slice(0, options.rule.dcount)\n\t            while (parts[1].length < options.rule.dcount) {\n\t                parts[1] += (\n\t                    // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n\t                    (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789')\n\t                )\n\t            }\n\t            result = parseFloat(parts.join('.'), 10)\n\t        } else { // integer\n\t            // 'grade1|1-100': 1,\n\t            result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template\n\t        }\n\t        return result\n\t    },\n\t    boolean: function(options) {\n\t        var result;\n\t        // 'prop|multiple': false, 当前值是相反值的概率倍数\n\t        // 'prop|probability-probability': false, 当前值与相反值的概率\n\t        result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template\n\t        return result\n\t    },\n\t    string: function(options) {\n\t        var result = '',\n\t            i, placeholders, ph, phed;\n\t        if (options.template.length) {\n\n\t            //  'foo': '★',\n\t            /* jshint -W041 */\n\t            if (options.rule.count == undefined) {\n\t                result += options.template\n\t            }\n\n\t            // 'star|1-5': '★',\n\t            for (i = 0; i < options.rule.count; i++) {\n\t                result += options.template\n\t            }\n\t            // 'email|1-10': '@EMAIL, ',\n\t            placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \\w_\n\t            for (i = 0; i < placeholders.length; i++) {\n\t                ph = placeholders[i]\n\n\t                // 遇到转义斜杠,不需要解析占位符\n\t                if (/^\\\\/.test(ph)) {\n\t                    placeholders.splice(i--, 1)\n\t                    continue\n\t                }\n\n\t                phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options)\n\n\t                // 只有一个占位符,并且没有其他字符\n\t                if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // \n\t                    result = phed\n\t                    break\n\n\t                    if (Util.isNumeric(phed)) {\n\t                        result = parseFloat(phed, 10)\n\t                        break\n\t                    }\n\t                    if (/^(true|false)$/.test(phed)) {\n\t                        result = phed === 'true' ? true :\n\t                            phed === 'false' ? false :\n\t                            phed // 已经是布尔值\n\t                        break\n\t                    }\n\t                }\n\t                result = result.replace(ph, phed)\n\t            }\n\n\t        } else {\n\t            // 'ASCII|1-10': '',\n\t            // 'ASCII': '',\n\t            result = options.rule.range ? Random.string(options.rule.count) : options.template\n\t        }\n\t        return result\n\t    },\n\t    'function': function(options) {\n\t        // ( context, options )\n\t        return options.template.call(options.context.currentContext, options)\n\t    },\n\t    'regexp': function(options) {\n\t        var source = ''\n\n\t        // 'name': /regexp/,\n\t        /* jshint -W041 */\n\t        if (options.rule.count == undefined) {\n\t            source += options.template.source // regexp.source\n\t        }\n\n\t        // 'name|1-5': /regexp/,\n\t        for (var i = 0; i < options.rule.count; i++) {\n\t            source += options.template.source\n\t        }\n\n\t        return RE.Handler.gen(\n\t            RE.Parser.parse(\n\t                source\n\t            )\n\t        )\n\t    }\n\t})\n\n\tHandler.extend({\n\t    _all: function() {\n\t        var re = {};\n\t        for (var key in Random) re[key.toLowerCase()] = key\n\t        return re\n\t    },\n\t    // 处理占位符,转换为最终值\n\t    placeholder: function(placeholder, obj, templateContext, options) {\n\t        // console.log(options.context.path)\n\t        // 1 key, 2 params\n\t        Constant.RE_PLACEHOLDER.exec('')\n\t        var parts = Constant.RE_PLACEHOLDER.exec(placeholder),\n\t            key = parts && parts[1],\n\t            lkey = key && key.toLowerCase(),\n\t            okey = this._all()[lkey],\n\t            params = parts && parts[2] || ''\n\t        var pathParts = this.splitPathToArray(key)\n\n\t        // 解析占位符的参数\n\t        try {\n\t            // 1. 尝试保持参数的类型\n\t            /*\n\t                #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)\n\t                [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)\n\t                应该属于 Window Firefox 30.0 的 BUG\n\t            */\n\t            /* jshint -W061 */\n\t            params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')\n\t        } catch (error) {\n\t            // 2. 如果失败,只能解析为字符串\n\t            // console.error(error)\n\t            // if (error instanceof ReferenceError) params = parts[2].split(/,\\s*/);\n\t            // else throw error\n\t            params = parts[2].split(/,\\s*/)\n\t        }\n\n\t        // 占位符优先引用数据模板中的属性\n\t        if (obj && (key in obj)) return obj[key]\n\n\t        // @index @key\n\t        // if (Constant.RE_INDEX.test(key)) return +options.name\n\t        // if (Constant.RE_KEY.test(key)) return options.name\n\n\t        // 绝对路径 or 相对路径\n\t        if (\n\t            key.charAt(0) === '/' ||\n\t            pathParts.length > 1\n\t        ) return this.getValueByKeyPath(key, options)\n\n\t        // 递归引用数据模板中的属性\n\t        if (templateContext &&\n\t            (typeof templateContext === 'object') &&\n\t            (key in templateContext) &&\n\t            (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己\n\t        ) {\n\t            // 先计算被引用的属性值\n\t            templateContext[key] = Handler.gen(templateContext[key], key, {\n\t                currentContext: obj,\n\t                templateCurrentContext: templateContext\n\t            })\n\t            return templateContext[key]\n\t        }\n\n\t        // 如果未找到,则原样返回\n\t        if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder\n\n\t        // 递归解析参数中的占位符\n\t        for (var i = 0; i < params.length; i++) {\n\t            Constant.RE_PLACEHOLDER.exec('')\n\t            if (Constant.RE_PLACEHOLDER.test(params[i])) {\n\t                params[i] = Handler.placeholder(params[i], obj, templateContext, options)\n\t            }\n\t        }\n\n\t        var handle = Random[key] || Random[lkey] || Random[okey]\n\t        switch (Util.type(handle)) {\n\t            case 'array':\n\t                // 自动从数组中取一个,例如 @areas\n\t                return Random.pick(handle)\n\t            case 'function':\n\t                // 执行占位符方法(大多数情况)\n\t                handle.options = options\n\t                var re = handle.apply(Random, params)\n\t                if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。\n\t                delete handle.options\n\t                return re\n\t        }\n\t    },\n\t    getValueByKeyPath: function(key, options) {\n\t        var originalKey = key\n\t        var keyPathParts = this.splitPathToArray(key)\n\t        var absolutePathParts = []\n\n\t        // 绝对路径\n\t        if (key.charAt(0) === '/') {\n\t            absolutePathParts = [options.context.path[0]].concat(\n\t                this.normalizePath(keyPathParts)\n\t            )\n\t        } else {\n\t            // 相对路径\n\t            if (keyPathParts.length > 1) {\n\t                absolutePathParts = options.context.path.slice(0)\n\t                absolutePathParts.pop()\n\t                absolutePathParts = this.normalizePath(\n\t                    absolutePathParts.concat(keyPathParts)\n\t                )\n\n\t            }\n\t        }\n\n\t        try {\n\t            key = keyPathParts[keyPathParts.length - 1]\n\t            var currentContext = options.context.root\n\t            var templateCurrentContext = options.context.templateRoot\n\t            for (var i = 1; i < absolutePathParts.length - 1; i++) {\n\t                currentContext = currentContext[absolutePathParts[i]]\n\t                templateCurrentContext = templateCurrentContext[absolutePathParts[i]]\n\t            }\n\t            // 引用的值已经计算好\n\t            if (currentContext && (key in currentContext)) return currentContext[key]\n\t    \n\t            // 尚未计算,递归引用数据模板中的属性\n\t            if (templateCurrentContext &&\n\t                (typeof templateCurrentContext === 'object') &&\n\t                (key in templateCurrentContext) &&\n\t                (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己\n\t            ) {\n\t                // 先计算被引用的属性值\n\t                templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, {\n\t                    currentContext: currentContext,\n\t                    templateCurrentContext: templateCurrentContext\n\t                })\n\t                return templateCurrentContext[key]\n\t            }\n\t        } catch(err) { }\n\n\t        return '@' + keyPathParts.join('/')\n\t    },\n\t    // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js\n\t    normalizePath: function(pathParts) {\n\t        var newPathParts = []\n\t        for (var i = 0; i < pathParts.length; i++) {\n\t            switch (pathParts[i]) {\n\t                case '..':\n\t                    newPathParts.pop()\n\t                    break\n\t                case '.':\n\t                    break\n\t                default:\n\t                    newPathParts.push(pathParts[i])\n\t            }\n\t        }\n\t        return newPathParts\n\t    },\n\t    splitPathToArray: function(path) {\n\t        var parts = path.split(/\\/+/);\n\t        if (!parts[parts.length - 1]) parts = parts.slice(0, -1)\n\t        if (!parts[0]) parts = parts.slice(1)\n\t        return parts;\n\t    }\n\t})\n\n\tmodule.exports = Handler\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Constant\n\n\t    常量集合。\n\t */\n\t/*\n\t    RE_KEY\n\t        'name|min-max': value\n\t        'name|count': value\n\t        'name|min-max.dmin-dmax': value\n\t        'name|min-max.dcount': value\n\t        'name|count.dmin-dmax': value\n\t        'name|count.dcount': value\n\t        'name|+step': value\n\n\t        1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ]\n\n\t    RE_PLACEHOLDER\n\t        placeholder(*)\n\n\t    [正则查看工具](http://www.regexper.com/)\n\n\t    #26 生成规则 支持 负数,例如 number|-100-100\n\t*/\n\tmodule.exports = {\n\t    GUID: 1,\n\t    RE_KEY: /(.+)\\|(?:\\+(\\d+)|([\\+\\-]?\\d+-?[\\+\\-]?\\d*)?(?:\\.(\\d+-?\\d*))?)/,\n\t    RE_RANGE: /([\\+\\-]?\\d+)-?([\\+\\-]?\\d+)?/,\n\t    RE_PLACEHOLDER: /\\\\*@([^@#%&()\\?\\s]+)(?:\\((.*?)\\))?/g\n\t    // /\\\\*@([^@#%&()\\?\\s\\/\\.]+)(?:\\((.*?)\\))?/g\n\t    // RE_INDEX: /^index$/,\n\t    // RE_KEY: /^key$/\n\t}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Utilities\n\t*/\n\tvar Util = {}\n\n\tUtil.extend = function extend() {\n\t    var target = arguments[0] || {},\n\t        i = 1,\n\t        length = arguments.length,\n\t        options, name, src, copy, clone\n\n\t    if (length === 1) {\n\t        target = this\n\t        i = 0\n\t    }\n\n\t    for (; i < length; i++) {\n\t        options = arguments[i]\n\t        if (!options) continue\n\n\t        for (name in options) {\n\t            src = target[name]\n\t            copy = options[name]\n\n\t            if (target === copy) continue\n\t            if (copy === undefined) continue\n\n\t            if (Util.isArray(copy) || Util.isObject(copy)) {\n\t                if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : []\n\t                if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {}\n\n\t                target[name] = Util.extend(clone, copy)\n\t            } else {\n\t                target[name] = copy\n\t            }\n\t        }\n\t    }\n\n\t    return target\n\t}\n\n\tUtil.each = function each(obj, iterator, context) {\n\t    var i, key\n\t    if (this.type(obj) === 'number') {\n\t        for (i = 0; i < obj; i++) {\n\t            iterator(i, i)\n\t        }\n\t    } else if (obj.length === +obj.length) {\n\t        for (i = 0; i < obj.length; i++) {\n\t            if (iterator.call(context, obj[i], i, obj) === false) break\n\t        }\n\t    } else {\n\t        for (key in obj) {\n\t            if (iterator.call(context, obj[key], key, obj) === false) break\n\t        }\n\t    }\n\t}\n\n\tUtil.type = function type(obj) {\n\t    return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\\[object (\\w+)\\]/)[1].toLowerCase()\n\t}\n\n\tUtil.each('String Object Array RegExp Function'.split(' '), function(value) {\n\t    Util['is' + value] = function(obj) {\n\t        return Util.type(obj) === value.toLowerCase()\n\t    }\n\t})\n\n\tUtil.isObjectOrArray = function(value) {\n\t    return Util.isObject(value) || Util.isArray(value)\n\t}\n\n\tUtil.isNumeric = function(value) {\n\t    return !isNaN(parseFloat(value)) && isFinite(value)\n\t}\n\n\tUtil.keys = function(obj) {\n\t    var keys = [];\n\t    for (var key in obj) {\n\t        if (obj.hasOwnProperty(key)) keys.push(key)\n\t    }\n\t    return keys;\n\t}\n\tUtil.values = function(obj) {\n\t    var values = [];\n\t    for (var key in obj) {\n\t        if (obj.hasOwnProperty(key)) values.push(obj[key])\n\t    }\n\t    return values;\n\t}\n\n\t/*\n\t    ### Mock.heredoc(fn)\n\n\t    * Mock.heredoc(fn)\n\n\t    以直观、安全的方式书写(多行)HTML 模板。\n\n\t    **使用示例**如下所示:\n\n\t        var tpl = Mock.heredoc(function() {\n\t            /*!\n\t        {{email}}{{age}}\n\t        <!-- Mock { \n\t            email: '@EMAIL',\n\t            age: '@INT(1,100)'\n\t        } -->\n\t            *\\/\n\t        })\n\t    \n\t    **相关阅读**\n\t    * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、\n\t*/\n\tUtil.heredoc = function heredoc(fn) {\n\t    // 1. 移除起始的 function(){ /*!\n\t    // 2. 移除末尾的 */ }\n\t    // 3. 移除起始和末尾的空格\n\t    return fn.toString()\n\t        .replace(/^[^\\/]+\\/\\*!?/, '')\n\t        .replace(/\\*\\/[^\\/]+$/, '')\n\t        .replace(/^[\\s\\xA0]+/, '').replace(/[\\s\\xA0]+$/, '') // .trim()\n\t}\n\n\tUtil.noop = function() {}\n\n\tmodule.exports = Util\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t\t## Parser\n\n\t\t解析数据模板(属性名部分)。\n\n\t\t* Parser.parse( name )\n\t\t\t\n\t\t\t```json\n\t\t\t{\n\t\t\t\tparameters: [ name, inc, range, decimal ],\n\t\t\t\trnage: [ min , max ],\n\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\tcount : count,\n\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\tdcount: dcount\n\t\t\t}\n\t\t\t```\n\t */\n\n\tvar Constant = __webpack_require__(2)\n\tvar Random = __webpack_require__(5)\n\n\t/* jshint -W041 */\n\tmodule.exports = {\n\t\tparse: function(name) {\n\t\t\tname = name == undefined ? '' : (name + '')\n\n\t\t\tvar parameters = (name || '').match(Constant.RE_KEY)\n\n\t\t\tvar range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)\n\t\t\tvar min = range && range[1] && parseInt(range[1], 10) // || 1\n\t\t\tvar max = range && range[2] && parseInt(range[2], 10) // || 1\n\t\t\t\t// repeat || min-max || 1\n\t\t\t\t// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1\n\t\t\tvar count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined\n\n\t\t\tvar decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)\n\t\t\tvar dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,\n\t\t\tvar dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,\n\t\t\t\t// int || dmin-dmax || 0\n\t\t\tvar dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined\n\n\t\t\tvar result = {\n\t\t\t\t// 1 name, 2 inc, 3 range, 4 decimal\n\t\t\t\tparameters: parameters,\n\t\t\t\t// 1 min, 2 max\n\t\t\t\trange: range,\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\t// min-max\n\t\t\t\tcount: count,\n\t\t\t\t// 是否有 decimal\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\t// dmin-dimax\n\t\t\t\tdcount: dcount\n\t\t\t}\n\n\t\t\tfor (var r in result) {\n\t\t\t\tif (result[r] != undefined) return result\n\t\t\t}\n\n\t\t\treturn {}\n\t\t}\n\t}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Mock.Random\n\t    \n\t    工具类,用于生成各种随机数据。\n\t*/\n\n\tvar Util = __webpack_require__(3)\n\n\tvar Random = {\n\t    extend: Util.extend\n\t}\n\n\tRandom.extend(__webpack_require__(6))\n\tRandom.extend(__webpack_require__(7))\n\tRandom.extend(__webpack_require__(8))\n\tRandom.extend(__webpack_require__(10))\n\tRandom.extend(__webpack_require__(13))\n\tRandom.extend(__webpack_require__(15))\n\tRandom.extend(__webpack_require__(16))\n\tRandom.extend(__webpack_require__(17))\n\tRandom.extend(__webpack_require__(14))\n\tRandom.extend(__webpack_require__(19))\n\n\tmodule.exports = Random\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Basics\n\t*/\n\tmodule.exports = {\n\t    // 返回一个随机的布尔值。\n\t    boolean: function(min, max, cur) {\n\t        if (cur !== undefined) {\n\t            min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1\n\t            max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1\n\t            return Math.random() > 1.0 / (min + max) * min ? !cur : cur\n\t        }\n\n\t        return Math.random() >= 0.5\n\t    },\n\t    bool: function(min, max, cur) {\n\t        return this.boolean(min, max, cur)\n\t    },\n\t    // 返回一个随机的自然数(大于等于 0 的整数)。\n\t    natural: function(min, max) {\n\t        min = typeof min !== 'undefined' ? parseInt(min, 10) : 0\n\t        max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t        return Math.round(Math.random() * (max - min)) + min\n\t    },\n\t    // 返回一个随机的整数。\n\t    integer: function(min, max) {\n\t        min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992\n\t        max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t        return Math.round(Math.random() * (max - min)) + min\n\t    },\n\t    int: function(min, max) {\n\t        return this.integer(min, max)\n\t    },\n\t    // 返回一个随机的浮点数。\n\t    float: function(min, max, dmin, dmax) {\n\t        dmin = dmin === undefined ? 0 : dmin\n\t        dmin = Math.max(Math.min(dmin, 17), 0)\n\t        dmax = dmax === undefined ? 17 : dmax\n\t        dmax = Math.max(Math.min(dmax, 17), 0)\n\t        var ret = this.integer(min, max) + '.';\n\t        for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {\n\t            ret += (\n\t                // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n\t                (i < dcount - 1) ? this.character('number') : this.character('123456789')\n\t            )\n\t        }\n\t        return parseFloat(ret, 10)\n\t    },\n\t    // 返回一个随机字符。\n\t    character: function(pool) {\n\t        var pools = {\n\t            lower: 'abcdefghijklmnopqrstuvwxyz',\n\t            upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n\t            number: '0123456789',\n\t            symbol: '!@#$%^&*()[]'\n\t        }\n\t        pools.alpha = pools.lower + pools.upper\n\t        pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol\n\n\t        pool = pools[('' + pool).toLowerCase()] || pool\n\t        return pool.charAt(this.natural(0, pool.length - 1))\n\t    },\n\t    char: function(pool) {\n\t        return this.character(pool)\n\t    },\n\t    // 返回一个随机字符串。\n\t    string: function(pool, min, max) {\n\t        var len\n\t        switch (arguments.length) {\n\t            case 0: // ()\n\t                len = this.natural(3, 7)\n\t                break\n\t            case 1: // ( length )\n\t                len = pool\n\t                pool = undefined\n\t                break\n\t            case 2:\n\t                // ( pool, length )\n\t                if (typeof arguments[0] === 'string') {\n\t                    len = min\n\t                } else {\n\t                    // ( min, max )\n\t                    len = this.natural(pool, min)\n\t                    pool = undefined\n\t                }\n\t                break\n\t            case 3:\n\t                len = this.natural(min, max)\n\t                break\n\t        }\n\n\t        var text = ''\n\t        for (var i = 0; i < len; i++) {\n\t            text += this.character(pool)\n\t        }\n\n\t        return text\n\t    },\n\t    str: function( /*pool, min, max*/ ) {\n\t        return this.string.apply(this, arguments)\n\t    },\n\t    // 返回一个整型数组。\n\t    range: function(start, stop, step) {\n\t        // range( stop )\n\t        if (arguments.length <= 1) {\n\t            stop = start || 0;\n\t            start = 0;\n\t        }\n\t        // range( start, stop )\n\t        step = arguments[2] || 1;\n\n\t        start = +start\n\t        stop = +stop\n\t        step = +step\n\n\t        var len = Math.max(Math.ceil((stop - start) / step), 0);\n\t        var idx = 0;\n\t        var range = new Array(len);\n\n\t        while (idx < len) {\n\t            range[idx++] = start;\n\t            start += step;\n\t        }\n\n\t        return range;\n\t    }\n\t}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Date\n\t*/\n\tvar patternLetters = {\n\t    yyyy: 'getFullYear',\n\t    yy: function(date) {\n\t        return ('' + date.getFullYear()).slice(2)\n\t    },\n\t    y: 'yy',\n\n\t    MM: function(date) {\n\t        var m = date.getMonth() + 1\n\t        return m < 10 ? '0' + m : m\n\t    },\n\t    M: function(date) {\n\t        return date.getMonth() + 1\n\t    },\n\n\t    dd: function(date) {\n\t        var d = date.getDate()\n\t        return d < 10 ? '0' + d : d\n\t    },\n\t    d: 'getDate',\n\n\t    HH: function(date) {\n\t        var h = date.getHours()\n\t        return h < 10 ? '0' + h : h\n\t    },\n\t    H: 'getHours',\n\t    hh: function(date) {\n\t        var h = date.getHours() % 12\n\t        return h < 10 ? '0' + h : h\n\t    },\n\t    h: function(date) {\n\t        return date.getHours() % 12\n\t    },\n\n\t    mm: function(date) {\n\t        var m = date.getMinutes()\n\t        return m < 10 ? '0' + m : m\n\t    },\n\t    m: 'getMinutes',\n\n\t    ss: function(date) {\n\t        var s = date.getSeconds()\n\t        return s < 10 ? '0' + s : s\n\t    },\n\t    s: 'getSeconds',\n\n\t    SS: function(date) {\n\t        var ms = date.getMilliseconds()\n\t        return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms\n\t    },\n\t    S: 'getMilliseconds',\n\n\t    A: function(date) {\n\t        return date.getHours() < 12 ? 'AM' : 'PM'\n\t    },\n\t    a: function(date) {\n\t        return date.getHours() < 12 ? 'am' : 'pm'\n\t    },\n\t    T: 'getTime'\n\t}\n\tmodule.exports = {\n\t    // 日期占位符集合。\n\t    _patternLetters: patternLetters,\n\t    // 日期占位符正则。\n\t    _rformat: new RegExp((function() {\n\t        var re = []\n\t        for (var i in patternLetters) re.push(i)\n\t        return '(' + re.join('|') + ')'\n\t    })(), 'g'),\n\t    // 格式化日期。\n\t    _formatDate: function(date, format) {\n\t        return format.replace(this._rformat, function creatNewSubString($0, flag) {\n\t            return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :\n\t                patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :\n\t                date[patternLetters[flag]]()\n\t        })\n\t    },\n\t    // 生成一个随机的 Date 对象。\n\t    _randomDate: function(min, max) { // min, max\n\t        min = min === undefined ? new Date(0) : min\n\t        max = max === undefined ? new Date() : max\n\t        return new Date(Math.random() * (max.getTime() - min.getTime()))\n\t    },\n\t    // 返回一个随机的日期字符串。\n\t    date: function(format) {\n\t        format = format || 'yyyy-MM-dd'\n\t        return this._formatDate(this._randomDate(), format)\n\t    },\n\t    // 返回一个随机的时间字符串。\n\t    time: function(format) {\n\t        format = format || 'HH:mm:ss'\n\t        return this._formatDate(this._randomDate(), format)\n\t    },\n\t    // 返回一个随机的日期和时间字符串。\n\t    datetime: function(format) {\n\t        format = format || 'yyyy-MM-dd HH:mm:ss'\n\t        return this._formatDate(this._randomDate(), format)\n\t    },\n\t    // 返回当前的日期和时间字符串。\n\t    now: function(unit, format) {\n\t        // now(unit) now(format)\n\t        if (arguments.length === 1) {\n\t            // now(format)\n\t            if (!/year|month|day|hour|minute|second|week/.test(unit)) {\n\t                format = unit\n\t                unit = ''\n\t            }\n\t        }\n\t        unit = (unit || '').toLowerCase()\n\t        format = format || 'yyyy-MM-dd HH:mm:ss'\n\n\t        var date = new Date()\n\n\t        /* jshint -W086 */\n\t        // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/\n\t        switch (unit) {\n\t            case 'year':\n\t                date.setMonth(0)\n\t            case 'month':\n\t                date.setDate(1)\n\t            case 'week':\n\t            case 'day':\n\t                date.setHours(0)\n\t            case 'hour':\n\t                date.setMinutes(0)\n\t            case 'minute':\n\t                date.setSeconds(0)\n\t            case 'second':\n\t                date.setMilliseconds(0)\n\t        }\n\t        switch (unit) {\n\t            case 'week':\n\t                date.setDate(date.getDate() - date.getDay())\n\t        }\n\n\t        return this._formatDate(date, format)\n\t    }\n\t}\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module) {/* global document  */\n\t/*\n\t    ## Image\n\t*/\n\tmodule.exports = {\n\t    // 常见的广告宽高\n\t    _adSize: [\n\t        '300x250', '250x250', '240x400', '336x280', '180x150',\n\t        '720x300', '468x60', '234x60', '88x31', '120x90',\n\t        '120x60', '120x240', '125x125', '728x90', '160x600',\n\t        '120x600', '300x600'\n\t    ],\n\t    // 常见的屏幕宽高\n\t    _screenSize: [\n\t        '320x200', '320x240', '640x480', '800x480', '800x480',\n\t        '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200',\n\t        '2560x1600'\n\t    ],\n\t    // 常见的视频宽高\n\t    _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'],\n\t    /*\n\t        生成一个随机的图片地址。\n\n\t        替代图片源\n\t            http://fpoimg.com/\n\t        参考自 \n\t            http://rensanning.iteye.com/blog/1933310\n\t            http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485\n\t    */\n\t    image: function(size, background, foreground, format, text) {\n\t        // Random.image( size, background, foreground, text )\n\t        if (arguments.length === 4) {\n\t            text = format\n\t            format = undefined\n\t        }\n\t        // Random.image( size, background, text )\n\t        if (arguments.length === 3) {\n\t            text = foreground\n\t            foreground = undefined\n\t        }\n\t        // Random.image()\n\t        if (!size) size = this.pick(this._adSize)\n\n\t        if (background && ~background.indexOf('#')) background = background.slice(1)\n\t        if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1)\n\n\t        // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello\n\t        return 'http://dummyimage.com/' + size +\n\t            (background ? '/' + background : '') +\n\t            (foreground ? '/' + foreground : '') +\n\t            (format ? '.' + format : '') +\n\t            (text ? '&text=' + text : '')\n\t    },\n\t    img: function() {\n\t        return this.image.apply(this, arguments)\n\t    },\n\n\t    /*\n\t        BrandColors\n\t        http://brandcolors.net/\n\t        A collection of major brand color codes curated by Galen Gidman.\n\t        大牌公司的颜色集合\n\n\t        // 获取品牌和颜色\n\t        $('h2').each(function(index, item){\n\t            item = $(item)\n\t            console.log('\\'' + item.text() + '\\'', ':', '\\'' + item.next().text() + '\\'', ',')\n\t        })\n\t    */\n\t    _brandColors: {\n\t        '4ormat': '#fb0a2a',\n\t        '500px': '#02adea',\n\t        'About.me (blue)': '#00405d',\n\t        'About.me (yellow)': '#ffcc33',\n\t        'Addvocate': '#ff6138',\n\t        'Adobe': '#ff0000',\n\t        'Aim': '#fcd20b',\n\t        'Amazon': '#e47911',\n\t        'Android': '#a4c639',\n\t        'Angie\\'s List': '#7fbb00',\n\t        'AOL': '#0060a3',\n\t        'Atlassian': '#003366',\n\t        'Behance': '#053eff',\n\t        'Big Cartel': '#97b538',\n\t        'bitly': '#ee6123',\n\t        'Blogger': '#fc4f08',\n\t        'Boeing': '#0039a6',\n\t        'Booking.com': '#003580',\n\t        'Carbonmade': '#613854',\n\t        'Cheddar': '#ff7243',\n\t        'Code School': '#3d4944',\n\t        'Delicious': '#205cc0',\n\t        'Dell': '#3287c1',\n\t        'Designmoo': '#e54a4f',\n\t        'Deviantart': '#4e6252',\n\t        'Designer News': '#2d72da',\n\t        'Devour': '#fd0001',\n\t        'DEWALT': '#febd17',\n\t        'Disqus (blue)': '#59a3fc',\n\t        'Disqus (orange)': '#db7132',\n\t        'Dribbble': '#ea4c89',\n\t        'Dropbox': '#3d9ae8',\n\t        'Drupal': '#0c76ab',\n\t        'Dunked': '#2a323a',\n\t        'eBay': '#89c507',\n\t        'Ember': '#f05e1b',\n\t        'Engadget': '#00bdf6',\n\t        'Envato': '#528036',\n\t        'Etsy': '#eb6d20',\n\t        'Evernote': '#5ba525',\n\t        'Fab.com': '#dd0017',\n\t        'Facebook': '#3b5998',\n\t        'Firefox': '#e66000',\n\t        'Flickr (blue)': '#0063dc',\n\t        'Flickr (pink)': '#ff0084',\n\t        'Forrst': '#5b9a68',\n\t        'Foursquare': '#25a0ca',\n\t        'Garmin': '#007cc3',\n\t        'GetGlue': '#2d75a2',\n\t        'Gimmebar': '#f70078',\n\t        'GitHub': '#171515',\n\t        'Google Blue': '#0140ca',\n\t        'Google Green': '#16a61e',\n\t        'Google Red': '#dd1812',\n\t        'Google Yellow': '#fcca03',\n\t        'Google+': '#dd4b39',\n\t        'Grooveshark': '#f77f00',\n\t        'Groupon': '#82b548',\n\t        'Hacker News': '#ff6600',\n\t        'HelloWallet': '#0085ca',\n\t        'Heroku (light)': '#c7c5e6',\n\t        'Heroku (dark)': '#6567a5',\n\t        'HootSuite': '#003366',\n\t        'Houzz': '#73ba37',\n\t        'HTML5': '#ec6231',\n\t        'IKEA': '#ffcc33',\n\t        'IMDb': '#f3ce13',\n\t        'Instagram': '#3f729b',\n\t        'Intel': '#0071c5',\n\t        'Intuit': '#365ebf',\n\t        'Kickstarter': '#76cc1e',\n\t        'kippt': '#e03500',\n\t        'Kodery': '#00af81',\n\t        'LastFM': '#c3000d',\n\t        'LinkedIn': '#0e76a8',\n\t        'Livestream': '#cf0005',\n\t        'Lumo': '#576396',\n\t        'Mixpanel': '#a086d3',\n\t        'Meetup': '#e51937',\n\t        'Nokia': '#183693',\n\t        'NVIDIA': '#76b900',\n\t        'Opera': '#cc0f16',\n\t        'Path': '#e41f11',\n\t        'PayPal (dark)': '#1e477a',\n\t        'PayPal (light)': '#3b7bbf',\n\t        'Pinboard': '#0000e6',\n\t        'Pinterest': '#c8232c',\n\t        'PlayStation': '#665cbe',\n\t        'Pocket': '#ee4056',\n\t        'Prezi': '#318bff',\n\t        'Pusha': '#0f71b4',\n\t        'Quora': '#a82400',\n\t        'QUOTE.fm': '#66ceff',\n\t        'Rdio': '#008fd5',\n\t        'Readability': '#9c0000',\n\t        'Red Hat': '#cc0000',\n\t        'Resource': '#7eb400',\n\t        'Rockpack': '#0ba6ab',\n\t        'Roon': '#62b0d9',\n\t        'RSS': '#ee802f',\n\t        'Salesforce': '#1798c1',\n\t        'Samsung': '#0c4da2',\n\t        'Shopify': '#96bf48',\n\t        'Skype': '#00aff0',\n\t        'Snagajob': '#f47a20',\n\t        'Softonic': '#008ace',\n\t        'SoundCloud': '#ff7700',\n\t        'Space Box': '#f86960',\n\t        'Spotify': '#81b71a',\n\t        'Sprint': '#fee100',\n\t        'Squarespace': '#121212',\n\t        'StackOverflow': '#ef8236',\n\t        'Staples': '#cc0000',\n\t        'Status Chart': '#d7584f',\n\t        'Stripe': '#008cdd',\n\t        'StudyBlue': '#00afe1',\n\t        'StumbleUpon': '#f74425',\n\t        'T-Mobile': '#ea0a8e',\n\t        'Technorati': '#40a800',\n\t        'The Next Web': '#ef4423',\n\t        'Treehouse': '#5cb868',\n\t        'Trulia': '#5eab1f',\n\t        'Tumblr': '#34526f',\n\t        'Twitch.tv': '#6441a5',\n\t        'Twitter': '#00acee',\n\t        'TYPO3': '#ff8700',\n\t        'Ubuntu': '#dd4814',\n\t        'Ustream': '#3388ff',\n\t        'Verizon': '#ef1d1d',\n\t        'Vimeo': '#86c9ef',\n\t        'Vine': '#00a478',\n\t        'Virb': '#06afd8',\n\t        'Virgin Media': '#cc0000',\n\t        'Wooga': '#5b009c',\n\t        'WordPress (blue)': '#21759b',\n\t        'WordPress (orange)': '#d54e21',\n\t        'WordPress (grey)': '#464646',\n\t        'Wunderlist': '#2b88d9',\n\t        'XBOX': '#9bc848',\n\t        'XING': '#126567',\n\t        'Yahoo!': '#720e9e',\n\t        'Yandex': '#ffcc00',\n\t        'Yelp': '#c41200',\n\t        'YouTube': '#c4302b',\n\t        'Zalongo': '#5498dc',\n\t        'Zendesk': '#78a300',\n\t        'Zerply': '#9dcc7a',\n\t        'Zootool': '#5e8b1d'\n\t    },\n\t    _brandNames: function() {\n\t        var brands = [];\n\t        for (var b in this._brandColors) {\n\t            brands.push(b)\n\t        }\n\t        return brands\n\t    },\n\t    /*\n\t        生成一段随机的 Base64 图片编码。\n\n\t        https://github.com/imsky/holder\n\t        Holder renders image placeholders entirely on the client side.\n\n\t        dataImageHolder: function(size) {\n\t            return 'holder.js/' + size\n\t        },\n\t    */\n\t    dataImage: function(size, text) {\n\t        var canvas\n\t        if (typeof document !== 'undefined') {\n\t            canvas = document.createElement('canvas')\n\t        } else {\n\t            /*\n\t                https://github.com/Automattic/node-canvas\n\t                    npm install canvas --save\n\t                安装问题:\n\t                * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva\n\t                * https://github.com/Automattic/node-canvas/issues/415\n\t                * https://github.com/Automattic/node-canvas/wiki/_pages\n\n\t                PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。\n\t             */\n\t            var Canvas = module.require('canvas')\n\t            canvas = new Canvas()\n\t        }\n\n\t        var ctx = canvas && canvas.getContext && canvas.getContext(\"2d\")\n\t        if (!canvas || !ctx) return ''\n\n\t        if (!size) size = this.pick(this._adSize)\n\t        text = text !== undefined ? text : size\n\n\t        size = size.split('x')\n\n\t        var width = parseInt(size[0], 10),\n\t            height = parseInt(size[1], 10),\n\t            background = this._brandColors[this.pick(this._brandNames())],\n\t            foreground = '#FFF',\n\t            text_height = 14,\n\t            font = 'sans-serif';\n\n\t        canvas.width = width\n\t        canvas.height = height\n\t        ctx.textAlign = 'center'\n\t        ctx.textBaseline = 'middle'\n\t        ctx.fillStyle = background\n\t        ctx.fillRect(0, 0, width, height)\n\t        ctx.fillStyle = foreground\n\t        ctx.font = 'bold ' + text_height + 'px ' + font\n\t        ctx.fillText(text, (width / 2), (height / 2), width)\n\t        return canvas.toDataURL('image/png')\n\t    }\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Color\n\n\t    http://llllll.li/randomColor/\n\t        A color generator for JavaScript.\n\t        randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art.\n\n\t    http://randomcolour.com/\n\t        var bg_colour = Math.floor(Math.random() * 16777215).toString(16);\n\t        bg_colour = \"#\" + (\"000000\" + bg_colour).slice(-6);\n\t        document.bgColor = bg_colour;\n\t    \n\t    http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t        Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult.\n\t        https://github.com/devongovett/color-generator\n\n\t    http://www.paulirish.com/2009/random-hex-color-code-snippets/\n\t        Random Hex Color Code Generator in JavaScript\n\n\t    http://chancejs.com/#color\n\t        chance.color()\n\t        // => '#79c157'\n\t        chance.color({format: 'hex'})\n\t        // => '#d67118'\n\t        chance.color({format: 'shorthex'})\n\t        // => '#60f'\n\t        chance.color({format: 'rgb'})\n\t        // => 'rgb(110,52,164)'\n\n\t    http://tool.c7sky.com/webcolor\n\t        网页设计常用色彩搭配表\n\t    \n\t    https://github.com/One-com/one-color\n\t        An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels.\n\t        API 很赞\n\n\t    https://github.com/harthur/color\n\t        JavaScript color conversion and manipulation library\n\n\t    https://github.com/leaverou/css-colors\n\t        Share & convert CSS colors\n\t    http://leaverou.github.io/css-colors/#slategray\n\t        Type a CSS color keyword, #hex, hsl(), rgba(), whatever:\n\n\t    色调 hue\n\t        http://baike.baidu.com/view/23368.htm\n\t        色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。\n\t    饱和度 saturation\n\t        http://baike.baidu.com/view/189644.htm\n\t        饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。\n\t    亮度 brightness\n\t        http://baike.baidu.com/view/34773.htm\n\t        亮度是指发光体(反光体)表面发光(反光)强弱的物理量。\n\t    照度 luminosity\n\t        物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。\n\n\t    http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript\n\t        var letters = '0123456789ABCDEF'.split('')\n\t        var color = '#'\n\t        for (var i = 0; i < 6; i++) {\n\t            color += letters[Math.floor(Math.random() * 16)]\n\t        }\n\t        return color\n\t    \n\t        // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。\n\t        // _brainlessColor()\n\t        var color = Math.floor(\n\t            Math.random() *\n\t            (16 * 16 * 16 * 16 * 16 * 16 - 1)\n\t        ).toString(16)\n\t        color = \"#\" + (\"000000\" + color).slice(-6)\n\t        return color.toUpperCase()\n\t*/\n\n\tvar Convert = __webpack_require__(11)\n\tvar DICT = __webpack_require__(12)\n\n\tmodule.exports = {\n\t    // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。\n\t    color: function(name) {\n\t        if (name || DICT[name]) return DICT[name].nicer\n\t        return this.hex()\n\t    },\n\t    // #DAC0DE\n\t    hex: function() {\n\t        var hsv = this._goldenRatioColor()\n\t        var rgb = Convert.hsv2rgb(hsv)\n\t        var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2])\n\t        return hex\n\t    },\n\t    // rgb(128,255,255)\n\t    rgb: function() {\n\t        var hsv = this._goldenRatioColor()\n\t        var rgb = Convert.hsv2rgb(hsv)\n\t        return 'rgb(' +\n\t            parseInt(rgb[0], 10) + ', ' +\n\t            parseInt(rgb[1], 10) + ', ' +\n\t            parseInt(rgb[2], 10) + ')'\n\t    },\n\t    // rgba(128,255,255,0.3)\n\t    rgba: function() {\n\t        var hsv = this._goldenRatioColor()\n\t        var rgb = Convert.hsv2rgb(hsv)\n\t        return 'rgba(' +\n\t            parseInt(rgb[0], 10) + ', ' +\n\t            parseInt(rgb[1], 10) + ', ' +\n\t            parseInt(rgb[2], 10) + ', ' +\n\t            Math.random().toFixed(2) + ')'\n\t    },\n\t    // hsl(300,80%,90%)\n\t    hsl: function() {\n\t        var hsv = this._goldenRatioColor()\n\t        var hsl = Convert.hsv2hsl(hsv)\n\t        return 'hsl(' +\n\t            parseInt(hsl[0], 10) + ', ' +\n\t            parseInt(hsl[1], 10) + ', ' +\n\t            parseInt(hsl[2], 10) + ')'\n\t    },\n\t    // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t    // https://github.com/devongovett/color-generator/blob/master/index.js\n\t    // 随机生成一个有吸引力的颜色。\n\t    _goldenRatioColor: function(saturation, value) {\n\t        this._goldenRatio = 0.618033988749895\n\t        this._hue = this._hue || Math.random()\n\t        this._hue += this._goldenRatio\n\t        this._hue %= 1\n\n\t        if (typeof saturation !== \"number\") saturation = 0.5;\n\t        if (typeof value !== \"number\") value = 0.95;\n\n\t        return [\n\t            this._hue * 360,\n\t            saturation * 100,\n\t            value * 100\n\t        ]\n\t    }\n\t}\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Color Convert\n\n\t    http://blog.csdn.net/idfaya/article/details/6770414\n\t        颜色空间RGB与HSV(HSL)的转换\n\t*/\n\t// https://github.com/harthur/color-convert/blob/master/conversions.js\n\tmodule.exports = {\n\t\trgb2hsl: function rgb2hsl(rgb) {\n\t\t\tvar r = rgb[0] / 255,\n\t\t\t\tg = rgb[1] / 255,\n\t\t\t\tb = rgb[2] / 255,\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, l;\n\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\n\t\t\th = Math.min(h * 60, 360);\n\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\n\t\t\tl = (min + max) / 2;\n\n\t\t\tif (max == min)\n\t\t\t\ts = 0;\n\t\t\telse if (l <= 0.5)\n\t\t\t\ts = delta / (max + min);\n\t\t\telse\n\t\t\t\ts = delta / (2 - max - min);\n\n\t\t\treturn [h, s * 100, l * 100];\n\t\t},\n\t\trgb2hsv: function rgb2hsv(rgb) {\n\t\t\tvar r = rgb[0],\n\t\t\t\tg = rgb[1],\n\t\t\t\tb = rgb[2],\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, v;\n\n\t\t\tif (max === 0)\n\t\t\t\ts = 0;\n\t\t\telse\n\t\t\t\ts = (delta / max * 1000) / 10;\n\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\n\t\t\th = Math.min(h * 60, 360);\n\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\n\t\t\tv = ((max / 255) * 1000) / 10;\n\n\t\t\treturn [h, s, v];\n\t\t},\n\t\thsl2rgb: function hsl2rgb(hsl) {\n\t\t\tvar h = hsl[0] / 360,\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tt1, t2, t3, rgb, val;\n\n\t\t\tif (s === 0) {\n\t\t\t\tval = l * 255;\n\t\t\t\treturn [val, val, val];\n\t\t\t}\n\n\t\t\tif (l < 0.5)\n\t\t\t\tt2 = l * (1 + s);\n\t\t\telse\n\t\t\t\tt2 = l + s - l * s;\n\t\t\tt1 = 2 * l - t2;\n\n\t\t\trgb = [0, 0, 0];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\t\t\tif (t3 < 0) t3++;\n\t\t\t\tif (t3 > 1) t3--;\n\n\t\t\t\tif (6 * t3 < 1)\n\t\t\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t\t\telse if (2 * t3 < 1)\n\t\t\t\t\tval = t2;\n\t\t\t\telse if (3 * t3 < 2)\n\t\t\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t\t\telse\n\t\t\t\t\tval = t1;\n\n\t\t\t\trgb[i] = val * 255;\n\t\t\t}\n\n\t\t\treturn rgb;\n\t\t},\n\t\thsl2hsv: function hsl2hsv(hsl) {\n\t\t\tvar h = hsl[0],\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tsv, v;\n\t\t\tl *= 2;\n\t\t\ts *= (l <= 1) ? l : 2 - l;\n\t\t\tv = (l + s) / 2;\n\t\t\tsv = (2 * s) / (l + s);\n\t\t\treturn [h, sv * 100, v * 100];\n\t\t},\n\t\thsv2rgb: function hsv2rgb(hsv) {\n\t\t\tvar h = hsv[0] / 60\n\t\t\tvar s = hsv[1] / 100\n\t\t\tvar v = hsv[2] / 100\n\t\t\tvar hi = Math.floor(h) % 6\n\n\t\t\tvar f = h - Math.floor(h)\n\t\t\tvar p = 255 * v * (1 - s)\n\t\t\tvar q = 255 * v * (1 - (s * f))\n\t\t\tvar t = 255 * v * (1 - (s * (1 - f)))\n\n\t\t\tv = 255 * v\n\n\t\t\tswitch (hi) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn [v, t, p]\n\t\t\t\tcase 1:\n\t\t\t\t\treturn [q, v, p]\n\t\t\t\tcase 2:\n\t\t\t\t\treturn [p, v, t]\n\t\t\t\tcase 3:\n\t\t\t\t\treturn [p, q, v]\n\t\t\t\tcase 4:\n\t\t\t\t\treturn [t, p, v]\n\t\t\t\tcase 5:\n\t\t\t\t\treturn [v, p, q]\n\t\t\t}\n\t\t},\n\t\thsv2hsl: function hsv2hsl(hsv) {\n\t\t\tvar h = hsv[0],\n\t\t\t\ts = hsv[1] / 100,\n\t\t\t\tv = hsv[2] / 100,\n\t\t\t\tsl, l;\n\n\t\t\tl = (2 - s) * v;\n\t\t\tsl = s * v;\n\t\t\tsl /= (l <= 1) ? l : 2 - l;\n\t\t\tl /= 2;\n\t\t\treturn [h, sl * 100, l * 100];\n\t\t},\n\t\t// http://www.140byt.es/keywords/color\n\t\trgb2hex: function(\n\t\t\ta, // red, as a number from 0 to 255\n\t\t\tb, // green, as a number from 0 to 255\n\t\t\tc // blue, as a number from 0 to 255\n\t\t) {\n\t\t\treturn \"#\" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1)\n\t\t},\n\t\thex2rgb: function(\n\t\t\ta // take a \"#xxxxxx\" hex string,\n\t\t) {\n\t\t\ta = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0;\n\t\t\treturn [a >> 16, a >> 8 & 255, a & 255]\n\t\t}\n\t}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Color 字典数据\n\n\t    字典数据来源 [A nicer color palette for the web](http://clrs.cc/)\n\t*/\n\tmodule.exports = {\n\t    // name value nicer\n\t    navy: {\n\t        value: '#000080',\n\t        nicer: '#001F3F'\n\t    },\n\t    blue: {\n\t        value: '#0000ff',\n\t        nicer: '#0074D9'\n\t    },\n\t    aqua: {\n\t        value: '#00ffff',\n\t        nicer: '#7FDBFF'\n\t    },\n\t    teal: {\n\t        value: '#008080',\n\t        nicer: '#39CCCC'\n\t    },\n\t    olive: {\n\t        value: '#008000',\n\t        nicer: '#3D9970'\n\t    },\n\t    green: {\n\t        value: '#008000',\n\t        nicer: '#2ECC40'\n\t    },\n\t    lime: {\n\t        value: '#00ff00',\n\t        nicer: '#01FF70'\n\t    },\n\t    yellow: {\n\t        value: '#ffff00',\n\t        nicer: '#FFDC00'\n\t    },\n\t    orange: {\n\t        value: '#ffa500',\n\t        nicer: '#FF851B'\n\t    },\n\t    red: {\n\t        value: '#ff0000',\n\t        nicer: '#FF4136'\n\t    },\n\t    maroon: {\n\t        value: '#800000',\n\t        nicer: '#85144B'\n\t    },\n\t    fuchsia: {\n\t        value: '#ff00ff',\n\t        nicer: '#F012BE'\n\t    },\n\t    purple: {\n\t        value: '#800080',\n\t        nicer: '#B10DC9'\n\t    },\n\t    silver: {\n\t        value: '#c0c0c0',\n\t        nicer: '#DDDDDD'\n\t    },\n\t    gray: {\n\t        value: '#808080',\n\t        nicer: '#AAAAAA'\n\t    },\n\t    black: {\n\t        value: '#000000',\n\t        nicer: '#111111'\n\t    },\n\t    white: {\n\t        value: '#FFFFFF',\n\t        nicer: '#FFFFFF'\n\t    }\n\t}\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Text\n\n\t    http://www.lipsum.com/\n\t*/\n\tvar Basic = __webpack_require__(6)\n\tvar Helper = __webpack_require__(14)\n\n\tfunction range(defaultMin, defaultMax, min, max) {\n\t    return min === undefined ? Basic.natural(defaultMin, defaultMax) : // ()\n\t        max === undefined ? min : // ( len )\n\t        Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max )\n\t}\n\n\tmodule.exports = {\n\t    // 随机生成一段文本。\n\t    paragraph: function(min, max) {\n\t        var len = range(3, 7, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.sentence())\n\t        }\n\t        return result.join(' ')\n\t    },\n\t    // \n\t    cparagraph: function(min, max) {\n\t        var len = range(3, 7, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.csentence())\n\t        }\n\t        return result.join('')\n\t    },\n\t    // 随机生成一个句子,第一个单词的首字母大写。\n\t    sentence: function(min, max) {\n\t        var len = range(12, 18, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.word())\n\t        }\n\t        return Helper.capitalize(result.join(' ')) + '.'\n\t    },\n\t    // 随机生成一个中文句子。\n\t    csentence: function(min, max) {\n\t        var len = range(12, 18, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.cword())\n\t        }\n\n\t        return result.join('') + '。'\n\t    },\n\t    // 随机生成一个单词。\n\t    word: function(min, max) {\n\t        var len = range(3, 10, min, max)\n\t        var result = '';\n\t        for (var i = 0; i < len; i++) {\n\t            result += Basic.character('lower')\n\t        }\n\t        return result\n\t    },\n\t    // 随机生成一个或多个汉字。\n\t    cword: function(pool, min, max) {\n\t        // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm\n\t        var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'\n\n\t        var len\n\t        switch (arguments.length) {\n\t            case 0: // ()\n\t                pool = DICT_KANZI\n\t                len = 1\n\t                break\n\t            case 1: // ( pool )\n\t                if (typeof arguments[0] === 'string') {\n\t                    len = 1\n\t                } else {\n\t                    // ( length )\n\t                    len = pool\n\t                    pool = DICT_KANZI\n\t                }\n\t                break\n\t            case 2:\n\t                // ( pool, length )\n\t                if (typeof arguments[0] === 'string') {\n\t                    len = min\n\t                } else {\n\t                    // ( min, max )\n\t                    len = this.natural(pool, min)\n\t                    pool = DICT_KANZI\n\t                }\n\t                break\n\t            case 3:\n\t                len = this.natural(min, max)\n\t                break\n\t        }\n\n\t        var result = ''\n\t        for (var i = 0; i < len; i++) {\n\t            result += pool.charAt(this.natural(0, pool.length - 1))\n\t        }\n\t        return result\n\t    },\n\t    // 随机生成一句标题,其中每个单词的首字母大写。\n\t    title: function(min, max) {\n\t        var len = range(3, 7, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.capitalize(this.word()))\n\t        }\n\t        return result.join(' ')\n\t    },\n\t    // 随机生成一句中文标题。\n\t    ctitle: function(min, max) {\n\t        var len = range(3, 7, min, max)\n\t        var result = []\n\t        for (var i = 0; i < len; i++) {\n\t            result.push(this.cword())\n\t        }\n\t        return result.join('')\n\t    }\n\t}\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Helpers\n\t*/\n\n\tvar Util = __webpack_require__(3)\n\n\tmodule.exports = {\n\t\t// 把字符串的第一个字母转换为大写。\n\t\tcapitalize: function(word) {\n\t\t\treturn (word + '').charAt(0).toUpperCase() + (word + '').substr(1)\n\t\t},\n\t\t// 把字符串转换为大写。\n\t\tupper: function(str) {\n\t\t\treturn (str + '').toUpperCase()\n\t\t},\n\t\t// 把字符串转换为小写。\n\t\tlower: function(str) {\n\t\t\treturn (str + '').toLowerCase()\n\t\t},\n\t\t// 从数组中随机选取一个元素,并返回。\n\t\tpick: function pick(arr, min, max) {\n\t\t\t// pick( item1, item2 ... )\n\t\t\tif (!Util.isArray(arr)) {\n\t\t\t\tarr = [].slice.call(arguments)\n\t\t\t\tmin = 1\n\t\t\t\tmax = 1\n\t\t\t} else {\n\t\t\t\t// pick( [ item1, item2 ... ] )\n\t\t\t\tif (min === undefined) min = 1\n\n\t\t\t\t// pick( [ item1, item2 ... ], count )\n\t\t\t\tif (max === undefined) max = min\n\t\t\t}\n\n\t\t\tif (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]\n\n\t\t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\treturn this.shuffle(arr, min, max)\n\n\t\t\t// 通过参数个数判断方法签名,扩展性太差!#90\n\t\t\t// switch (arguments.length) {\n\t\t\t// \tcase 1:\n\t\t\t// \t\t// pick( [ item1, item2 ... ] )\n\t\t\t// \t\treturn arr[this.natural(0, arr.length - 1)]\n\t\t\t// \tcase 2:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], count )\n\t\t\t// \t\tmax = min\n\t\t\t// \t\t\t/* falls through */\n\t\t\t// \tcase 3:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\t// \t\treturn this.shuffle(arr, min, max)\n\t\t\t// }\n\t\t},\n\t\t/*\n\t\t    打乱数组中元素的顺序,并返回。\n\t\t    Given an array, scramble the order and return it.\n\n\t\t    其他的实现思路:\n\t\t        // https://code.google.com/p/jslibs/wiki/JavascriptTips\n\t\t        result = result.sort(function() {\n\t\t            return Math.random() - 0.5\n\t\t        })\n\t\t*/\n\t\tshuffle: function shuffle(arr, min, max) {\n\t\t\tarr = arr || []\n\t\t\tvar old = arr.slice(0),\n\t\t\t\tresult = [],\n\t\t\t\tindex = 0,\n\t\t\t\tlength = old.length;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tindex = this.natural(0, old.length - 1)\n\t\t\t\tresult.push(old[index])\n\t\t\t\told.splice(index, 1)\n\t\t\t}\n\t\t\tswitch (arguments.length) {\n\t\t\t\tcase 0:\n\t\t\t\tcase 1:\n\t\t\t\t\treturn result\n\t\t\t\tcase 2:\n\t\t\t\t\tmax = min\n\t\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tmin = parseInt(min, 10)\n\t\t\t\t\tmax = parseInt(max, 10)\n\t\t\t\t\treturn result.slice(0, this.natural(min, max))\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t    * Random.order(item, item)\n\t\t    * Random.order([item, item ...])\n\n\t\t    顺序获取数组中的元素\n\n\t\t    [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)\n\n\t\t    不支持单独调用!\n\t\t*/\n\t\torder: function order(array) {\n\t\t\torder.cache = order.cache || {}\n\n\t\t\tif (arguments.length > 1) array = [].slice.call(arguments, 0)\n\n\t\t\t// options.context.path/templatePath\n\t\t\tvar options = order.options\n\t\t\tvar templatePath = options.context.templatePath.join('.')\n\n\t\t\tvar cache = (\n\t\t\t\torder.cache[templatePath] = order.cache[templatePath] || {\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tarray: array\n\t\t\t\t}\n\t\t\t)\n\n\t\t\treturn cache.array[cache.index++ % cache.array.length]\n\t\t}\n\t}\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Name\n\n\t    [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html)\n\t*/\n\tmodule.exports = {\n\t\t// 随机生成一个常见的英文名。\n\t\tfirst: function() {\n\t\t\tvar names = [\n\t\t\t\t// male\n\t\t\t\t\"James\", \"John\", \"Robert\", \"Michael\", \"William\",\n\t\t\t\t\"David\", \"Richard\", \"Charles\", \"Joseph\", \"Thomas\",\n\t\t\t\t\"Christopher\", \"Daniel\", \"Paul\", \"Mark\", \"Donald\",\n\t\t\t\t\"George\", \"Kenneth\", \"Steven\", \"Edward\", \"Brian\",\n\t\t\t\t\"Ronald\", \"Anthony\", \"Kevin\", \"Jason\", \"Matthew\",\n\t\t\t\t\"Gary\", \"Timothy\", \"Jose\", \"Larry\", \"Jeffrey\",\n\t\t\t\t\"Frank\", \"Scott\", \"Eric\"\n\t\t\t].concat([\n\t\t\t\t// female\n\t\t\t\t\"Mary\", \"Patricia\", \"Linda\", \"Barbara\", \"Elizabeth\",\n\t\t\t\t\"Jennifer\", \"Maria\", \"Susan\", \"Margaret\", \"Dorothy\",\n\t\t\t\t\"Lisa\", \"Nancy\", \"Karen\", \"Betty\", \"Helen\",\n\t\t\t\t\"Sandra\", \"Donna\", \"Carol\", \"Ruth\", \"Sharon\",\n\t\t\t\t\"Michelle\", \"Laura\", \"Sarah\", \"Kimberly\", \"Deborah\",\n\t\t\t\t\"Jessica\", \"Shirley\", \"Cynthia\", \"Angela\", \"Melissa\",\n\t\t\t\t\"Brenda\", \"Amy\", \"Anna\"\n\t\t\t])\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓。\n\t\tlast: function() {\n\t\t\tvar names = [\n\t\t\t\t\"Smith\", \"Johnson\", \"Williams\", \"Brown\", \"Jones\",\n\t\t\t\t\"Miller\", \"Davis\", \"Garcia\", \"Rodriguez\", \"Wilson\",\n\t\t\t\t\"Martinez\", \"Anderson\", \"Taylor\", \"Thomas\", \"Hernandez\",\n\t\t\t\t\"Moore\", \"Martin\", \"Jackson\", \"Thompson\", \"White\",\n\t\t\t\t\"Lopez\", \"Lee\", \"Gonzalez\", \"Harris\", \"Clark\",\n\t\t\t\t\"Lewis\", \"Robinson\", \"Walker\", \"Perez\", \"Hall\",\n\t\t\t\t\"Young\", \"Allen\"\n\t\t\t]\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓名。\n\t\tname: function(middle) {\n\t\t\treturn this.first() + ' ' +\n\t\t\t\t(middle ? this.first() + ' ' : '') +\n\t\t\t\tthis.last()\n\t\t},\n\t\t/*\n\t\t    随机生成一个常见的中文姓。\n\t\t    [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm)\n\t\t    [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/)\n\t\t */\n\t\tcfirst: function() {\n\t\t\tvar names = (\n\t\t\t\t'王 李 张 刘 陈 杨 赵 黄 周 吴 ' +\n\t\t\t\t'徐 孙 胡 朱 高 林 何 郭 马 罗 ' +\n\t\t\t\t'梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' +\n\t\t\t\t'程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' +\n\t\t\t\t'苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' +\n\t\t\t\t'余 潘 杜 戴 夏 锺 汪 田 任 姜 ' +\n\t\t\t\t'范 方 石 姚 谭 廖 邹 熊 金 陆 ' +\n\t\t\t\t'郝 孔 白 崔 康 毛 邱 秦 江 史 ' +\n\t\t\t\t'顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' +\n\t\t\t\t'尹 黎 易 常 武 乔 贺 赖 龚 文'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t/*\n\t\t    随机生成一个常见的中文名。\n\t\t    [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html)\n\t\t */\n\t\tclast: function() {\n\t\t\tvar names = (\n\t\t\t\t'伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' +\n\t\t\t\t'洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' +\n\t\t\t\t'平 刚 桂英'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t// 随机生成一个常见的中文姓名。\n\t\tcname: function() {\n\t\t\treturn this.cfirst() + this.clast()\n\t\t}\n\t}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Web\n\t*/\n\tmodule.exports = {\n\t    /*\n\t        随机生成一个 URL。\n\n\t        [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt)\n\t            http                    Hypertext Transfer Protocol \n\t            ftp                     File Transfer protocol \n\t            gopher                  The Gopher protocol \n\t            mailto                  Electronic mail address \n\t            mid                     Message identifiers for electronic mail \n\t            cid                     Content identifiers for MIME body part \n\t            news                    Usenet news \n\t            nntp                    Usenet news for local NNTP access only \n\t            prospero                Access using the prospero protocols \n\t            telnet rlogin tn3270    Reference to interactive sessions\n\t            wais                    Wide Area Information Servers \n\t    */\n\t    url: function(protocol, host) {\n\t        return (protocol || this.protocol()) + '://' + // protocol?\n\t            (host || this.domain()) + // host?\n\t            '/' + this.word()\n\t    },\n\t    // 随机生成一个 URL 协议。\n\t    protocol: function() {\n\t        return this.pick(\n\t            // 协议簇\n\t            'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ')\n\t        )\n\t    },\n\t    // 随机生成一个域名。\n\t    domain: function(tld) {\n\t        return this.word() + '.' + (tld || this.tld())\n\t    },\n\t    /*\n\t        随机生成一个顶级域名。\n\t        国际顶级域名 international top-level domain-names, iTLDs\n\t        国家顶级域名 national top-level domainnames, nTLDs\n\t        [域名后缀大全](http://www.163ns.com/zixun/post/4417.html)\n\t    */\n\t    tld: function() { // Top Level Domain\n\t        return this.pick(\n\t            (\n\t                // 域名后缀\n\t                'com net org edu gov int mil cn ' +\n\t                // 国内域名\n\t                'com.cn net.cn gov.cn org.cn ' +\n\t                // 中文国内域名\n\t                '中国 中国互联.公司 中国互联.网络 ' +\n\t                // 新国际域名\n\t                'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' +\n\t                // 世界各国域名后缀\n\t                'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw'\n\t            ).split(' ')\n\t        )\n\t    },\n\t    // 随机生成一个邮件地址。\n\t    email: function(domain) {\n\t        return this.character('lower') + '.' + this.word() + '@' +\n\t            (\n\t                domain ||\n\t                (this.word() + '.' + this.tld())\n\t            )\n\t            // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld()\n\t            // return this.word() + '@' + (domain || this.domain())\n\t    },\n\t    // 随机生成一个 IP 地址。\n\t    ip: function() {\n\t        return this.natural(0, 255) + '.' +\n\t            this.natural(0, 255) + '.' +\n\t            this.natural(0, 255) + '.' +\n\t            this.natural(0, 255)\n\t    }\n\t}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Address\n\t*/\n\n\tvar DICT = __webpack_require__(18)\n\tvar REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']\n\n\tmodule.exports = {\n\t    // 随机生成一个大区。\n\t    region: function() {\n\t        return this.pick(REGION)\n\t    },\n\t    // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。\n\t    province: function() {\n\t        return this.pick(DICT).name\n\t    },\n\t    // 随机生成一个(中国)市。\n\t    city: function(prefix) {\n\t        var province = this.pick(DICT)\n\t        var city = this.pick(province.children)\n\t        return prefix ? [province.name, city.name].join(' ') : city.name\n\t    },\n\t    // 随机生成一个(中国)县。\n\t    county: function(prefix) {\n\t        var province = this.pick(DICT)\n\t        var city = this.pick(province.children)\n\t        var county = this.pick(city.children) || {\n\t            name: '-'\n\t        }\n\t        return prefix ? [province.name, city.name, county.name].join(' ') : county.name\n\t    },\n\t    // 随机生成一个邮政编码(六位数字)。\n\t    zip: function(len) {\n\t        var zip = ''\n\t        for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9)\n\t        return zip\n\t    }\n\n\t    // address: function() {},\n\t    // phone: function() {},\n\t    // areacode: function() {},\n\t    // street: function() {},\n\t    // street_suffixes: function() {},\n\t    // street_suffix: function() {},\n\t    // states: function() {},\n\t    // state: function() {},\n\t}\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t/*\n\t    ## Address 字典数据\n\n\t    字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856\n\n\t    国标 省(市)级行政区划码表\n\n\t    华北   北京市 天津市 河北省 山西省 内蒙古自治区\n\t    东北   辽宁省 吉林省 黑龙江省\n\t    华东   上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省\n\t    华南   广东省 广西壮族自治区 海南省\n\t    华中   河南省 湖北省 湖南省\n\t    西南   重庆市 四川省 贵州省 云南省 西藏自治区\n\t    西北   陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区\n\t    港澳台 香港特别行政区 澳门特别行政区 台湾省\n\t    \n\t    **排序**\n\t    \n\t    ```js\n\t    var map = {}\n\t    _.each(_.keys(REGIONS),function(id){\n\t      map[id] = REGIONS[ID]\n\t    })\n\t    JSON.stringify(map)\n\t    ```\n\t*/\n\tvar DICT = {\n\t    \"110000\": \"北京\",\n\t    \"110100\": \"北京市\",\n\t    \"110101\": \"东城区\",\n\t    \"110102\": \"西城区\",\n\t    \"110105\": \"朝阳区\",\n\t    \"110106\": \"丰台区\",\n\t    \"110107\": \"石景山区\",\n\t    \"110108\": \"海淀区\",\n\t    \"110109\": \"门头沟区\",\n\t    \"110111\": \"房山区\",\n\t    \"110112\": \"通州区\",\n\t    \"110113\": \"顺义区\",\n\t    \"110114\": \"昌平区\",\n\t    \"110115\": \"大兴区\",\n\t    \"110116\": \"怀柔区\",\n\t    \"110117\": \"平谷区\",\n\t    \"110228\": \"密云县\",\n\t    \"110229\": \"延庆县\",\n\t    \"110230\": \"其它区\",\n\t    \"120000\": \"天津\",\n\t    \"120100\": \"天津市\",\n\t    \"120101\": \"和平区\",\n\t    \"120102\": \"河东区\",\n\t    \"120103\": \"河西区\",\n\t    \"120104\": \"南开区\",\n\t    \"120105\": \"河北区\",\n\t    \"120106\": \"红桥区\",\n\t    \"120110\": \"东丽区\",\n\t    \"120111\": \"西青区\",\n\t    \"120112\": \"津南区\",\n\t    \"120113\": \"北辰区\",\n\t    \"120114\": \"武清区\",\n\t    \"120115\": \"宝坻区\",\n\t    \"120116\": \"滨海新区\",\n\t    \"120221\": \"宁河县\",\n\t    \"120223\": \"静海县\",\n\t    \"120225\": \"蓟县\",\n\t    \"120226\": \"其它区\",\n\t    \"130000\": \"河北省\",\n\t    \"130100\": \"石家庄市\",\n\t    \"130102\": \"长安区\",\n\t    \"130103\": \"桥东区\",\n\t    \"130104\": \"桥西区\",\n\t    \"130105\": \"新华区\",\n\t    \"130107\": \"井陉矿区\",\n\t    \"130108\": \"裕华区\",\n\t    \"130121\": \"井陉县\",\n\t    \"130123\": \"正定县\",\n\t    \"130124\": \"栾城县\",\n\t    \"130125\": \"行唐县\",\n\t    \"130126\": \"灵寿县\",\n\t    \"130127\": \"高邑县\",\n\t    \"130128\": \"深泽县\",\n\t    \"130129\": \"赞皇县\",\n\t    \"130130\": \"无极县\",\n\t    \"130131\": \"平山县\",\n\t    \"130132\": \"元氏县\",\n\t    \"130133\": \"赵县\",\n\t    \"130181\": \"辛集市\",\n\t    \"130182\": \"藁城市\",\n\t    \"130183\": \"晋州市\",\n\t    \"130184\": \"新乐市\",\n\t    \"130185\": \"鹿泉市\",\n\t    \"130186\": \"其它区\",\n\t    \"130200\": \"唐山市\",\n\t    \"130202\": \"路南区\",\n\t    \"130203\": \"路北区\",\n\t    \"130204\": \"古冶区\",\n\t    \"130205\": \"开平区\",\n\t    \"130207\": \"丰南区\",\n\t    \"130208\": \"丰润区\",\n\t    \"130223\": \"滦县\",\n\t    \"130224\": \"滦南县\",\n\t    \"130225\": \"乐亭县\",\n\t    \"130227\": \"迁西县\",\n\t    \"130229\": \"玉田县\",\n\t    \"130230\": \"曹妃甸区\",\n\t    \"130281\": \"遵化市\",\n\t    \"130283\": \"迁安市\",\n\t    \"130284\": \"其它区\",\n\t    \"130300\": \"秦皇岛市\",\n\t    \"130302\": \"海港区\",\n\t    \"130303\": \"山海关区\",\n\t    \"130304\": \"北戴河区\",\n\t    \"130321\": \"青龙满族自治县\",\n\t    \"130322\": \"昌黎县\",\n\t    \"130323\": \"抚宁县\",\n\t    \"130324\": \"卢龙县\",\n\t    \"130398\": \"其它区\",\n\t    \"130400\": \"邯郸市\",\n\t    \"130402\": \"邯山区\",\n\t    \"130403\": \"丛台区\",\n\t    \"130404\": \"复兴区\",\n\t    \"130406\": \"峰峰矿区\",\n\t    \"130421\": \"邯郸县\",\n\t    \"130423\": \"临漳县\",\n\t    \"130424\": \"成安县\",\n\t    \"130425\": \"大名县\",\n\t    \"130426\": \"涉县\",\n\t    \"130427\": \"磁县\",\n\t    \"130428\": \"肥乡县\",\n\t    \"130429\": \"永年县\",\n\t    \"130430\": \"邱县\",\n\t    \"130431\": \"鸡泽县\",\n\t    \"130432\": \"广平县\",\n\t    \"130433\": \"馆陶县\",\n\t    \"130434\": \"魏县\",\n\t    \"130435\": \"曲周县\",\n\t    \"130481\": \"武安市\",\n\t    \"130482\": \"其它区\",\n\t    \"130500\": \"邢台市\",\n\t    \"130502\": \"桥东区\",\n\t    \"130503\": \"桥西区\",\n\t    \"130521\": \"邢台县\",\n\t    \"130522\": \"临城县\",\n\t    \"130523\": \"内丘县\",\n\t    \"130524\": \"柏乡县\",\n\t    \"130525\": \"隆尧县\",\n\t    \"130526\": \"任县\",\n\t    \"130527\": \"南和县\",\n\t    \"130528\": \"宁晋县\",\n\t    \"130529\": \"巨鹿县\",\n\t    \"130530\": \"新河县\",\n\t    \"130531\": \"广宗县\",\n\t    \"130532\": \"平乡县\",\n\t    \"130533\": \"威县\",\n\t    \"130534\": \"清河县\",\n\t    \"130535\": \"临西县\",\n\t    \"130581\": \"南宫市\",\n\t    \"130582\": \"沙河市\",\n\t    \"130583\": \"其它区\",\n\t    \"130600\": \"保定市\",\n\t    \"130602\": \"新市区\",\n\t    \"130603\": \"北市区\",\n\t    \"130604\": \"南市区\",\n\t    \"130621\": \"满城县\",\n\t    \"130622\": \"清苑县\",\n\t    \"130623\": \"涞水县\",\n\t    \"130624\": \"阜平县\",\n\t    \"130625\": \"徐水县\",\n\t    \"130626\": \"定兴县\",\n\t    \"130627\": \"唐县\",\n\t    \"130628\": \"高阳县\",\n\t    \"130629\": \"容城县\",\n\t    \"130630\": \"涞源县\",\n\t    \"130631\": \"望都县\",\n\t    \"130632\": \"安新县\",\n\t    \"130633\": \"易县\",\n\t    \"130634\": \"曲阳县\",\n\t    \"130635\": \"蠡县\",\n\t    \"130636\": \"顺平县\",\n\t    \"130637\": \"博野县\",\n\t    \"130638\": \"雄县\",\n\t    \"130681\": \"涿州市\",\n\t    \"130682\": \"定州市\",\n\t    \"130683\": \"安国市\",\n\t    \"130684\": \"高碑店市\",\n\t    \"130699\": \"其它区\",\n\t    \"130700\": \"张家口市\",\n\t    \"130702\": \"桥东区\",\n\t    \"130703\": \"桥西区\",\n\t    \"130705\": \"宣化区\",\n\t    \"130706\": \"下花园区\",\n\t    \"130721\": \"宣化县\",\n\t    \"130722\": \"张北县\",\n\t    \"130723\": \"康保县\",\n\t    \"130724\": \"沽源县\",\n\t    \"130725\": \"尚义县\",\n\t    \"130726\": \"蔚县\",\n\t    \"130727\": \"阳原县\",\n\t    \"130728\": \"怀安县\",\n\t    \"130729\": \"万全县\",\n\t    \"130730\": \"怀来县\",\n\t    \"130731\": \"涿鹿县\",\n\t    \"130732\": \"赤城县\",\n\t    \"130733\": \"崇礼县\",\n\t    \"130734\": \"其它区\",\n\t    \"130800\": \"承德市\",\n\t    \"130802\": \"双桥区\",\n\t    \"130803\": \"双滦区\",\n\t    \"130804\": \"鹰手营子矿区\",\n\t    \"130821\": \"承德县\",\n\t    \"130822\": \"兴隆县\",\n\t    \"130823\": \"平泉县\",\n\t    \"130824\": \"滦平县\",\n\t    \"130825\": \"隆化县\",\n\t    \"130826\": \"丰宁满族自治县\",\n\t    \"130827\": \"宽城满族自治县\",\n\t    \"130828\": \"围场满族蒙古族自治县\",\n\t    \"130829\": \"其它区\",\n\t    \"130900\": \"沧州市\",\n\t    \"130902\": \"新华区\",\n\t    \"130903\": \"运河区\",\n\t    \"130921\": \"沧县\",\n\t    \"130922\": \"青县\",\n\t    \"130923\": \"东光县\",\n\t    \"130924\": \"海兴县\",\n\t    \"130925\": \"盐山县\",\n\t    \"130926\": \"肃宁县\",\n\t    \"130927\": \"南皮县\",\n\t    \"130928\": \"吴桥县\",\n\t    \"130929\": \"献县\",\n\t    \"130930\": \"孟村回族自治县\",\n\t    \"130981\": \"泊头市\",\n\t    \"130982\": \"任丘市\",\n\t    \"130983\": \"黄骅市\",\n\t    \"130984\": \"河间市\",\n\t    \"130985\": \"其它区\",\n\t    \"131000\": \"廊坊市\",\n\t    \"131002\": \"安次区\",\n\t    \"131003\": \"广阳区\",\n\t    \"131022\": \"固安县\",\n\t    \"131023\": \"永清县\",\n\t    \"131024\": \"香河县\",\n\t    \"131025\": \"大城县\",\n\t    \"131026\": \"文安县\",\n\t    \"131028\": \"大厂回族自治县\",\n\t    \"131081\": \"霸州市\",\n\t    \"131082\": \"三河市\",\n\t    \"131083\": \"其它区\",\n\t    \"131100\": \"衡水市\",\n\t    \"131102\": \"桃城区\",\n\t    \"131121\": \"枣强县\",\n\t    \"131122\": \"武邑县\",\n\t    \"131123\": \"武强县\",\n\t    \"131124\": \"饶阳县\",\n\t    \"131125\": \"安平县\",\n\t    \"131126\": \"故城县\",\n\t    \"131127\": \"景县\",\n\t    \"131128\": \"阜城县\",\n\t    \"131181\": \"冀州市\",\n\t    \"131182\": \"深州市\",\n\t    \"131183\": \"其它区\",\n\t    \"140000\": \"山西省\",\n\t    \"140100\": \"太原市\",\n\t    \"140105\": \"小店区\",\n\t    \"140106\": \"迎泽区\",\n\t    \"140107\": \"杏花岭区\",\n\t    \"140108\": \"尖草坪区\",\n\t    \"140109\": \"万柏林区\",\n\t    \"140110\": \"晋源区\",\n\t    \"140121\": \"清徐县\",\n\t    \"140122\": \"阳曲县\",\n\t    \"140123\": \"娄烦县\",\n\t    \"140181\": \"古交市\",\n\t    \"140182\": \"其它区\",\n\t    \"140200\": \"大同市\",\n\t    \"140202\": \"城区\",\n\t    \"140203\": \"矿区\",\n\t    \"140211\": \"南郊区\",\n\t    \"140212\": \"新荣区\",\n\t    \"140221\": \"阳高县\",\n\t    \"140222\": \"天镇县\",\n\t    \"140223\": \"广灵县\",\n\t    \"140224\": \"灵丘县\",\n\t    \"140225\": \"浑源县\",\n\t    \"140226\": \"左云县\",\n\t    \"140227\": \"大同县\",\n\t    \"140228\": \"其它区\",\n\t    \"140300\": \"阳泉市\",\n\t    \"140302\": \"城区\",\n\t    \"140303\": \"矿区\",\n\t    \"140311\": \"郊区\",\n\t    \"140321\": \"平定县\",\n\t    \"140322\": \"盂县\",\n\t    \"140323\": \"其它区\",\n\t    \"140400\": \"长治市\",\n\t    \"140421\": \"长治县\",\n\t    \"140423\": \"襄垣县\",\n\t    \"140424\": \"屯留县\",\n\t    \"140425\": \"平顺县\",\n\t    \"140426\": \"黎城县\",\n\t    \"140427\": \"壶关县\",\n\t    \"140428\": \"长子县\",\n\t    \"140429\": \"武乡县\",\n\t    \"140430\": \"沁县\",\n\t    \"140431\": \"沁源县\",\n\t    \"140481\": \"潞城市\",\n\t    \"140482\": \"城区\",\n\t    \"140483\": \"郊区\",\n\t    \"140485\": \"其它区\",\n\t    \"140500\": \"晋城市\",\n\t    \"140502\": \"城区\",\n\t    \"140521\": \"沁水县\",\n\t    \"140522\": \"阳城县\",\n\t    \"140524\": \"陵川县\",\n\t    \"140525\": \"泽州县\",\n\t    \"140581\": \"高平市\",\n\t    \"140582\": \"其它区\",\n\t    \"140600\": \"朔州市\",\n\t    \"140602\": \"朔城区\",\n\t    \"140603\": \"平鲁区\",\n\t    \"140621\": \"山阴县\",\n\t    \"140622\": \"应县\",\n\t    \"140623\": \"右玉县\",\n\t    \"140624\": \"怀仁县\",\n\t    \"140625\": \"其它区\",\n\t    \"140700\": \"晋中市\",\n\t    \"140702\": \"榆次区\",\n\t    \"140721\": \"榆社县\",\n\t    \"140722\": \"左权县\",\n\t    \"140723\": \"和顺县\",\n\t    \"140724\": \"昔阳县\",\n\t    \"140725\": \"寿阳县\",\n\t    \"140726\": \"太谷县\",\n\t    \"140727\": \"祁县\",\n\t    \"140728\": \"平遥县\",\n\t    \"140729\": \"灵石县\",\n\t    \"140781\": \"介休市\",\n\t    \"140782\": \"其它区\",\n\t    \"140800\": \"运城市\",\n\t    \"140802\": \"盐湖区\",\n\t    \"140821\": \"临猗县\",\n\t    \"140822\": \"万荣县\",\n\t    \"140823\": \"闻喜县\",\n\t    \"140824\": \"稷山县\",\n\t    \"140825\": \"新绛县\",\n\t    \"140826\": \"绛县\",\n\t    \"140827\": \"垣曲县\",\n\t    \"140828\": \"夏县\",\n\t    \"140829\": \"平陆县\",\n\t    \"140830\": \"芮城县\",\n\t    \"140881\": \"永济市\",\n\t    \"140882\": \"河津市\",\n\t    \"140883\": \"其它区\",\n\t    \"140900\": \"忻州市\",\n\t    \"140902\": \"忻府区\",\n\t    \"140921\": \"定襄县\",\n\t    \"140922\": \"五台县\",\n\t    \"140923\": \"代县\",\n\t    \"140924\": \"繁峙县\",\n\t    \"140925\": \"宁武县\",\n\t    \"140926\": \"静乐县\",\n\t    \"140927\": \"神池县\",\n\t    \"140928\": \"五寨县\",\n\t    \"140929\": \"岢岚县\",\n\t    \"140930\": \"河曲县\",\n\t    \"140931\": \"保德县\",\n\t    \"140932\": \"偏关县\",\n\t    \"140981\": \"原平市\",\n\t    \"140982\": \"其它区\",\n\t    \"141000\": \"临汾市\",\n\t    \"141002\": \"尧都区\",\n\t    \"141021\": \"曲沃县\",\n\t    \"141022\": \"翼城县\",\n\t    \"141023\": \"襄汾县\",\n\t    \"141024\": \"洪洞县\",\n\t    \"141025\": \"古县\",\n\t    \"141026\": \"安泽县\",\n\t    \"141027\": \"浮山县\",\n\t    \"141028\": \"吉县\",\n\t    \"141029\": \"乡宁县\",\n\t    \"141030\": \"大宁县\",\n\t    \"141031\": \"隰县\",\n\t    \"141032\": \"永和县\",\n\t    \"141033\": \"蒲县\",\n\t    \"141034\": \"汾西县\",\n\t    \"141081\": \"侯马市\",\n\t    \"141082\": \"霍州市\",\n\t    \"141083\": \"其它区\",\n\t    \"141100\": \"吕梁市\",\n\t    \"141102\": \"离石区\",\n\t    \"141121\": \"文水县\",\n\t    \"141122\": \"交城县\",\n\t    \"141123\": \"兴县\",\n\t    \"141124\": \"临县\",\n\t    \"141125\": \"柳林县\",\n\t    \"141126\": \"石楼县\",\n\t    \"141127\": \"岚县\",\n\t    \"141128\": \"方山县\",\n\t    \"141129\": \"中阳县\",\n\t    \"141130\": \"交口县\",\n\t    \"141181\": \"孝义市\",\n\t    \"141182\": \"汾阳市\",\n\t    \"141183\": \"其它区\",\n\t    \"150000\": \"内蒙古自治区\",\n\t    \"150100\": \"呼和浩特市\",\n\t    \"150102\": \"新城区\",\n\t    \"150103\": \"回民区\",\n\t    \"150104\": \"玉泉区\",\n\t    \"150105\": \"赛罕区\",\n\t    \"150121\": \"土默特左旗\",\n\t    \"150122\": \"托克托县\",\n\t    \"150123\": \"和林格尔县\",\n\t    \"150124\": \"清水河县\",\n\t    \"150125\": \"武川县\",\n\t    \"150126\": \"其它区\",\n\t    \"150200\": \"包头市\",\n\t    \"150202\": \"东河区\",\n\t    \"150203\": \"昆都仑区\",\n\t    \"150204\": \"青山区\",\n\t    \"150205\": \"石拐区\",\n\t    \"150206\": \"白云鄂博矿区\",\n\t    \"150207\": \"九原区\",\n\t    \"150221\": \"土默特右旗\",\n\t    \"150222\": \"固阳县\",\n\t    \"150223\": \"达尔罕茂明安联合旗\",\n\t    \"150224\": \"其它区\",\n\t    \"150300\": \"乌海市\",\n\t    \"150302\": \"海勃湾区\",\n\t    \"150303\": \"海南区\",\n\t    \"150304\": \"乌达区\",\n\t    \"150305\": \"其它区\",\n\t    \"150400\": \"赤峰市\",\n\t    \"150402\": \"红山区\",\n\t    \"150403\": \"元宝山区\",\n\t    \"150404\": \"松山区\",\n\t    \"150421\": \"阿鲁科尔沁旗\",\n\t    \"150422\": \"巴林左旗\",\n\t    \"150423\": \"巴林右旗\",\n\t    \"150424\": \"林西县\",\n\t    \"150425\": \"克什克腾旗\",\n\t    \"150426\": \"翁牛特旗\",\n\t    \"150428\": \"喀喇沁旗\",\n\t    \"150429\": \"宁城县\",\n\t    \"150430\": \"敖汉旗\",\n\t    \"150431\": \"其它区\",\n\t    \"150500\": \"通辽市\",\n\t    \"150502\": \"科尔沁区\",\n\t    \"150521\": \"科尔沁左翼中旗\",\n\t    \"150522\": \"科尔沁左翼后旗\",\n\t    \"150523\": \"开鲁县\",\n\t    \"150524\": \"库伦旗\",\n\t    \"150525\": \"奈曼旗\",\n\t    \"150526\": \"扎鲁特旗\",\n\t    \"150581\": \"霍林郭勒市\",\n\t    \"150582\": \"其它区\",\n\t    \"150600\": \"鄂尔多斯市\",\n\t    \"150602\": \"东胜区\",\n\t    \"150621\": \"达拉特旗\",\n\t    \"150622\": \"准格尔旗\",\n\t    \"150623\": \"鄂托克前旗\",\n\t    \"150624\": \"鄂托克旗\",\n\t    \"150625\": \"杭锦旗\",\n\t    \"150626\": \"乌审旗\",\n\t    \"150627\": \"伊金霍洛旗\",\n\t    \"150628\": \"其它区\",\n\t    \"150700\": \"呼伦贝尔市\",\n\t    \"150702\": \"海拉尔区\",\n\t    \"150703\": \"扎赉诺尔区\",\n\t    \"150721\": \"阿荣旗\",\n\t    \"150722\": \"莫力达瓦达斡尔族自治旗\",\n\t    \"150723\": \"鄂伦春自治旗\",\n\t    \"150724\": \"鄂温克族自治旗\",\n\t    \"150725\": \"陈巴尔虎旗\",\n\t    \"150726\": \"新巴尔虎左旗\",\n\t    \"150727\": \"新巴尔虎右旗\",\n\t    \"150781\": \"满洲里市\",\n\t    \"150782\": \"牙克石市\",\n\t    \"150783\": \"扎兰屯市\",\n\t    \"150784\": \"额尔古纳市\",\n\t    \"150785\": \"根河市\",\n\t    \"150786\": \"其它区\",\n\t    \"150800\": \"巴彦淖尔市\",\n\t    \"150802\": \"临河区\",\n\t    \"150821\": \"五原县\",\n\t    \"150822\": \"磴口县\",\n\t    \"150823\": \"乌拉特前旗\",\n\t    \"150824\": \"乌拉特中旗\",\n\t    \"150825\": \"乌拉特后旗\",\n\t    \"150826\": \"杭锦后旗\",\n\t    \"150827\": \"其它区\",\n\t    \"150900\": \"乌兰察布市\",\n\t    \"150902\": \"集宁区\",\n\t    \"150921\": \"卓资县\",\n\t    \"150922\": \"化德县\",\n\t    \"150923\": \"商都县\",\n\t    \"150924\": \"兴和县\",\n\t    \"150925\": \"凉城县\",\n\t    \"150926\": \"察哈尔右翼前旗\",\n\t    \"150927\": \"察哈尔右翼中旗\",\n\t    \"150928\": \"察哈尔右翼后旗\",\n\t    \"150929\": \"四子王旗\",\n\t    \"150981\": \"丰镇市\",\n\t    \"150982\": \"其它区\",\n\t    \"152200\": \"兴安盟\",\n\t    \"152201\": \"乌兰浩特市\",\n\t    \"152202\": \"阿尔山市\",\n\t    \"152221\": \"科尔沁右翼前旗\",\n\t    \"152222\": \"科尔沁右翼中旗\",\n\t    \"152223\": \"扎赉特旗\",\n\t    \"152224\": \"突泉县\",\n\t    \"152225\": \"其它区\",\n\t    \"152500\": \"锡林郭勒盟\",\n\t    \"152501\": \"二连浩特市\",\n\t    \"152502\": \"锡林浩特市\",\n\t    \"152522\": \"阿巴嘎旗\",\n\t    \"152523\": \"苏尼特左旗\",\n\t    \"152524\": \"苏尼特右旗\",\n\t    \"152525\": \"东乌珠穆沁旗\",\n\t    \"152526\": \"西乌珠穆沁旗\",\n\t    \"152527\": \"太仆寺旗\",\n\t    \"152528\": \"镶黄旗\",\n\t    \"152529\": \"正镶白旗\",\n\t    \"152530\": \"正蓝旗\",\n\t    \"152531\": \"多伦县\",\n\t    \"152532\": \"其它区\",\n\t    \"152900\": \"阿拉善盟\",\n\t    \"152921\": \"阿拉善左旗\",\n\t    \"152922\": \"阿拉善右旗\",\n\t    \"152923\": \"额济纳旗\",\n\t    \"152924\": \"其它区\",\n\t    \"210000\": \"辽宁省\",\n\t    \"210100\": \"沈阳市\",\n\t    \"210102\": \"和平区\",\n\t    \"210103\": \"沈河区\",\n\t    \"210104\": \"大东区\",\n\t    \"210105\": \"皇姑区\",\n\t    \"210106\": \"铁西区\",\n\t    \"210111\": \"苏家屯区\",\n\t    \"210112\": \"东陵区\",\n\t    \"210113\": \"新城子区\",\n\t    \"210114\": \"于洪区\",\n\t    \"210122\": \"辽中县\",\n\t    \"210123\": \"康平县\",\n\t    \"210124\": \"法库县\",\n\t    \"210181\": \"新民市\",\n\t    \"210184\": \"沈北新区\",\n\t    \"210185\": \"其它区\",\n\t    \"210200\": \"大连市\",\n\t    \"210202\": \"中山区\",\n\t    \"210203\": \"西岗区\",\n\t    \"210204\": \"沙河口区\",\n\t    \"210211\": \"甘井子区\",\n\t    \"210212\": \"旅顺口区\",\n\t    \"210213\": \"金州区\",\n\t    \"210224\": \"长海县\",\n\t    \"210281\": \"瓦房店市\",\n\t    \"210282\": \"普兰店市\",\n\t    \"210283\": \"庄河市\",\n\t    \"210298\": \"其它区\",\n\t    \"210300\": \"鞍山市\",\n\t    \"210302\": \"铁东区\",\n\t    \"210303\": \"铁西区\",\n\t    \"210304\": \"立山区\",\n\t    \"210311\": \"千山区\",\n\t    \"210321\": \"台安县\",\n\t    \"210323\": \"岫岩满族自治县\",\n\t    \"210381\": \"海城市\",\n\t    \"210382\": \"其它区\",\n\t    \"210400\": \"抚顺市\",\n\t    \"210402\": \"新抚区\",\n\t    \"210403\": \"东洲区\",\n\t    \"210404\": \"望花区\",\n\t    \"210411\": \"顺城区\",\n\t    \"210421\": \"抚顺县\",\n\t    \"210422\": \"新宾满族自治县\",\n\t    \"210423\": \"清原满族自治县\",\n\t    \"210424\": \"其它区\",\n\t    \"210500\": \"本溪市\",\n\t    \"210502\": \"平山区\",\n\t    \"210503\": \"溪湖区\",\n\t    \"210504\": \"明山区\",\n\t    \"210505\": \"南芬区\",\n\t    \"210521\": \"本溪满族自治县\",\n\t    \"210522\": \"桓仁满族自治县\",\n\t    \"210523\": \"其它区\",\n\t    \"210600\": \"丹东市\",\n\t    \"210602\": \"元宝区\",\n\t    \"210603\": \"振兴区\",\n\t    \"210604\": \"振安区\",\n\t    \"210624\": \"宽甸满族自治县\",\n\t    \"210681\": \"东港市\",\n\t    \"210682\": \"凤城市\",\n\t    \"210683\": \"其它区\",\n\t    \"210700\": \"锦州市\",\n\t    \"210702\": \"古塔区\",\n\t    \"210703\": \"凌河区\",\n\t    \"210711\": \"太和区\",\n\t    \"210726\": \"黑山县\",\n\t    \"210727\": \"义县\",\n\t    \"210781\": \"凌海市\",\n\t    \"210782\": \"北镇市\",\n\t    \"210783\": \"其它区\",\n\t    \"210800\": \"营口市\",\n\t    \"210802\": \"站前区\",\n\t    \"210803\": \"西市区\",\n\t    \"210804\": \"鲅鱼圈区\",\n\t    \"210811\": \"老边区\",\n\t    \"210881\": \"盖州市\",\n\t    \"210882\": \"大石桥市\",\n\t    \"210883\": \"其它区\",\n\t    \"210900\": \"阜新市\",\n\t    \"210902\": \"海州区\",\n\t    \"210903\": \"新邱区\",\n\t    \"210904\": \"太平区\",\n\t    \"210905\": \"清河门区\",\n\t    \"210911\": \"细河区\",\n\t    \"210921\": \"阜新蒙古族自治县\",\n\t    \"210922\": \"彰武县\",\n\t    \"210923\": \"其它区\",\n\t    \"211000\": \"辽阳市\",\n\t    \"211002\": \"白塔区\",\n\t    \"211003\": \"文圣区\",\n\t    \"211004\": \"宏伟区\",\n\t    \"211005\": \"弓长岭区\",\n\t    \"211011\": \"太子河区\",\n\t    \"211021\": \"辽阳县\",\n\t    \"211081\": \"灯塔市\",\n\t    \"211082\": \"其它区\",\n\t    \"211100\": \"盘锦市\",\n\t    \"211102\": \"双台子区\",\n\t    \"211103\": \"兴隆台区\",\n\t    \"211121\": \"大洼县\",\n\t    \"211122\": \"盘山县\",\n\t    \"211123\": \"其它区\",\n\t    \"211200\": \"铁岭市\",\n\t    \"211202\": \"银州区\",\n\t    \"211204\": \"清河区\",\n\t    \"211221\": \"铁岭县\",\n\t    \"211223\": \"西丰县\",\n\t    \"211224\": \"昌图县\",\n\t    \"211281\": \"调兵山市\",\n\t    \"211282\": \"开原市\",\n\t    \"211283\": \"其它区\",\n\t    \"211300\": \"朝阳市\",\n\t    \"211302\": \"双塔区\",\n\t    \"211303\": \"龙城区\",\n\t    \"211321\": \"朝阳县\",\n\t    \"211322\": \"建平县\",\n\t    \"211324\": \"喀喇沁左翼蒙古族自治县\",\n\t    \"211381\": \"北票市\",\n\t    \"211382\": \"凌源市\",\n\t    \"211383\": \"其它区\",\n\t    \"211400\": \"葫芦岛市\",\n\t    \"211402\": \"连山区\",\n\t    \"211403\": \"龙港区\",\n\t    \"211404\": \"南票区\",\n\t    \"211421\": \"绥中县\",\n\t    \"211422\": \"建昌县\",\n\t    \"211481\": \"兴城市\",\n\t    \"211482\": \"其它区\",\n\t    \"220000\": \"吉林省\",\n\t    \"220100\": \"长春市\",\n\t    \"220102\": \"南关区\",\n\t    \"220103\": \"宽城区\",\n\t    \"220104\": \"朝阳区\",\n\t    \"220105\": \"二道区\",\n\t    \"220106\": \"绿园区\",\n\t    \"220112\": \"双阳区\",\n\t    \"220122\": \"农安县\",\n\t    \"220181\": \"九台市\",\n\t    \"220182\": \"榆树市\",\n\t    \"220183\": \"德惠市\",\n\t    \"220188\": \"其它区\",\n\t    \"220200\": \"吉林市\",\n\t    \"220202\": \"昌邑区\",\n\t    \"220203\": \"龙潭区\",\n\t    \"220204\": \"船营区\",\n\t    \"220211\": \"丰满区\",\n\t    \"220221\": \"永吉县\",\n\t    \"220281\": \"蛟河市\",\n\t    \"220282\": \"桦甸市\",\n\t    \"220283\": \"舒兰市\",\n\t    \"220284\": \"磐石市\",\n\t    \"220285\": \"其它区\",\n\t    \"220300\": \"四平市\",\n\t    \"220302\": \"铁西区\",\n\t    \"220303\": \"铁东区\",\n\t    \"220322\": \"梨树县\",\n\t    \"220323\": \"伊通满族自治县\",\n\t    \"220381\": \"公主岭市\",\n\t    \"220382\": \"双辽市\",\n\t    \"220383\": \"其它区\",\n\t    \"220400\": \"辽源市\",\n\t    \"220402\": \"龙山区\",\n\t    \"220403\": \"西安区\",\n\t    \"220421\": \"东丰县\",\n\t    \"220422\": \"东辽县\",\n\t    \"220423\": \"其它区\",\n\t    \"220500\": \"通化市\",\n\t    \"220502\": \"东昌区\",\n\t    \"220503\": \"二道江区\",\n\t    \"220521\": \"通化县\",\n\t    \"220523\": \"辉南县\",\n\t    \"220524\": \"柳河县\",\n\t    \"220581\": \"梅河口市\",\n\t    \"220582\": \"集安市\",\n\t    \"220583\": \"其它区\",\n\t    \"220600\": \"白山市\",\n\t    \"220602\": \"浑江区\",\n\t    \"220621\": \"抚松县\",\n\t    \"220622\": \"靖宇县\",\n\t    \"220623\": \"长白朝鲜族自治县\",\n\t    \"220625\": \"江源区\",\n\t    \"220681\": \"临江市\",\n\t    \"220682\": \"其它区\",\n\t    \"220700\": \"松原市\",\n\t    \"220702\": \"宁江区\",\n\t    \"220721\": \"前郭尔罗斯蒙古族自治县\",\n\t    \"220722\": \"长岭县\",\n\t    \"220723\": \"乾安县\",\n\t    \"220724\": \"扶余市\",\n\t    \"220725\": \"其它区\",\n\t    \"220800\": \"白城市\",\n\t    \"220802\": \"洮北区\",\n\t    \"220821\": \"镇赉县\",\n\t    \"220822\": \"通榆县\",\n\t    \"220881\": \"洮南市\",\n\t    \"220882\": \"大安市\",\n\t    \"220883\": \"其它区\",\n\t    \"222400\": \"延边朝鲜族自治州\",\n\t    \"222401\": \"延吉市\",\n\t    \"222402\": \"图们市\",\n\t    \"222403\": \"敦化市\",\n\t    \"222404\": \"珲春市\",\n\t    \"222405\": \"龙井市\",\n\t    \"222406\": \"和龙市\",\n\t    \"222424\": \"汪清县\",\n\t    \"222426\": \"安图县\",\n\t    \"222427\": \"其它区\",\n\t    \"230000\": \"黑龙江省\",\n\t    \"230100\": \"哈尔滨市\",\n\t    \"230102\": \"道里区\",\n\t    \"230103\": \"南岗区\",\n\t    \"230104\": \"道外区\",\n\t    \"230106\": \"香坊区\",\n\t    \"230108\": \"平房区\",\n\t    \"230109\": \"松北区\",\n\t    \"230111\": \"呼兰区\",\n\t    \"230123\": \"依兰县\",\n\t    \"230124\": \"方正县\",\n\t    \"230125\": \"宾县\",\n\t    \"230126\": \"巴彦县\",\n\t    \"230127\": \"木兰县\",\n\t    \"230128\": \"通河县\",\n\t    \"230129\": \"延寿县\",\n\t    \"230181\": \"阿城区\",\n\t    \"230182\": \"双城市\",\n\t    \"230183\": \"尚志市\",\n\t    \"230184\": \"五常市\",\n\t    \"230186\": \"其它区\",\n\t    \"230200\": \"齐齐哈尔市\",\n\t    \"230202\": \"龙沙区\",\n\t    \"230203\": \"建华区\",\n\t    \"230204\": \"铁锋区\",\n\t    \"230205\": \"昂昂溪区\",\n\t    \"230206\": \"富拉尔基区\",\n\t    \"230207\": \"碾子山区\",\n\t    \"230208\": \"梅里斯达斡尔族区\",\n\t    \"230221\": \"龙江县\",\n\t    \"230223\": \"依安县\",\n\t    \"230224\": \"泰来县\",\n\t    \"230225\": \"甘南县\",\n\t    \"230227\": \"富裕县\",\n\t    \"230229\": \"克山县\",\n\t    \"230230\": \"克东县\",\n\t    \"230231\": \"拜泉县\",\n\t    \"230281\": \"讷河市\",\n\t    \"230282\": \"其它区\",\n\t    \"230300\": \"鸡西市\",\n\t    \"230302\": \"鸡冠区\",\n\t    \"230303\": \"恒山区\",\n\t    \"230304\": \"滴道区\",\n\t    \"230305\": \"梨树区\",\n\t    \"230306\": \"城子河区\",\n\t    \"230307\": \"麻山区\",\n\t    \"230321\": \"鸡东县\",\n\t    \"230381\": \"虎林市\",\n\t    \"230382\": \"密山市\",\n\t    \"230383\": \"其它区\",\n\t    \"230400\": \"鹤岗市\",\n\t    \"230402\": \"向阳区\",\n\t    \"230403\": \"工农区\",\n\t    \"230404\": \"南山区\",\n\t    \"230405\": \"兴安区\",\n\t    \"230406\": \"东山区\",\n\t    \"230407\": \"兴山区\",\n\t    \"230421\": \"萝北县\",\n\t    \"230422\": \"绥滨县\",\n\t    \"230423\": \"其它区\",\n\t    \"230500\": \"双鸭山市\",\n\t    \"230502\": \"尖山区\",\n\t    \"230503\": \"岭东区\",\n\t    \"230505\": \"四方台区\",\n\t    \"230506\": \"宝山区\",\n\t    \"230521\": \"集贤县\",\n\t    \"230522\": \"友谊县\",\n\t    \"230523\": \"宝清县\",\n\t    \"230524\": \"饶河县\",\n\t    \"230525\": \"其它区\",\n\t    \"230600\": \"大庆市\",\n\t    \"230602\": \"萨尔图区\",\n\t    \"230603\": \"龙凤区\",\n\t    \"230604\": \"让胡路区\",\n\t    \"230605\": \"红岗区\",\n\t    \"230606\": \"大同区\",\n\t    \"230621\": \"肇州县\",\n\t    \"230622\": \"肇源县\",\n\t    \"230623\": \"林甸县\",\n\t    \"230624\": \"杜尔伯特蒙古族自治县\",\n\t    \"230625\": \"其它区\",\n\t    \"230700\": \"伊春市\",\n\t    \"230702\": \"伊春区\",\n\t    \"230703\": \"南岔区\",\n\t    \"230704\": \"友好区\",\n\t    \"230705\": \"西林区\",\n\t    \"230706\": \"翠峦区\",\n\t    \"230707\": \"新青区\",\n\t    \"230708\": \"美溪区\",\n\t    \"230709\": \"金山屯区\",\n\t    \"230710\": \"五营区\",\n\t    \"230711\": \"乌马河区\",\n\t    \"230712\": \"汤旺河区\",\n\t    \"230713\": \"带岭区\",\n\t    \"230714\": \"乌伊岭区\",\n\t    \"230715\": \"红星区\",\n\t    \"230716\": \"上甘岭区\",\n\t    \"230722\": \"嘉荫县\",\n\t    \"230781\": \"铁力市\",\n\t    \"230782\": \"其它区\",\n\t    \"230800\": \"佳木斯市\",\n\t    \"230803\": \"向阳区\",\n\t    \"230804\": \"前进区\",\n\t    \"230805\": \"东风区\",\n\t    \"230811\": \"郊区\",\n\t    \"230822\": \"桦南县\",\n\t    \"230826\": \"桦川县\",\n\t    \"230828\": \"汤原县\",\n\t    \"230833\": \"抚远县\",\n\t    \"230881\": \"同江市\",\n\t    \"230882\": \"富锦市\",\n\t    \"230883\": \"其它区\",\n\t    \"230900\": \"七台河市\",\n\t    \"230902\": \"新兴区\",\n\t    \"230903\": \"桃山区\",\n\t    \"230904\": \"茄子河区\",\n\t    \"230921\": \"勃利县\",\n\t    \"230922\": \"其它区\",\n\t    \"231000\": \"牡丹江市\",\n\t    \"231002\": \"东安区\",\n\t    \"231003\": \"阳明区\",\n\t    \"231004\": \"爱民区\",\n\t    \"231005\": \"西安区\",\n\t    \"231024\": \"东宁县\",\n\t    \"231025\": \"林口县\",\n\t    \"231081\": \"绥芬河市\",\n\t    \"231083\": \"海林市\",\n\t    \"231084\": \"宁安市\",\n\t    \"231085\": \"穆棱市\",\n\t    \"231086\": \"其它区\",\n\t    \"231100\": \"黑河市\",\n\t    \"231102\": \"爱辉区\",\n\t    \"231121\": \"嫩江县\",\n\t    \"231123\": \"逊克县\",\n\t    \"231124\": \"孙吴县\",\n\t    \"231181\": \"北安市\",\n\t    \"231182\": \"五大连池市\",\n\t    \"231183\": \"其它区\",\n\t    \"231200\": \"绥化市\",\n\t    \"231202\": \"北林区\",\n\t    \"231221\": \"望奎县\",\n\t    \"231222\": \"兰西县\",\n\t    \"231223\": \"青冈县\",\n\t    \"231224\": \"庆安县\",\n\t    \"231225\": \"明水县\",\n\t    \"231226\": \"绥棱县\",\n\t    \"231281\": \"安达市\",\n\t    \"231282\": \"肇东市\",\n\t    \"231283\": \"海伦市\",\n\t    \"231284\": \"其它区\",\n\t    \"232700\": \"大兴安岭地区\",\n\t    \"232702\": \"松岭区\",\n\t    \"232703\": \"新林区\",\n\t    \"232704\": \"呼中区\",\n\t    \"232721\": \"呼玛县\",\n\t    \"232722\": \"塔河县\",\n\t    \"232723\": \"漠河县\",\n\t    \"232724\": \"加格达奇区\",\n\t    \"232725\": \"其它区\",\n\t    \"310000\": \"上海\",\n\t    \"310100\": \"上海市\",\n\t    \"310101\": \"黄浦区\",\n\t    \"310104\": \"徐汇区\",\n\t    \"310105\": \"长宁区\",\n\t    \"310106\": \"静安区\",\n\t    \"310107\": \"普陀区\",\n\t    \"310108\": \"闸北区\",\n\t    \"310109\": \"虹口区\",\n\t    \"310110\": \"杨浦区\",\n\t    \"310112\": \"闵行区\",\n\t    \"310113\": \"宝山区\",\n\t    \"310114\": \"嘉定区\",\n\t    \"310115\": \"浦东新区\",\n\t    \"310116\": \"金山区\",\n\t    \"310117\": \"松江区\",\n\t    \"310118\": \"青浦区\",\n\t    \"310120\": \"奉贤区\",\n\t    \"310230\": \"崇明县\",\n\t    \"310231\": \"其它区\",\n\t    \"320000\": \"江苏省\",\n\t    \"320100\": \"南京市\",\n\t    \"320102\": \"玄武区\",\n\t    \"320104\": \"秦淮区\",\n\t    \"320105\": \"建邺区\",\n\t    \"320106\": \"鼓楼区\",\n\t    \"320111\": \"浦口区\",\n\t    \"320113\": \"栖霞区\",\n\t    \"320114\": \"雨花台区\",\n\t    \"320115\": \"江宁区\",\n\t    \"320116\": \"六合区\",\n\t    \"320124\": \"溧水区\",\n\t    \"320125\": \"高淳区\",\n\t    \"320126\": \"其它区\",\n\t    \"320200\": \"无锡市\",\n\t    \"320202\": \"崇安区\",\n\t    \"320203\": \"南长区\",\n\t    \"320204\": \"北塘区\",\n\t    \"320205\": \"锡山区\",\n\t    \"320206\": \"惠山区\",\n\t    \"320211\": \"滨湖区\",\n\t    \"320281\": \"江阴市\",\n\t    \"320282\": \"宜兴市\",\n\t    \"320297\": \"其它区\",\n\t    \"320300\": \"徐州市\",\n\t    \"320302\": \"鼓楼区\",\n\t    \"320303\": \"云龙区\",\n\t    \"320305\": \"贾汪区\",\n\t    \"320311\": \"泉山区\",\n\t    \"320321\": \"丰县\",\n\t    \"320322\": \"沛县\",\n\t    \"320323\": \"铜山区\",\n\t    \"320324\": \"睢宁县\",\n\t    \"320381\": \"新沂市\",\n\t    \"320382\": \"邳州市\",\n\t    \"320383\": \"其它区\",\n\t    \"320400\": \"常州市\",\n\t    \"320402\": \"天宁区\",\n\t    \"320404\": \"钟楼区\",\n\t    \"320405\": \"戚墅堰区\",\n\t    \"320411\": \"新北区\",\n\t    \"320412\": \"武进区\",\n\t    \"320481\": \"溧阳市\",\n\t    \"320482\": \"金坛市\",\n\t    \"320483\": \"其它区\",\n\t    \"320500\": \"苏州市\",\n\t    \"320505\": \"虎丘区\",\n\t    \"320506\": \"吴中区\",\n\t    \"320507\": \"相城区\",\n\t    \"320508\": \"姑苏区\",\n\t    \"320581\": \"常熟市\",\n\t    \"320582\": \"张家港市\",\n\t    \"320583\": \"昆山市\",\n\t    \"320584\": \"吴江区\",\n\t    \"320585\": \"太仓市\",\n\t    \"320596\": \"其它区\",\n\t    \"320600\": \"南通市\",\n\t    \"320602\": \"崇川区\",\n\t    \"320611\": \"港闸区\",\n\t    \"320612\": \"通州区\",\n\t    \"320621\": \"海安县\",\n\t    \"320623\": \"如东县\",\n\t    \"320681\": \"启东市\",\n\t    \"320682\": \"如皋市\",\n\t    \"320684\": \"海门市\",\n\t    \"320694\": \"其它区\",\n\t    \"320700\": \"连云港市\",\n\t    \"320703\": \"连云区\",\n\t    \"320705\": \"新浦区\",\n\t    \"320706\": \"海州区\",\n\t    \"320721\": \"赣榆县\",\n\t    \"320722\": \"东海县\",\n\t    \"320723\": \"灌云县\",\n\t    \"320724\": \"灌南县\",\n\t    \"320725\": \"其它区\",\n\t    \"320800\": \"淮安市\",\n\t    \"320802\": \"清河区\",\n\t    \"320803\": \"淮安区\",\n\t    \"320804\": \"淮阴区\",\n\t    \"320811\": \"清浦区\",\n\t    \"320826\": \"涟水县\",\n\t    \"320829\": \"洪泽县\",\n\t    \"320830\": \"盱眙县\",\n\t    \"320831\": \"金湖县\",\n\t    \"320832\": \"其它区\",\n\t    \"320900\": \"盐城市\",\n\t    \"320902\": \"亭湖区\",\n\t    \"320903\": \"盐都区\",\n\t    \"320921\": \"响水县\",\n\t    \"320922\": \"滨海县\",\n\t    \"320923\": \"阜宁县\",\n\t    \"320924\": \"射阳县\",\n\t    \"320925\": \"建湖县\",\n\t    \"320981\": \"东台市\",\n\t    \"320982\": \"大丰市\",\n\t    \"320983\": \"其它区\",\n\t    \"321000\": \"扬州市\",\n\t    \"321002\": \"广陵区\",\n\t    \"321003\": \"邗江区\",\n\t    \"321023\": \"宝应县\",\n\t    \"321081\": \"仪征市\",\n\t    \"321084\": \"高邮市\",\n\t    \"321088\": \"江都区\",\n\t    \"321093\": \"其它区\",\n\t    \"321100\": \"镇江市\",\n\t    \"321102\": \"京口区\",\n\t    \"321111\": \"润州区\",\n\t    \"321112\": \"丹徒区\",\n\t    \"321181\": \"丹阳市\",\n\t    \"321182\": \"扬中市\",\n\t    \"321183\": \"句容市\",\n\t    \"321184\": \"其它区\",\n\t    \"321200\": \"泰州市\",\n\t    \"321202\": \"海陵区\",\n\t    \"321203\": \"高港区\",\n\t    \"321281\": \"兴化市\",\n\t    \"321282\": \"靖江市\",\n\t    \"321283\": \"泰兴市\",\n\t    \"321284\": \"姜堰区\",\n\t    \"321285\": \"其它区\",\n\t    \"321300\": \"宿迁市\",\n\t    \"321302\": \"宿城区\",\n\t    \"321311\": \"宿豫区\",\n\t    \"321322\": \"沭阳县\",\n\t    \"321323\": \"泗阳县\",\n\t    \"321324\": \"泗洪县\",\n\t    \"321325\": \"其它区\",\n\t    \"330000\": \"浙江省\",\n\t    \"330100\": \"杭州市\",\n\t    \"330102\": \"上城区\",\n\t    \"330103\": \"下城区\",\n\t    \"330104\": \"江干区\",\n\t    \"330105\": \"拱墅区\",\n\t    \"330106\": \"西湖区\",\n\t    \"330108\": \"滨江区\",\n\t    \"330109\": \"萧山区\",\n\t    \"330110\": \"余杭区\",\n\t    \"330122\": \"桐庐县\",\n\t    \"330127\": \"淳安县\",\n\t    \"330182\": \"建德市\",\n\t    \"330183\": \"富阳市\",\n\t    \"330185\": \"临安市\",\n\t    \"330186\": \"其它区\",\n\t    \"330200\": \"宁波市\",\n\t    \"330203\": \"海曙区\",\n\t    \"330204\": \"江东区\",\n\t    \"330205\": \"江北区\",\n\t    \"330206\": \"北仑区\",\n\t    \"330211\": \"镇海区\",\n\t    \"330212\": \"鄞州区\",\n\t    \"330225\": \"象山县\",\n\t    \"330226\": \"宁海县\",\n\t    \"330281\": \"余姚市\",\n\t    \"330282\": \"慈溪市\",\n\t    \"330283\": \"奉化市\",\n\t    \"330284\": \"其它区\",\n\t    \"330300\": \"温州市\",\n\t    \"330302\": \"鹿城区\",\n\t    \"330303\": \"龙湾区\",\n\t    \"330304\": \"瓯海区\",\n\t    \"330322\": \"洞头县\",\n\t    \"330324\": \"永嘉县\",\n\t    \"330326\": \"平阳县\",\n\t    \"330327\": \"苍南县\",\n\t    \"330328\": \"文成县\",\n\t    \"330329\": \"泰顺县\",\n\t    \"330381\": \"瑞安市\",\n\t    \"330382\": \"乐清市\",\n\t    \"330383\": \"其它区\",\n\t    \"330400\": \"嘉兴市\",\n\t    \"330402\": \"南湖区\",\n\t    \"330411\": \"秀洲区\",\n\t    \"330421\": \"嘉善县\",\n\t    \"330424\": \"海盐县\",\n\t    \"330481\": \"海宁市\",\n\t    \"330482\": \"平湖市\",\n\t    \"330483\": \"桐乡市\",\n\t    \"330484\": \"其它区\",\n\t    \"330500\": \"湖州市\",\n\t    \"330502\": \"吴兴区\",\n\t    \"330503\": \"南浔区\",\n\t    \"330521\": \"德清县\",\n\t    \"330522\": \"长兴县\",\n\t    \"330523\": \"安吉县\",\n\t    \"330524\": \"其它区\",\n\t    \"330600\": \"绍兴市\",\n\t    \"330602\": \"越城区\",\n\t    \"330621\": \"绍兴县\",\n\t    \"330624\": \"新昌县\",\n\t    \"330681\": \"诸暨市\",\n\t    \"330682\": \"上虞市\",\n\t    \"330683\": \"嵊州市\",\n\t    \"330684\": \"其它区\",\n\t    \"330700\": \"金华市\",\n\t    \"330702\": \"婺城区\",\n\t    \"330703\": \"金东区\",\n\t    \"330723\": \"武义县\",\n\t    \"330726\": \"浦江县\",\n\t    \"330727\": \"磐安县\",\n\t    \"330781\": \"兰溪市\",\n\t    \"330782\": \"义乌市\",\n\t    \"330783\": \"东阳市\",\n\t    \"330784\": \"永康市\",\n\t    \"330785\": \"其它区\",\n\t    \"330800\": \"衢州市\",\n\t    \"330802\": \"柯城区\",\n\t    \"330803\": \"衢江区\",\n\t    \"330822\": \"常山县\",\n\t    \"330824\": \"开化县\",\n\t    \"330825\": \"龙游县\",\n\t    \"330881\": \"江山市\",\n\t    \"330882\": \"其它区\",\n\t    \"330900\": \"舟山市\",\n\t    \"330902\": \"定海区\",\n\t    \"330903\": \"普陀区\",\n\t    \"330921\": \"岱山县\",\n\t    \"330922\": \"嵊泗县\",\n\t    \"330923\": \"其它区\",\n\t    \"331000\": \"台州市\",\n\t    \"331002\": \"椒江区\",\n\t    \"331003\": \"黄岩区\",\n\t    \"331004\": \"路桥区\",\n\t    \"331021\": \"玉环县\",\n\t    \"331022\": \"三门县\",\n\t    \"331023\": \"天台县\",\n\t    \"331024\": \"仙居县\",\n\t    \"331081\": \"温岭市\",\n\t    \"331082\": \"临海市\",\n\t    \"331083\": \"其它区\",\n\t    \"331100\": \"丽水市\",\n\t    \"331102\": \"莲都区\",\n\t    \"331121\": \"青田县\",\n\t    \"331122\": \"缙云县\",\n\t    \"331123\": \"遂昌县\",\n\t    \"331124\": \"松阳县\",\n\t    \"331125\": \"云和县\",\n\t    \"331126\": \"庆元县\",\n\t    \"331127\": \"景宁畲族自治县\",\n\t    \"331181\": \"龙泉市\",\n\t    \"331182\": \"其它区\",\n\t    \"340000\": \"安徽省\",\n\t    \"340100\": \"合肥市\",\n\t    \"340102\": \"瑶海区\",\n\t    \"340103\": \"庐阳区\",\n\t    \"340104\": \"蜀山区\",\n\t    \"340111\": \"包河区\",\n\t    \"340121\": \"长丰县\",\n\t    \"340122\": \"肥东县\",\n\t    \"340123\": \"肥西县\",\n\t    \"340192\": \"其它区\",\n\t    \"340200\": \"芜湖市\",\n\t    \"340202\": \"镜湖区\",\n\t    \"340203\": \"弋江区\",\n\t    \"340207\": \"鸠江区\",\n\t    \"340208\": \"三山区\",\n\t    \"340221\": \"芜湖县\",\n\t    \"340222\": \"繁昌县\",\n\t    \"340223\": \"南陵县\",\n\t    \"340224\": \"其它区\",\n\t    \"340300\": \"蚌埠市\",\n\t    \"340302\": \"龙子湖区\",\n\t    \"340303\": \"蚌山区\",\n\t    \"340304\": \"禹会区\",\n\t    \"340311\": \"淮上区\",\n\t    \"340321\": \"怀远县\",\n\t    \"340322\": \"五河县\",\n\t    \"340323\": \"固镇县\",\n\t    \"340324\": \"其它区\",\n\t    \"340400\": \"淮南市\",\n\t    \"340402\": \"大通区\",\n\t    \"340403\": \"田家庵区\",\n\t    \"340404\": \"谢家集区\",\n\t    \"340405\": \"八公山区\",\n\t    \"340406\": \"潘集区\",\n\t    \"340421\": \"凤台县\",\n\t    \"340422\": \"其它区\",\n\t    \"340500\": \"马鞍山市\",\n\t    \"340503\": \"花山区\",\n\t    \"340504\": \"雨山区\",\n\t    \"340506\": \"博望区\",\n\t    \"340521\": \"当涂县\",\n\t    \"340522\": \"其它区\",\n\t    \"340600\": \"淮北市\",\n\t    \"340602\": \"杜集区\",\n\t    \"340603\": \"相山区\",\n\t    \"340604\": \"烈山区\",\n\t    \"340621\": \"濉溪县\",\n\t    \"340622\": \"其它区\",\n\t    \"340700\": \"铜陵市\",\n\t    \"340702\": \"铜官山区\",\n\t    \"340703\": \"狮子山区\",\n\t    \"340711\": \"郊区\",\n\t    \"340721\": \"铜陵县\",\n\t    \"340722\": \"其它区\",\n\t    \"340800\": \"安庆市\",\n\t    \"340802\": \"迎江区\",\n\t    \"340803\": \"大观区\",\n\t    \"340811\": \"宜秀区\",\n\t    \"340822\": \"怀宁县\",\n\t    \"340823\": \"枞阳县\",\n\t    \"340824\": \"潜山县\",\n\t    \"340825\": \"太湖县\",\n\t    \"340826\": \"宿松县\",\n\t    \"340827\": \"望江县\",\n\t    \"340828\": \"岳西县\",\n\t    \"340881\": \"桐城市\",\n\t    \"340882\": \"其它区\",\n\t    \"341000\": \"黄山市\",\n\t    \"341002\": \"屯溪区\",\n\t    \"341003\": \"黄山区\",\n\t    \"341004\": \"徽州区\",\n\t    \"341021\": \"歙县\",\n\t    \"341022\": \"休宁县\",\n\t    \"341023\": \"黟县\",\n\t    \"341024\": \"祁门县\",\n\t    \"341025\": \"其它区\",\n\t    \"341100\": \"滁州市\",\n\t    \"341102\": \"琅琊区\",\n\t    \"341103\": \"南谯区\",\n\t    \"341122\": \"来安县\",\n\t    \"341124\": \"全椒县\",\n\t    \"341125\": \"定远县\",\n\t    \"341126\": \"凤阳县\",\n\t    \"341181\": \"天长市\",\n\t    \"341182\": \"明光市\",\n\t    \"341183\": \"其它区\",\n\t    \"341200\": \"阜阳市\",\n\t    \"341202\": \"颍州区\",\n\t    \"341203\": \"颍东区\",\n\t    \"341204\": \"颍泉区\",\n\t    \"341221\": \"临泉县\",\n\t    \"341222\": \"太和县\",\n\t    \"341225\": \"阜南县\",\n\t    \"341226\": \"颍上县\",\n\t    \"341282\": \"界首市\",\n\t    \"341283\": \"其它区\",\n\t    \"341300\": \"宿州市\",\n\t    \"341302\": \"埇桥区\",\n\t    \"341321\": \"砀山县\",\n\t    \"341322\": \"萧县\",\n\t    \"341323\": \"灵璧县\",\n\t    \"341324\": \"泗县\",\n\t    \"341325\": \"其它区\",\n\t    \"341400\": \"巢湖市\",\n\t    \"341421\": \"庐江县\",\n\t    \"341422\": \"无为县\",\n\t    \"341423\": \"含山县\",\n\t    \"341424\": \"和县\",\n\t    \"341500\": \"六安市\",\n\t    \"341502\": \"金安区\",\n\t    \"341503\": \"裕安区\",\n\t    \"341521\": \"寿县\",\n\t    \"341522\": \"霍邱县\",\n\t    \"341523\": \"舒城县\",\n\t    \"341524\": \"金寨县\",\n\t    \"341525\": \"霍山县\",\n\t    \"341526\": \"其它区\",\n\t    \"341600\": \"亳州市\",\n\t    \"341602\": \"谯城区\",\n\t    \"341621\": \"涡阳县\",\n\t    \"341622\": \"蒙城县\",\n\t    \"341623\": \"利辛县\",\n\t    \"341624\": \"其它区\",\n\t    \"341700\": \"池州市\",\n\t    \"341702\": \"贵池区\",\n\t    \"341721\": \"东至县\",\n\t    \"341722\": \"石台县\",\n\t    \"341723\": \"青阳县\",\n\t    \"341724\": \"其它区\",\n\t    \"341800\": \"宣城市\",\n\t    \"341802\": \"宣州区\",\n\t    \"341821\": \"郎溪县\",\n\t    \"341822\": \"广德县\",\n\t    \"341823\": \"泾县\",\n\t    \"341824\": \"绩溪县\",\n\t    \"341825\": \"旌德县\",\n\t    \"341881\": \"宁国市\",\n\t    \"341882\": \"其它区\",\n\t    \"350000\": \"福建省\",\n\t    \"350100\": \"福州市\",\n\t    \"350102\": \"鼓楼区\",\n\t    \"350103\": \"台江区\",\n\t    \"350104\": \"仓山区\",\n\t    \"350105\": \"马尾区\",\n\t    \"350111\": \"晋安区\",\n\t    \"350121\": \"闽侯县\",\n\t    \"350122\": \"连江县\",\n\t    \"350123\": \"罗源县\",\n\t    \"350124\": \"闽清县\",\n\t    \"350125\": \"永泰县\",\n\t    \"350128\": \"平潭县\",\n\t    \"350181\": \"福清市\",\n\t    \"350182\": \"长乐市\",\n\t    \"350183\": \"其它区\",\n\t    \"350200\": \"厦门市\",\n\t    \"350203\": \"思明区\",\n\t    \"350205\": \"海沧区\",\n\t    \"350206\": \"湖里区\",\n\t    \"350211\": \"集美区\",\n\t    \"350212\": \"同安区\",\n\t    \"350213\": \"翔安区\",\n\t    \"350214\": \"其它区\",\n\t    \"350300\": \"莆田市\",\n\t    \"350302\": \"城厢区\",\n\t    \"350303\": \"涵江区\",\n\t    \"350304\": \"荔城区\",\n\t    \"350305\": \"秀屿区\",\n\t    \"350322\": \"仙游县\",\n\t    \"350323\": \"其它区\",\n\t    \"350400\": \"三明市\",\n\t    \"350402\": \"梅列区\",\n\t    \"350403\": \"三元区\",\n\t    \"350421\": \"明溪县\",\n\t    \"350423\": \"清流县\",\n\t    \"350424\": \"宁化县\",\n\t    \"350425\": \"大田县\",\n\t    \"350426\": \"尤溪县\",\n\t    \"350427\": \"沙县\",\n\t    \"350428\": \"将乐县\",\n\t    \"350429\": \"泰宁县\",\n\t    \"350430\": \"建宁县\",\n\t    \"350481\": \"永安市\",\n\t    \"350482\": \"其它区\",\n\t    \"350500\": \"泉州市\",\n\t    \"350502\": \"鲤城区\",\n\t    \"350503\": \"丰泽区\",\n\t    \"350504\": \"洛江区\",\n\t    \"350505\": \"泉港区\",\n\t    \"350521\": \"惠安县\",\n\t    \"350524\": \"安溪县\",\n\t    \"350525\": \"永春县\",\n\t    \"350526\": \"德化县\",\n\t    \"350527\": \"金门县\",\n\t    \"350581\": \"石狮市\",\n\t    \"350582\": \"晋江市\",\n\t    \"350583\": \"南安市\",\n\t    \"350584\": \"其它区\",\n\t    \"350600\": \"漳州市\",\n\t    \"350602\": \"芗城区\",\n\t    \"350603\": \"龙文区\",\n\t    \"350622\": \"云霄县\",\n\t    \"350623\": \"漳浦县\",\n\t    \"350624\": \"诏安县\",\n\t    \"350625\": \"长泰县\",\n\t    \"350626\": \"东山县\",\n\t    \"350627\": \"南靖县\",\n\t    \"350628\": \"平和县\",\n\t    \"350629\": \"华安县\",\n\t    \"350681\": \"龙海市\",\n\t    \"350682\": \"其它区\",\n\t    \"350700\": \"南平市\",\n\t    \"350702\": \"延平区\",\n\t    \"350721\": \"顺昌县\",\n\t    \"350722\": \"浦城县\",\n\t    \"350723\": \"光泽县\",\n\t    \"350724\": \"松溪县\",\n\t    \"350725\": \"政和县\",\n\t    \"350781\": \"邵武市\",\n\t    \"350782\": \"武夷山市\",\n\t    \"350783\": \"建瓯市\",\n\t    \"350784\": \"建阳市\",\n\t    \"350785\": \"其它区\",\n\t    \"350800\": \"龙岩市\",\n\t    \"350802\": \"新罗区\",\n\t    \"350821\": \"长汀县\",\n\t    \"350822\": \"永定县\",\n\t    \"350823\": \"上杭县\",\n\t    \"350824\": \"武平县\",\n\t    \"350825\": \"连城县\",\n\t    \"350881\": \"漳平市\",\n\t    \"350882\": \"其它区\",\n\t    \"350900\": \"宁德市\",\n\t    \"350902\": \"蕉城区\",\n\t    \"350921\": \"霞浦县\",\n\t    \"350922\": \"古田县\",\n\t    \"350923\": \"屏南县\",\n\t    \"350924\": \"寿宁县\",\n\t    \"350925\": \"周宁县\",\n\t    \"350926\": \"柘荣县\",\n\t    \"350981\": \"福安市\",\n\t    \"350982\": \"福鼎市\",\n\t    \"350983\": \"其它区\",\n\t    \"360000\": \"江西省\",\n\t    \"360100\": \"南昌市\",\n\t    \"360102\": \"东湖区\",\n\t    \"360103\": \"西湖区\",\n\t    \"360104\": \"青云谱区\",\n\t    \"360105\": \"湾里区\",\n\t    \"360111\": \"青山湖区\",\n\t    \"360121\": \"南昌县\",\n\t    \"360122\": \"新建县\",\n\t    \"360123\": \"安义县\",\n\t    \"360124\": \"进贤县\",\n\t    \"360128\": \"其它区\",\n\t    \"360200\": \"景德镇市\",\n\t    \"360202\": \"昌江区\",\n\t    \"360203\": \"珠山区\",\n\t    \"360222\": \"浮梁县\",\n\t    \"360281\": \"乐平市\",\n\t    \"360282\": \"其它区\",\n\t    \"360300\": \"萍乡市\",\n\t    \"360302\": \"安源区\",\n\t    \"360313\": \"湘东区\",\n\t    \"360321\": \"莲花县\",\n\t    \"360322\": \"上栗县\",\n\t    \"360323\": \"芦溪县\",\n\t    \"360324\": \"其它区\",\n\t    \"360400\": \"九江市\",\n\t    \"360402\": \"庐山区\",\n\t    \"360403\": \"浔阳区\",\n\t    \"360421\": \"九江县\",\n\t    \"360423\": \"武宁县\",\n\t    \"360424\": \"修水县\",\n\t    \"360425\": \"永修县\",\n\t    \"360426\": \"德安县\",\n\t    \"360427\": \"星子县\",\n\t    \"360428\": \"都昌县\",\n\t    \"360429\": \"湖口县\",\n\t    \"360430\": \"彭泽县\",\n\t    \"360481\": \"瑞昌市\",\n\t    \"360482\": \"其它区\",\n\t    \"360483\": \"共青城市\",\n\t    \"360500\": \"新余市\",\n\t    \"360502\": \"渝水区\",\n\t    \"360521\": \"分宜县\",\n\t    \"360522\": \"其它区\",\n\t    \"360600\": \"鹰潭市\",\n\t    \"360602\": \"月湖区\",\n\t    \"360622\": \"余江县\",\n\t    \"360681\": \"贵溪市\",\n\t    \"360682\": \"其它区\",\n\t    \"360700\": \"赣州市\",\n\t    \"360702\": \"章贡区\",\n\t    \"360721\": \"赣县\",\n\t    \"360722\": \"信丰县\",\n\t    \"360723\": \"大余县\",\n\t    \"360724\": \"上犹县\",\n\t    \"360725\": \"崇义县\",\n\t    \"360726\": \"安远县\",\n\t    \"360727\": \"龙南县\",\n\t    \"360728\": \"定南县\",\n\t    \"360729\": \"全南县\",\n\t    \"360730\": \"宁都县\",\n\t    \"360731\": \"于都县\",\n\t    \"360732\": \"兴国县\",\n\t    \"360733\": \"会昌县\",\n\t    \"360734\": \"寻乌县\",\n\t    \"360735\": \"石城县\",\n\t    \"360781\": \"瑞金市\",\n\t    \"360782\": \"南康市\",\n\t    \"360783\": \"其它区\",\n\t    \"360800\": \"吉安市\",\n\t    \"360802\": \"吉州区\",\n\t    \"360803\": \"青原区\",\n\t    \"360821\": \"吉安县\",\n\t    \"360822\": \"吉水县\",\n\t    \"360823\": \"峡江县\",\n\t    \"360824\": \"新干县\",\n\t    \"360825\": \"永丰县\",\n\t    \"360826\": \"泰和县\",\n\t    \"360827\": \"遂川县\",\n\t    \"360828\": \"万安县\",\n\t    \"360829\": \"安福县\",\n\t    \"360830\": \"永新县\",\n\t    \"360881\": \"井冈山市\",\n\t    \"360882\": \"其它区\",\n\t    \"360900\": \"宜春市\",\n\t    \"360902\": \"袁州区\",\n\t    \"360921\": \"奉新县\",\n\t    \"360922\": \"万载县\",\n\t    \"360923\": \"上高县\",\n\t    \"360924\": \"宜丰县\",\n\t    \"360925\": \"靖安县\",\n\t    \"360926\": \"铜鼓县\",\n\t    \"360981\": \"丰城市\",\n\t    \"360982\": \"樟树市\",\n\t    \"360983\": \"高安市\",\n\t    \"360984\": \"其它区\",\n\t    \"361000\": \"抚州市\",\n\t    \"361002\": \"临川区\",\n\t    \"361021\": \"南城县\",\n\t    \"361022\": \"黎川县\",\n\t    \"361023\": \"南丰县\",\n\t    \"361024\": \"崇仁县\",\n\t    \"361025\": \"乐安县\",\n\t    \"361026\": \"宜黄县\",\n\t    \"361027\": \"金溪县\",\n\t    \"361028\": \"资溪县\",\n\t    \"361029\": \"东乡县\",\n\t    \"361030\": \"广昌县\",\n\t    \"361031\": \"其它区\",\n\t    \"361100\": \"上饶市\",\n\t    \"361102\": \"信州区\",\n\t    \"361121\": \"上饶县\",\n\t    \"361122\": \"广丰县\",\n\t    \"361123\": \"玉山县\",\n\t    \"361124\": \"铅山县\",\n\t    \"361125\": \"横峰县\",\n\t    \"361126\": \"弋阳县\",\n\t    \"361127\": \"余干县\",\n\t    \"361128\": \"鄱阳县\",\n\t    \"361129\": \"万年县\",\n\t    \"361130\": \"婺源县\",\n\t    \"361181\": \"德兴市\",\n\t    \"361182\": \"其它区\",\n\t    \"370000\": \"山东省\",\n\t    \"370100\": \"济南市\",\n\t    \"370102\": \"历下区\",\n\t    \"370103\": \"市中区\",\n\t    \"370104\": \"槐荫区\",\n\t    \"370105\": \"天桥区\",\n\t    \"370112\": \"历城区\",\n\t    \"370113\": \"长清区\",\n\t    \"370124\": \"平阴县\",\n\t    \"370125\": \"济阳县\",\n\t    \"370126\": \"商河县\",\n\t    \"370181\": \"章丘市\",\n\t    \"370182\": \"其它区\",\n\t    \"370200\": \"青岛市\",\n\t    \"370202\": \"市南区\",\n\t    \"370203\": \"市北区\",\n\t    \"370211\": \"黄岛区\",\n\t    \"370212\": \"崂山区\",\n\t    \"370213\": \"李沧区\",\n\t    \"370214\": \"城阳区\",\n\t    \"370281\": \"胶州市\",\n\t    \"370282\": \"即墨市\",\n\t    \"370283\": \"平度市\",\n\t    \"370285\": \"莱西市\",\n\t    \"370286\": \"其它区\",\n\t    \"370300\": \"淄博市\",\n\t    \"370302\": \"淄川区\",\n\t    \"370303\": \"张店区\",\n\t    \"370304\": \"博山区\",\n\t    \"370305\": \"临淄区\",\n\t    \"370306\": \"周村区\",\n\t    \"370321\": \"桓台县\",\n\t    \"370322\": \"高青县\",\n\t    \"370323\": \"沂源县\",\n\t    \"370324\": \"其它区\",\n\t    \"370400\": \"枣庄市\",\n\t    \"370402\": \"市中区\",\n\t    \"370403\": \"薛城区\",\n\t    \"370404\": \"峄城区\",\n\t    \"370405\": \"台儿庄区\",\n\t    \"370406\": \"山亭区\",\n\t    \"370481\": \"滕州市\",\n\t    \"370482\": \"其它区\",\n\t    \"370500\": \"东营市\",\n\t    \"370502\": \"东营区\",\n\t    \"370503\": \"河口区\",\n\t    \"370521\": \"垦利县\",\n\t    \"370522\": \"利津县\",\n\t    \"370523\": \"广饶县\",\n\t    \"370591\": \"其它区\",\n\t    \"370600\": \"烟台市\",\n\t    \"370602\": \"芝罘区\",\n\t    \"370611\": \"福山区\",\n\t    \"370612\": \"牟平区\",\n\t    \"370613\": \"莱山区\",\n\t    \"370634\": \"长岛县\",\n\t    \"370681\": \"龙口市\",\n\t    \"370682\": \"莱阳市\",\n\t    \"370683\": \"莱州市\",\n\t    \"370684\": \"蓬莱市\",\n\t    \"370685\": \"招远市\",\n\t    \"370686\": \"栖霞市\",\n\t    \"370687\": \"海阳市\",\n\t    \"370688\": \"其它区\",\n\t    \"370700\": \"潍坊市\",\n\t    \"370702\": \"潍城区\",\n\t    \"370703\": \"寒亭区\",\n\t    \"370704\": \"坊子区\",\n\t    \"370705\": \"奎文区\",\n\t    \"370724\": \"临朐县\",\n\t    \"370725\": \"昌乐县\",\n\t    \"370781\": \"青州市\",\n\t    \"370782\": \"诸城市\",\n\t    \"370783\": \"寿光市\",\n\t    \"370784\": \"安丘市\",\n\t    \"370785\": \"高密市\",\n\t    \"370786\": \"昌邑市\",\n\t    \"370787\": \"其它区\",\n\t    \"370800\": \"济宁市\",\n\t    \"370802\": \"市中区\",\n\t    \"370811\": \"任城区\",\n\t    \"370826\": \"微山县\",\n\t    \"370827\": \"鱼台县\",\n\t    \"370828\": \"金乡县\",\n\t    \"370829\": \"嘉祥县\",\n\t    \"370830\": \"汶上县\",\n\t    \"370831\": \"泗水县\",\n\t    \"370832\": \"梁山县\",\n\t    \"370881\": \"曲阜市\",\n\t    \"370882\": \"兖州市\",\n\t    \"370883\": \"邹城市\",\n\t    \"370884\": \"其它区\",\n\t    \"370900\": \"泰安市\",\n\t    \"370902\": \"泰山区\",\n\t    \"370903\": \"岱岳区\",\n\t    \"370921\": \"宁阳县\",\n\t    \"370923\": \"东平县\",\n\t    \"370982\": \"新泰市\",\n\t    \"370983\": \"肥城市\",\n\t    \"370984\": \"其它区\",\n\t    \"371000\": \"威海市\",\n\t    \"371002\": \"环翠区\",\n\t    \"371081\": \"文登市\",\n\t    \"371082\": \"荣成市\",\n\t    \"371083\": \"乳山市\",\n\t    \"371084\": \"其它区\",\n\t    \"371100\": \"日照市\",\n\t    \"371102\": \"东港区\",\n\t    \"371103\": \"岚山区\",\n\t    \"371121\": \"五莲县\",\n\t    \"371122\": \"莒县\",\n\t    \"371123\": \"其它区\",\n\t    \"371200\": \"莱芜市\",\n\t    \"371202\": \"莱城区\",\n\t    \"371203\": \"钢城区\",\n\t    \"371204\": \"其它区\",\n\t    \"371300\": \"临沂市\",\n\t    \"371302\": \"兰山区\",\n\t    \"371311\": \"罗庄区\",\n\t    \"371312\": \"河东区\",\n\t    \"371321\": \"沂南县\",\n\t    \"371322\": \"郯城县\",\n\t    \"371323\": \"沂水县\",\n\t    \"371324\": \"苍山县\",\n\t    \"371325\": \"费县\",\n\t    \"371326\": \"平邑县\",\n\t    \"371327\": \"莒南县\",\n\t    \"371328\": \"蒙阴县\",\n\t    \"371329\": \"临沭县\",\n\t    \"371330\": \"其它区\",\n\t    \"371400\": \"德州市\",\n\t    \"371402\": \"德城区\",\n\t    \"371421\": \"陵县\",\n\t    \"371422\": \"宁津县\",\n\t    \"371423\": \"庆云县\",\n\t    \"371424\": \"临邑县\",\n\t    \"371425\": \"齐河县\",\n\t    \"371426\": \"平原县\",\n\t    \"371427\": \"夏津县\",\n\t    \"371428\": \"武城县\",\n\t    \"371481\": \"乐陵市\",\n\t    \"371482\": \"禹城市\",\n\t    \"371483\": \"其它区\",\n\t    \"371500\": \"聊城市\",\n\t    \"371502\": \"东昌府区\",\n\t    \"371521\": \"阳谷县\",\n\t    \"371522\": \"莘县\",\n\t    \"371523\": \"茌平县\",\n\t    \"371524\": \"东阿县\",\n\t    \"371525\": \"冠县\",\n\t    \"371526\": \"高唐县\",\n\t    \"371581\": \"临清市\",\n\t    \"371582\": \"其它区\",\n\t    \"371600\": \"滨州市\",\n\t    \"371602\": \"滨城区\",\n\t    \"371621\": \"惠民县\",\n\t    \"371622\": \"阳信县\",\n\t    \"371623\": \"无棣县\",\n\t    \"371624\": \"沾化县\",\n\t    \"371625\": \"博兴县\",\n\t    \"371626\": \"邹平县\",\n\t    \"371627\": \"其它区\",\n\t    \"371700\": \"菏泽市\",\n\t    \"371702\": \"牡丹区\",\n\t    \"371721\": \"曹县\",\n\t    \"371722\": \"单县\",\n\t    \"371723\": \"成武县\",\n\t    \"371724\": \"巨野县\",\n\t    \"371725\": \"郓城县\",\n\t    \"371726\": \"鄄城县\",\n\t    \"371727\": \"定陶县\",\n\t    \"371728\": \"东明县\",\n\t    \"371729\": \"其它区\",\n\t    \"410000\": \"河南省\",\n\t    \"410100\": \"郑州市\",\n\t    \"410102\": \"中原区\",\n\t    \"410103\": \"二七区\",\n\t    \"410104\": \"管城回族区\",\n\t    \"410105\": \"金水区\",\n\t    \"410106\": \"上街区\",\n\t    \"410108\": \"惠济区\",\n\t    \"410122\": \"中牟县\",\n\t    \"410181\": \"巩义市\",\n\t    \"410182\": \"荥阳市\",\n\t    \"410183\": \"新密市\",\n\t    \"410184\": \"新郑市\",\n\t    \"410185\": \"登封市\",\n\t    \"410188\": \"其它区\",\n\t    \"410200\": \"开封市\",\n\t    \"410202\": \"龙亭区\",\n\t    \"410203\": \"顺河回族区\",\n\t    \"410204\": \"鼓楼区\",\n\t    \"410205\": \"禹王台区\",\n\t    \"410211\": \"金明区\",\n\t    \"410221\": \"杞县\",\n\t    \"410222\": \"通许县\",\n\t    \"410223\": \"尉氏县\",\n\t    \"410224\": \"开封县\",\n\t    \"410225\": \"兰考县\",\n\t    \"410226\": \"其它区\",\n\t    \"410300\": \"洛阳市\",\n\t    \"410302\": \"老城区\",\n\t    \"410303\": \"西工区\",\n\t    \"410304\": \"瀍河回族区\",\n\t    \"410305\": \"涧西区\",\n\t    \"410306\": \"吉利区\",\n\t    \"410307\": \"洛龙区\",\n\t    \"410322\": \"孟津县\",\n\t    \"410323\": \"新安县\",\n\t    \"410324\": \"栾川县\",\n\t    \"410325\": \"嵩县\",\n\t    \"410326\": \"汝阳县\",\n\t    \"410327\": \"宜阳县\",\n\t    \"410328\": \"洛宁县\",\n\t    \"410329\": \"伊川县\",\n\t    \"410381\": \"偃师市\",\n\t    \"410400\": \"平顶山市\",\n\t    \"410402\": \"新华区\",\n\t    \"410403\": \"卫东区\",\n\t    \"410404\": \"石龙区\",\n\t    \"410411\": \"湛河区\",\n\t    \"410421\": \"宝丰县\",\n\t    \"410422\": \"叶县\",\n\t    \"410423\": \"鲁山县\",\n\t    \"410425\": \"郏县\",\n\t    \"410481\": \"舞钢市\",\n\t    \"410482\": \"汝州市\",\n\t    \"410483\": \"其它区\",\n\t    \"410500\": \"安阳市\",\n\t    \"410502\": \"文峰区\",\n\t    \"410503\": \"北关区\",\n\t    \"410505\": \"殷都区\",\n\t    \"410506\": \"龙安区\",\n\t    \"410522\": \"安阳县\",\n\t    \"410523\": \"汤阴县\",\n\t    \"410526\": \"滑县\",\n\t    \"410527\": \"内黄县\",\n\t    \"410581\": \"林州市\",\n\t    \"410582\": \"其它区\",\n\t    \"410600\": \"鹤壁市\",\n\t    \"410602\": \"鹤山区\",\n\t    \"410603\": \"山城区\",\n\t    \"410611\": \"淇滨区\",\n\t    \"410621\": \"浚县\",\n\t    \"410622\": \"淇县\",\n\t    \"410623\": \"其它区\",\n\t    \"410700\": \"新乡市\",\n\t    \"410702\": \"红旗区\",\n\t    \"410703\": \"卫滨区\",\n\t    \"410704\": \"凤泉区\",\n\t    \"410711\": \"牧野区\",\n\t    \"410721\": \"新乡县\",\n\t    \"410724\": \"获嘉县\",\n\t    \"410725\": \"原阳县\",\n\t    \"410726\": \"延津县\",\n\t    \"410727\": \"封丘县\",\n\t    \"410728\": \"长垣县\",\n\t    \"410781\": \"卫辉市\",\n\t    \"410782\": \"辉县市\",\n\t    \"410783\": \"其它区\",\n\t    \"410800\": \"焦作市\",\n\t    \"410802\": \"解放区\",\n\t    \"410803\": \"中站区\",\n\t    \"410804\": \"马村区\",\n\t    \"410811\": \"山阳区\",\n\t    \"410821\": \"修武县\",\n\t    \"410822\": \"博爱县\",\n\t    \"410823\": \"武陟县\",\n\t    \"410825\": \"温县\",\n\t    \"410881\": \"济源市\",\n\t    \"410882\": \"沁阳市\",\n\t    \"410883\": \"孟州市\",\n\t    \"410884\": \"其它区\",\n\t    \"410900\": \"濮阳市\",\n\t    \"410902\": \"华龙区\",\n\t    \"410922\": \"清丰县\",\n\t    \"410923\": \"南乐县\",\n\t    \"410926\": \"范县\",\n\t    \"410927\": \"台前县\",\n\t    \"410928\": \"濮阳县\",\n\t    \"410929\": \"其它区\",\n\t    \"411000\": \"许昌市\",\n\t    \"411002\": \"魏都区\",\n\t    \"411023\": \"许昌县\",\n\t    \"411024\": \"鄢陵县\",\n\t    \"411025\": \"襄城县\",\n\t    \"411081\": \"禹州市\",\n\t    \"411082\": \"长葛市\",\n\t    \"411083\": \"其它区\",\n\t    \"411100\": \"漯河市\",\n\t    \"411102\": \"源汇区\",\n\t    \"411103\": \"郾城区\",\n\t    \"411104\": \"召陵区\",\n\t    \"411121\": \"舞阳县\",\n\t    \"411122\": \"临颍县\",\n\t    \"411123\": \"其它区\",\n\t    \"411200\": \"三门峡市\",\n\t    \"411202\": \"湖滨区\",\n\t    \"411221\": \"渑池县\",\n\t    \"411222\": \"陕县\",\n\t    \"411224\": \"卢氏县\",\n\t    \"411281\": \"义马市\",\n\t    \"411282\": \"灵宝市\",\n\t    \"411283\": \"其它区\",\n\t    \"411300\": \"南阳市\",\n\t    \"411302\": \"宛城区\",\n\t    \"411303\": \"卧龙区\",\n\t    \"411321\": \"南召县\",\n\t    \"411322\": \"方城县\",\n\t    \"411323\": \"西峡县\",\n\t    \"411324\": \"镇平县\",\n\t    \"411325\": \"内乡县\",\n\t    \"411326\": \"淅川县\",\n\t    \"411327\": \"社旗县\",\n\t    \"411328\": \"唐河县\",\n\t    \"411329\": \"新野县\",\n\t    \"411330\": \"桐柏县\",\n\t    \"411381\": \"邓州市\",\n\t    \"411382\": \"其它区\",\n\t    \"411400\": \"商丘市\",\n\t    \"411402\": \"梁园区\",\n\t    \"411403\": \"睢阳区\",\n\t    \"411421\": \"民权县\",\n\t    \"411422\": \"睢县\",\n\t    \"411423\": \"宁陵县\",\n\t    \"411424\": \"柘城县\",\n\t    \"411425\": \"虞城县\",\n\t    \"411426\": \"夏邑县\",\n\t    \"411481\": \"永城市\",\n\t    \"411482\": \"其它区\",\n\t    \"411500\": \"信阳市\",\n\t    \"411502\": \"浉河区\",\n\t    \"411503\": \"平桥区\",\n\t    \"411521\": \"罗山县\",\n\t    \"411522\": \"光山县\",\n\t    \"411523\": \"新县\",\n\t    \"411524\": \"商城县\",\n\t    \"411525\": \"固始县\",\n\t    \"411526\": \"潢川县\",\n\t    \"411527\": \"淮滨县\",\n\t    \"411528\": \"息县\",\n\t    \"411529\": \"其它区\",\n\t    \"411600\": \"周口市\",\n\t    \"411602\": \"川汇区\",\n\t    \"411621\": \"扶沟县\",\n\t    \"411622\": \"西华县\",\n\t    \"411623\": \"商水县\",\n\t    \"411624\": \"沈丘县\",\n\t    \"411625\": \"郸城县\",\n\t    \"411626\": \"淮阳县\",\n\t    \"411627\": \"太康县\",\n\t    \"411628\": \"鹿邑县\",\n\t    \"411681\": \"项城市\",\n\t    \"411682\": \"其它区\",\n\t    \"411700\": \"驻马店市\",\n\t    \"411702\": \"驿城区\",\n\t    \"411721\": \"西平县\",\n\t    \"411722\": \"上蔡县\",\n\t    \"411723\": \"平舆县\",\n\t    \"411724\": \"正阳县\",\n\t    \"411725\": \"确山县\",\n\t    \"411726\": \"泌阳县\",\n\t    \"411727\": \"汝南县\",\n\t    \"411728\": \"遂平县\",\n\t    \"411729\": \"新蔡县\",\n\t    \"411730\": \"其它区\",\n\t    \"420000\": \"湖北省\",\n\t    \"420100\": \"武汉市\",\n\t    \"420102\": \"江岸区\",\n\t    \"420103\": \"江汉区\",\n\t    \"420104\": \"硚口区\",\n\t    \"420105\": \"汉阳区\",\n\t    \"420106\": \"武昌区\",\n\t    \"420107\": \"青山区\",\n\t    \"420111\": \"洪山区\",\n\t    \"420112\": \"东西湖区\",\n\t    \"420113\": \"汉南区\",\n\t    \"420114\": \"蔡甸区\",\n\t    \"420115\": \"江夏区\",\n\t    \"420116\": \"黄陂区\",\n\t    \"420117\": \"新洲区\",\n\t    \"420118\": \"其它区\",\n\t    \"420200\": \"黄石市\",\n\t    \"420202\": \"黄石港区\",\n\t    \"420203\": \"西塞山区\",\n\t    \"420204\": \"下陆区\",\n\t    \"420205\": \"铁山区\",\n\t    \"420222\": \"阳新县\",\n\t    \"420281\": \"大冶市\",\n\t    \"420282\": \"其它区\",\n\t    \"420300\": \"十堰市\",\n\t    \"420302\": \"茅箭区\",\n\t    \"420303\": \"张湾区\",\n\t    \"420321\": \"郧县\",\n\t    \"420322\": \"郧西县\",\n\t    \"420323\": \"竹山县\",\n\t    \"420324\": \"竹溪县\",\n\t    \"420325\": \"房县\",\n\t    \"420381\": \"丹江口市\",\n\t    \"420383\": \"其它区\",\n\t    \"420500\": \"宜昌市\",\n\t    \"420502\": \"西陵区\",\n\t    \"420503\": \"伍家岗区\",\n\t    \"420504\": \"点军区\",\n\t    \"420505\": \"猇亭区\",\n\t    \"420506\": \"夷陵区\",\n\t    \"420525\": \"远安县\",\n\t    \"420526\": \"兴山县\",\n\t    \"420527\": \"秭归县\",\n\t    \"420528\": \"长阳土家族自治县\",\n\t    \"420529\": \"五峰土家族自治县\",\n\t    \"420581\": \"宜都市\",\n\t    \"420582\": \"当阳市\",\n\t    \"420583\": \"枝江市\",\n\t    \"420584\": \"其它区\",\n\t    \"420600\": \"襄阳市\",\n\t    \"420602\": \"襄城区\",\n\t    \"420606\": \"樊城区\",\n\t    \"420607\": \"襄州区\",\n\t    \"420624\": \"南漳县\",\n\t    \"420625\": \"谷城县\",\n\t    \"420626\": \"保康县\",\n\t    \"420682\": \"老河口市\",\n\t    \"420683\": \"枣阳市\",\n\t    \"420684\": \"宜城市\",\n\t    \"420685\": \"其它区\",\n\t    \"420700\": \"鄂州市\",\n\t    \"420702\": \"梁子湖区\",\n\t    \"420703\": \"华容区\",\n\t    \"420704\": \"鄂城区\",\n\t    \"420705\": \"其它区\",\n\t    \"420800\": \"荆门市\",\n\t    \"420802\": \"东宝区\",\n\t    \"420804\": \"掇刀区\",\n\t    \"420821\": \"京山县\",\n\t    \"420822\": \"沙洋县\",\n\t    \"420881\": \"钟祥市\",\n\t    \"420882\": \"其它区\",\n\t    \"420900\": \"孝感市\",\n\t    \"420902\": \"孝南区\",\n\t    \"420921\": \"孝昌县\",\n\t    \"420922\": \"大悟县\",\n\t    \"420923\": \"云梦县\",\n\t    \"420981\": \"应城市\",\n\t    \"420982\": \"安陆市\",\n\t    \"420984\": \"汉川市\",\n\t    \"420985\": \"其它区\",\n\t    \"421000\": \"荆州市\",\n\t    \"421002\": \"沙市区\",\n\t    \"421003\": \"荆州区\",\n\t    \"421022\": \"公安县\",\n\t    \"421023\": \"监利县\",\n\t    \"421024\": \"江陵县\",\n\t    \"421081\": \"石首市\",\n\t    \"421083\": \"洪湖市\",\n\t    \"421087\": \"松滋市\",\n\t    \"421088\": \"其它区\",\n\t    \"421100\": \"黄冈市\",\n\t    \"421102\": \"黄州区\",\n\t    \"421121\": \"团风县\",\n\t    \"421122\": \"红安县\",\n\t    \"421123\": \"罗田县\",\n\t    \"421124\": \"英山县\",\n\t    \"421125\": \"浠水县\",\n\t    \"421126\": \"蕲春县\",\n\t    \"421127\": \"黄梅县\",\n\t    \"421181\": \"麻城市\",\n\t    \"421182\": \"武穴市\",\n\t    \"421183\": \"其它区\",\n\t    \"421200\": \"咸宁市\",\n\t    \"421202\": \"咸安区\",\n\t    \"421221\": \"嘉鱼县\",\n\t    \"421222\": \"通城县\",\n\t    \"421223\": \"崇阳县\",\n\t    \"421224\": \"通山县\",\n\t    \"421281\": \"赤壁市\",\n\t    \"421283\": \"其它区\",\n\t    \"421300\": \"随州市\",\n\t    \"421302\": \"曾都区\",\n\t    \"421321\": \"随县\",\n\t    \"421381\": \"广水市\",\n\t    \"421382\": \"其它区\",\n\t    \"422800\": \"恩施土家族苗族自治州\",\n\t    \"422801\": \"恩施市\",\n\t    \"422802\": \"利川市\",\n\t    \"422822\": \"建始县\",\n\t    \"422823\": \"巴东县\",\n\t    \"422825\": \"宣恩县\",\n\t    \"422826\": \"咸丰县\",\n\t    \"422827\": \"来凤县\",\n\t    \"422828\": \"鹤峰县\",\n\t    \"422829\": \"其它区\",\n\t    \"429004\": \"仙桃市\",\n\t    \"429005\": \"潜江市\",\n\t    \"429006\": \"天门市\",\n\t    \"429021\": \"神农架林区\",\n\t    \"430000\": \"湖南省\",\n\t    \"430100\": \"长沙市\",\n\t    \"430102\": \"芙蓉区\",\n\t    \"430103\": \"天心区\",\n\t    \"430104\": \"岳麓区\",\n\t    \"430105\": \"开福区\",\n\t    \"430111\": \"雨花区\",\n\t    \"430121\": \"长沙县\",\n\t    \"430122\": \"望城区\",\n\t    \"430124\": \"宁乡县\",\n\t    \"430181\": \"浏阳市\",\n\t    \"430182\": \"其它区\",\n\t    \"430200\": \"株洲市\",\n\t    \"430202\": \"荷塘区\",\n\t    \"430203\": \"芦淞区\",\n\t    \"430204\": \"石峰区\",\n\t    \"430211\": \"天元区\",\n\t    \"430221\": \"株洲县\",\n\t    \"430223\": \"攸县\",\n\t    \"430224\": \"茶陵县\",\n\t    \"430225\": \"炎陵县\",\n\t    \"430281\": \"醴陵市\",\n\t    \"430282\": \"其它区\",\n\t    \"430300\": \"湘潭市\",\n\t    \"430302\": \"雨湖区\",\n\t    \"430304\": \"岳塘区\",\n\t    \"430321\": \"湘潭县\",\n\t    \"430381\": \"湘乡市\",\n\t    \"430382\": \"韶山市\",\n\t    \"430383\": \"其它区\",\n\t    \"430400\": \"衡阳市\",\n\t    \"430405\": \"珠晖区\",\n\t    \"430406\": \"雁峰区\",\n\t    \"430407\": \"石鼓区\",\n\t    \"430408\": \"蒸湘区\",\n\t    \"430412\": \"南岳区\",\n\t    \"430421\": \"衡阳县\",\n\t    \"430422\": \"衡南县\",\n\t    \"430423\": \"衡山县\",\n\t    \"430424\": \"衡东县\",\n\t    \"430426\": \"祁东县\",\n\t    \"430481\": \"耒阳市\",\n\t    \"430482\": \"常宁市\",\n\t    \"430483\": \"其它区\",\n\t    \"430500\": \"邵阳市\",\n\t    \"430502\": \"双清区\",\n\t    \"430503\": \"大祥区\",\n\t    \"430511\": \"北塔区\",\n\t    \"430521\": \"邵东县\",\n\t    \"430522\": \"新邵县\",\n\t    \"430523\": \"邵阳县\",\n\t    \"430524\": \"隆回县\",\n\t    \"430525\": \"洞口县\",\n\t    \"430527\": \"绥宁县\",\n\t    \"430528\": \"新宁县\",\n\t    \"430529\": \"城步苗族自治县\",\n\t    \"430581\": \"武冈市\",\n\t    \"430582\": \"其它区\",\n\t    \"430600\": \"岳阳市\",\n\t    \"430602\": \"岳阳楼区\",\n\t    \"430603\": \"云溪区\",\n\t    \"430611\": \"君山区\",\n\t    \"430621\": \"岳阳县\",\n\t    \"430623\": \"华容县\",\n\t    \"430624\": \"湘阴县\",\n\t    \"430626\": \"平江县\",\n\t    \"430681\": \"汨罗市\",\n\t    \"430682\": \"临湘市\",\n\t    \"430683\": \"其它区\",\n\t    \"430700\": \"常德市\",\n\t    \"430702\": \"武陵区\",\n\t    \"430703\": \"鼎城区\",\n\t    \"430721\": \"安乡县\",\n\t    \"430722\": \"汉寿县\",\n\t    \"430723\": \"澧县\",\n\t    \"430724\": \"临澧县\",\n\t    \"430725\": \"桃源县\",\n\t    \"430726\": \"石门县\",\n\t    \"430781\": \"津市市\",\n\t    \"430782\": \"其它区\",\n\t    \"430800\": \"张家界市\",\n\t    \"430802\": \"永定区\",\n\t    \"430811\": \"武陵源区\",\n\t    \"430821\": \"慈利县\",\n\t    \"430822\": \"桑植县\",\n\t    \"430823\": \"其它区\",\n\t    \"430900\": \"益阳市\",\n\t    \"430902\": \"资阳区\",\n\t    \"430903\": \"赫山区\",\n\t    \"430921\": \"南县\",\n\t    \"430922\": \"桃江县\",\n\t    \"430923\": \"安化县\",\n\t    \"430981\": \"沅江市\",\n\t    \"430982\": \"其它区\",\n\t    \"431000\": \"郴州市\",\n\t    \"431002\": \"北湖区\",\n\t    \"431003\": \"苏仙区\",\n\t    \"431021\": \"桂阳县\",\n\t    \"431022\": \"宜章县\",\n\t    \"431023\": \"永兴县\",\n\t    \"431024\": \"嘉禾县\",\n\t    \"431025\": \"临武县\",\n\t    \"431026\": \"汝城县\",\n\t    \"431027\": \"桂东县\",\n\t    \"431028\": \"安仁县\",\n\t    \"431081\": \"资兴市\",\n\t    \"431082\": \"其它区\",\n\t    \"431100\": \"永州市\",\n\t    \"431102\": \"零陵区\",\n\t    \"431103\": \"冷水滩区\",\n\t    \"431121\": \"祁阳县\",\n\t    \"431122\": \"东安县\",\n\t    \"431123\": \"双牌县\",\n\t    \"431124\": \"道县\",\n\t    \"431125\": \"江永县\",\n\t    \"431126\": \"宁远县\",\n\t    \"431127\": \"蓝山县\",\n\t    \"431128\": \"新田县\",\n\t    \"431129\": \"江华瑶族自治县\",\n\t    \"431130\": \"其它区\",\n\t    \"431200\": \"怀化市\",\n\t    \"431202\": \"鹤城区\",\n\t    \"431221\": \"中方县\",\n\t    \"431222\": \"沅陵县\",\n\t    \"431223\": \"辰溪县\",\n\t    \"431224\": \"溆浦县\",\n\t    \"431225\": \"会同县\",\n\t    \"431226\": \"麻阳苗族自治县\",\n\t    \"431227\": \"新晃侗族自治县\",\n\t    \"431228\": \"芷江侗族自治县\",\n\t    \"431229\": \"靖州苗族侗族自治县\",\n\t    \"431230\": \"通道侗族自治县\",\n\t    \"431281\": \"洪江市\",\n\t    \"431282\": \"其它区\",\n\t    \"431300\": \"娄底市\",\n\t    \"431302\": \"娄星区\",\n\t    \"431321\": \"双峰县\",\n\t    \"431322\": \"新化县\",\n\t    \"431381\": \"冷水江市\",\n\t    \"431382\": \"涟源市\",\n\t    \"431383\": \"其它区\",\n\t    \"433100\": \"湘西土家族苗族自治州\",\n\t    \"433101\": \"吉首市\",\n\t    \"433122\": \"泸溪县\",\n\t    \"433123\": \"凤凰县\",\n\t    \"433124\": \"花垣县\",\n\t    \"433125\": \"保靖县\",\n\t    \"433126\": \"古丈县\",\n\t    \"433127\": \"永顺县\",\n\t    \"433130\": \"龙山县\",\n\t    \"433131\": \"其它区\",\n\t    \"440000\": \"广东省\",\n\t    \"440100\": \"广州市\",\n\t    \"440103\": \"荔湾区\",\n\t    \"440104\": \"越秀区\",\n\t    \"440105\": \"海珠区\",\n\t    \"440106\": \"天河区\",\n\t    \"440111\": \"白云区\",\n\t    \"440112\": \"黄埔区\",\n\t    \"440113\": \"番禺区\",\n\t    \"440114\": \"花都区\",\n\t    \"440115\": \"南沙区\",\n\t    \"440116\": \"萝岗区\",\n\t    \"440183\": \"增城市\",\n\t    \"440184\": \"从化市\",\n\t    \"440189\": \"其它区\",\n\t    \"440200\": \"韶关市\",\n\t    \"440203\": \"武江区\",\n\t    \"440204\": \"浈江区\",\n\t    \"440205\": \"曲江区\",\n\t    \"440222\": \"始兴县\",\n\t    \"440224\": \"仁化县\",\n\t    \"440229\": \"翁源县\",\n\t    \"440232\": \"乳源瑶族自治县\",\n\t    \"440233\": \"新丰县\",\n\t    \"440281\": \"乐昌市\",\n\t    \"440282\": \"南雄市\",\n\t    \"440283\": \"其它区\",\n\t    \"440300\": \"深圳市\",\n\t    \"440303\": \"罗湖区\",\n\t    \"440304\": \"福田区\",\n\t    \"440305\": \"南山区\",\n\t    \"440306\": \"宝安区\",\n\t    \"440307\": \"龙岗区\",\n\t    \"440308\": \"盐田区\",\n\t    \"440309\": \"其它区\",\n\t    \"440320\": \"光明新区\",\n\t    \"440321\": \"坪山新区\",\n\t    \"440322\": \"大鹏新区\",\n\t    \"440323\": \"龙华新区\",\n\t    \"440400\": \"珠海市\",\n\t    \"440402\": \"香洲区\",\n\t    \"440403\": \"斗门区\",\n\t    \"440404\": \"金湾区\",\n\t    \"440488\": \"其它区\",\n\t    \"440500\": \"汕头市\",\n\t    \"440507\": \"龙湖区\",\n\t    \"440511\": \"金平区\",\n\t    \"440512\": \"濠江区\",\n\t    \"440513\": \"潮阳区\",\n\t    \"440514\": \"潮南区\",\n\t    \"440515\": \"澄海区\",\n\t    \"440523\": \"南澳县\",\n\t    \"440524\": \"其它区\",\n\t    \"440600\": \"佛山市\",\n\t    \"440604\": \"禅城区\",\n\t    \"440605\": \"南海区\",\n\t    \"440606\": \"顺德区\",\n\t    \"440607\": \"三水区\",\n\t    \"440608\": \"高明区\",\n\t    \"440609\": \"其它区\",\n\t    \"440700\": \"江门市\",\n\t    \"440703\": \"蓬江区\",\n\t    \"440704\": \"江海区\",\n\t    \"440705\": \"新会区\",\n\t    \"440781\": \"台山市\",\n\t    \"440783\": \"开平市\",\n\t    \"440784\": \"鹤山市\",\n\t    \"440785\": \"恩平市\",\n\t    \"440786\": \"其它区\",\n\t    \"440800\": \"湛江市\",\n\t    \"440802\": \"赤坎区\",\n\t    \"440803\": \"霞山区\",\n\t    \"440804\": \"坡头区\",\n\t    \"440811\": \"麻章区\",\n\t    \"440823\": \"遂溪县\",\n\t    \"440825\": \"徐闻县\",\n\t    \"440881\": \"廉江市\",\n\t    \"440882\": \"雷州市\",\n\t    \"440883\": \"吴川市\",\n\t    \"440884\": \"其它区\",\n\t    \"440900\": \"茂名市\",\n\t    \"440902\": \"茂南区\",\n\t    \"440903\": \"茂港区\",\n\t    \"440923\": \"电白县\",\n\t    \"440981\": \"高州市\",\n\t    \"440982\": \"化州市\",\n\t    \"440983\": \"信宜市\",\n\t    \"440984\": \"其它区\",\n\t    \"441200\": \"肇庆市\",\n\t    \"441202\": \"端州区\",\n\t    \"441203\": \"鼎湖区\",\n\t    \"441223\": \"广宁县\",\n\t    \"441224\": \"怀集县\",\n\t    \"441225\": \"封开县\",\n\t    \"441226\": \"德庆县\",\n\t    \"441283\": \"高要市\",\n\t    \"441284\": \"四会市\",\n\t    \"441285\": \"其它区\",\n\t    \"441300\": \"惠州市\",\n\t    \"441302\": \"惠城区\",\n\t    \"441303\": \"惠阳区\",\n\t    \"441322\": \"博罗县\",\n\t    \"441323\": \"惠东县\",\n\t    \"441324\": \"龙门县\",\n\t    \"441325\": \"其它区\",\n\t    \"441400\": \"梅州市\",\n\t    \"441402\": \"梅江区\",\n\t    \"441421\": \"梅县\",\n\t    \"441422\": \"大埔县\",\n\t    \"441423\": \"丰顺县\",\n\t    \"441424\": \"五华县\",\n\t    \"441426\": \"平远县\",\n\t    \"441427\": \"蕉岭县\",\n\t    \"441481\": \"兴宁市\",\n\t    \"441482\": \"其它区\",\n\t    \"441500\": \"汕尾市\",\n\t    \"441502\": \"城区\",\n\t    \"441521\": \"海丰县\",\n\t    \"441523\": \"陆河县\",\n\t    \"441581\": \"陆丰市\",\n\t    \"441582\": \"其它区\",\n\t    \"441600\": \"河源市\",\n\t    \"441602\": \"源城区\",\n\t    \"441621\": \"紫金县\",\n\t    \"441622\": \"龙川县\",\n\t    \"441623\": \"连平县\",\n\t    \"441624\": \"和平县\",\n\t    \"441625\": \"东源县\",\n\t    \"441626\": \"其它区\",\n\t    \"441700\": \"阳江市\",\n\t    \"441702\": \"江城区\",\n\t    \"441721\": \"阳西县\",\n\t    \"441723\": \"阳东县\",\n\t    \"441781\": \"阳春市\",\n\t    \"441782\": \"其它区\",\n\t    \"441800\": \"清远市\",\n\t    \"441802\": \"清城区\",\n\t    \"441821\": \"佛冈县\",\n\t    \"441823\": \"阳山县\",\n\t    \"441825\": \"连山壮族瑶族自治县\",\n\t    \"441826\": \"连南瑶族自治县\",\n\t    \"441827\": \"清新区\",\n\t    \"441881\": \"英德市\",\n\t    \"441882\": \"连州市\",\n\t    \"441883\": \"其它区\",\n\t    \"441900\": \"东莞市\",\n\t    \"442000\": \"中山市\",\n\t    \"442101\": \"东沙群岛\",\n\t    \"445100\": \"潮州市\",\n\t    \"445102\": \"湘桥区\",\n\t    \"445121\": \"潮安区\",\n\t    \"445122\": \"饶平县\",\n\t    \"445186\": \"其它区\",\n\t    \"445200\": \"揭阳市\",\n\t    \"445202\": \"榕城区\",\n\t    \"445221\": \"揭东区\",\n\t    \"445222\": \"揭西县\",\n\t    \"445224\": \"惠来县\",\n\t    \"445281\": \"普宁市\",\n\t    \"445285\": \"其它区\",\n\t    \"445300\": \"云浮市\",\n\t    \"445302\": \"云城区\",\n\t    \"445321\": \"新兴县\",\n\t    \"445322\": \"郁南县\",\n\t    \"445323\": \"云安县\",\n\t    \"445381\": \"罗定市\",\n\t    \"445382\": \"其它区\",\n\t    \"450000\": \"广西壮族自治区\",\n\t    \"450100\": \"南宁市\",\n\t    \"450102\": \"兴宁区\",\n\t    \"450103\": \"青秀区\",\n\t    \"450105\": \"江南区\",\n\t    \"450107\": \"西乡塘区\",\n\t    \"450108\": \"良庆区\",\n\t    \"450109\": \"邕宁区\",\n\t    \"450122\": \"武鸣县\",\n\t    \"450123\": \"隆安县\",\n\t    \"450124\": \"马山县\",\n\t    \"450125\": \"上林县\",\n\t    \"450126\": \"宾阳县\",\n\t    \"450127\": \"横县\",\n\t    \"450128\": \"其它区\",\n\t    \"450200\": \"柳州市\",\n\t    \"450202\": \"城中区\",\n\t    \"450203\": \"鱼峰区\",\n\t    \"450204\": \"柳南区\",\n\t    \"450205\": \"柳北区\",\n\t    \"450221\": \"柳江县\",\n\t    \"450222\": \"柳城县\",\n\t    \"450223\": \"鹿寨县\",\n\t    \"450224\": \"融安县\",\n\t    \"450225\": \"融水苗族自治县\",\n\t    \"450226\": \"三江侗族自治县\",\n\t    \"450227\": \"其它区\",\n\t    \"450300\": \"桂林市\",\n\t    \"450302\": \"秀峰区\",\n\t    \"450303\": \"叠彩区\",\n\t    \"450304\": \"象山区\",\n\t    \"450305\": \"七星区\",\n\t    \"450311\": \"雁山区\",\n\t    \"450321\": \"阳朔县\",\n\t    \"450322\": \"临桂区\",\n\t    \"450323\": \"灵川县\",\n\t    \"450324\": \"全州县\",\n\t    \"450325\": \"兴安县\",\n\t    \"450326\": \"永福县\",\n\t    \"450327\": \"灌阳县\",\n\t    \"450328\": \"龙胜各族自治县\",\n\t    \"450329\": \"资源县\",\n\t    \"450330\": \"平乐县\",\n\t    \"450331\": \"荔浦县\",\n\t    \"450332\": \"恭城瑶族自治县\",\n\t    \"450333\": \"其它区\",\n\t    \"450400\": \"梧州市\",\n\t    \"450403\": \"万秀区\",\n\t    \"450405\": \"长洲区\",\n\t    \"450406\": \"龙圩区\",\n\t    \"450421\": \"苍梧县\",\n\t    \"450422\": \"藤县\",\n\t    \"450423\": \"蒙山县\",\n\t    \"450481\": \"岑溪市\",\n\t    \"450482\": \"其它区\",\n\t    \"450500\": \"北海市\",\n\t    \"450502\": \"海城区\",\n\t    \"450503\": \"银海区\",\n\t    \"450512\": \"铁山港区\",\n\t    \"450521\": \"合浦县\",\n\t    \"450522\": \"其它区\",\n\t    \"450600\": \"防城港市\",\n\t    \"450602\": \"港口区\",\n\t    \"450603\": \"防城区\",\n\t    \"450621\": \"上思县\",\n\t    \"450681\": \"东兴市\",\n\t    \"450682\": \"其它区\",\n\t    \"450700\": \"钦州市\",\n\t    \"450702\": \"钦南区\",\n\t    \"450703\": \"钦北区\",\n\t    \"450721\": \"灵山县\",\n\t    \"450722\": \"浦北县\",\n\t    \"450723\": \"其它区\",\n\t    \"450800\": \"贵港市\",\n\t    \"450802\": \"港北区\",\n\t    \"450803\": \"港南区\",\n\t    \"450804\": \"覃塘区\",\n\t    \"450821\": \"平南县\",\n\t    \"450881\": \"桂平市\",\n\t    \"450882\": \"其它区\",\n\t    \"450900\": \"玉林市\",\n\t    \"450902\": \"玉州区\",\n\t    \"450903\": \"福绵区\",\n\t    \"450921\": \"容县\",\n\t    \"450922\": \"陆川县\",\n\t    \"450923\": \"博白县\",\n\t    \"450924\": \"兴业县\",\n\t    \"450981\": \"北流市\",\n\t    \"450982\": \"其它区\",\n\t    \"451000\": \"百色市\",\n\t    \"451002\": \"右江区\",\n\t    \"451021\": \"田阳县\",\n\t    \"451022\": \"田东县\",\n\t    \"451023\": \"平果县\",\n\t    \"451024\": \"德保县\",\n\t    \"451025\": \"靖西县\",\n\t    \"451026\": \"那坡县\",\n\t    \"451027\": \"凌云县\",\n\t    \"451028\": \"乐业县\",\n\t    \"451029\": \"田林县\",\n\t    \"451030\": \"西林县\",\n\t    \"451031\": \"隆林各族自治县\",\n\t    \"451032\": \"其它区\",\n\t    \"451100\": \"贺州市\",\n\t    \"451102\": \"八步区\",\n\t    \"451119\": \"平桂管理区\",\n\t    \"451121\": \"昭平县\",\n\t    \"451122\": \"钟山县\",\n\t    \"451123\": \"富川瑶族自治县\",\n\t    \"451124\": \"其它区\",\n\t    \"451200\": \"河池市\",\n\t    \"451202\": \"金城江区\",\n\t    \"451221\": \"南丹县\",\n\t    \"451222\": \"天峨县\",\n\t    \"451223\": \"凤山县\",\n\t    \"451224\": \"东兰县\",\n\t    \"451225\": \"罗城仫佬族自治县\",\n\t    \"451226\": \"环江毛南族自治县\",\n\t    \"451227\": \"巴马瑶族自治县\",\n\t    \"451228\": \"都安瑶族自治县\",\n\t    \"451229\": \"大化瑶族自治县\",\n\t    \"451281\": \"宜州市\",\n\t    \"451282\": \"其它区\",\n\t    \"451300\": \"来宾市\",\n\t    \"451302\": \"兴宾区\",\n\t    \"451321\": \"忻城县\",\n\t    \"451322\": \"象州县\",\n\t    \"451323\": \"武宣县\",\n\t    \"451324\": \"金秀瑶族自治县\",\n\t    \"451381\": \"合山市\",\n\t    \"451382\": \"其它区\",\n\t    \"451400\": \"崇左市\",\n\t    \"451402\": \"江州区\",\n\t    \"451421\": \"扶绥县\",\n\t    \"451422\": \"宁明县\",\n\t    \"451423\": \"龙州县\",\n\t    \"451424\": \"大新县\",\n\t    \"451425\": \"天等县\",\n\t    \"451481\": \"凭祥市\",\n\t    \"451482\": \"其它区\",\n\t    \"460000\": \"海南省\",\n\t    \"460100\": \"海口市\",\n\t    \"460105\": \"秀英区\",\n\t    \"460106\": \"龙华区\",\n\t    \"460107\": \"琼山区\",\n\t    \"460108\": \"美兰区\",\n\t    \"460109\": \"其它区\",\n\t    \"460200\": \"三亚市\",\n\t    \"460300\": \"三沙市\",\n\t    \"460321\": \"西沙群岛\",\n\t    \"460322\": \"南沙群岛\",\n\t    \"460323\": \"中沙群岛的岛礁及其海域\",\n\t    \"469001\": \"五指山市\",\n\t    \"469002\": \"琼海市\",\n\t    \"469003\": \"儋州市\",\n\t    \"469005\": \"文昌市\",\n\t    \"469006\": \"万宁市\",\n\t    \"469007\": \"东方市\",\n\t    \"469025\": \"定安县\",\n\t    \"469026\": \"屯昌县\",\n\t    \"469027\": \"澄迈县\",\n\t    \"469028\": \"临高县\",\n\t    \"469030\": \"白沙黎族自治县\",\n\t    \"469031\": \"昌江黎族自治县\",\n\t    \"469033\": \"乐东黎族自治县\",\n\t    \"469034\": \"陵水黎族自治县\",\n\t    \"469035\": \"保亭黎族苗族自治县\",\n\t    \"469036\": \"琼中黎族苗族自治县\",\n\t    \"471005\": \"其它区\",\n\t    \"500000\": \"重庆\",\n\t    \"500100\": \"重庆市\",\n\t    \"500101\": \"万州区\",\n\t    \"500102\": \"涪陵区\",\n\t    \"500103\": \"渝中区\",\n\t    \"500104\": \"大渡口区\",\n\t    \"500105\": \"江北区\",\n\t    \"500106\": \"沙坪坝区\",\n\t    \"500107\": \"九龙坡区\",\n\t    \"500108\": \"南岸区\",\n\t    \"500109\": \"北碚区\",\n\t    \"500110\": \"万盛区\",\n\t    \"500111\": \"双桥区\",\n\t    \"500112\": \"渝北区\",\n\t    \"500113\": \"巴南区\",\n\t    \"500114\": \"黔江区\",\n\t    \"500115\": \"长寿区\",\n\t    \"500222\": \"綦江区\",\n\t    \"500223\": \"潼南县\",\n\t    \"500224\": \"铜梁县\",\n\t    \"500225\": \"大足区\",\n\t    \"500226\": \"荣昌县\",\n\t    \"500227\": \"璧山县\",\n\t    \"500228\": \"梁平县\",\n\t    \"500229\": \"城口县\",\n\t    \"500230\": \"丰都县\",\n\t    \"500231\": \"垫江县\",\n\t    \"500232\": \"武隆县\",\n\t    \"500233\": \"忠县\",\n\t    \"500234\": \"开县\",\n\t    \"500235\": \"云阳县\",\n\t    \"500236\": \"奉节县\",\n\t    \"500237\": \"巫山县\",\n\t    \"500238\": \"巫溪县\",\n\t    \"500240\": \"石柱土家族自治县\",\n\t    \"500241\": \"秀山土家族苗族自治县\",\n\t    \"500242\": \"酉阳土家族苗族自治县\",\n\t    \"500243\": \"彭水苗族土家族自治县\",\n\t    \"500381\": \"江津区\",\n\t    \"500382\": \"合川区\",\n\t    \"500383\": \"永川区\",\n\t    \"500384\": \"南川区\",\n\t    \"500385\": \"其它区\",\n\t    \"510000\": \"四川省\",\n\t    \"510100\": \"成都市\",\n\t    \"510104\": \"锦江区\",\n\t    \"510105\": \"青羊区\",\n\t    \"510106\": \"金牛区\",\n\t    \"510107\": \"武侯区\",\n\t    \"510108\": \"成华区\",\n\t    \"510112\": \"龙泉驿区\",\n\t    \"510113\": \"青白江区\",\n\t    \"510114\": \"新都区\",\n\t    \"510115\": \"温江区\",\n\t    \"510121\": \"金堂县\",\n\t    \"510122\": \"双流县\",\n\t    \"510124\": \"郫县\",\n\t    \"510129\": \"大邑县\",\n\t    \"510131\": \"蒲江县\",\n\t    \"510132\": \"新津县\",\n\t    \"510181\": \"都江堰市\",\n\t    \"510182\": \"彭州市\",\n\t    \"510183\": \"邛崃市\",\n\t    \"510184\": \"崇州市\",\n\t    \"510185\": \"其它区\",\n\t    \"510300\": \"自贡市\",\n\t    \"510302\": \"自流井区\",\n\t    \"510303\": \"贡井区\",\n\t    \"510304\": \"大安区\",\n\t    \"510311\": \"沿滩区\",\n\t    \"510321\": \"荣县\",\n\t    \"510322\": \"富顺县\",\n\t    \"510323\": \"其它区\",\n\t    \"510400\": \"攀枝花市\",\n\t    \"510402\": \"东区\",\n\t    \"510403\": \"西区\",\n\t    \"510411\": \"仁和区\",\n\t    \"510421\": \"米易县\",\n\t    \"510422\": \"盐边县\",\n\t    \"510423\": \"其它区\",\n\t    \"510500\": \"泸州市\",\n\t    \"510502\": \"江阳区\",\n\t    \"510503\": \"纳溪区\",\n\t    \"510504\": \"龙马潭区\",\n\t    \"510521\": \"泸县\",\n\t    \"510522\": \"合江县\",\n\t    \"510524\": \"叙永县\",\n\t    \"510525\": \"古蔺县\",\n\t    \"510526\": \"其它区\",\n\t    \"510600\": \"德阳市\",\n\t    \"510603\": \"旌阳区\",\n\t    \"510623\": \"中江县\",\n\t    \"510626\": \"罗江县\",\n\t    \"510681\": \"广汉市\",\n\t    \"510682\": \"什邡市\",\n\t    \"510683\": \"绵竹市\",\n\t    \"510684\": \"其它区\",\n\t    \"510700\": \"绵阳市\",\n\t    \"510703\": \"涪城区\",\n\t    \"510704\": \"游仙区\",\n\t    \"510722\": \"三台县\",\n\t    \"510723\": \"盐亭县\",\n\t    \"510724\": \"安县\",\n\t    \"510725\": \"梓潼县\",\n\t    \"510726\": \"北川羌族自治县\",\n\t    \"510727\": \"平武县\",\n\t    \"510781\": \"江油市\",\n\t    \"510782\": \"其它区\",\n\t    \"510800\": \"广元市\",\n\t    \"510802\": \"利州区\",\n\t    \"510811\": \"昭化区\",\n\t    \"510812\": \"朝天区\",\n\t    \"510821\": \"旺苍县\",\n\t    \"510822\": \"青川县\",\n\t    \"510823\": \"剑阁县\",\n\t    \"510824\": \"苍溪县\",\n\t    \"510825\": \"其它区\",\n\t    \"510900\": \"遂宁市\",\n\t    \"510903\": \"船山区\",\n\t    \"510904\": \"安居区\",\n\t    \"510921\": \"蓬溪县\",\n\t    \"510922\": \"射洪县\",\n\t    \"510923\": \"大英县\",\n\t    \"510924\": \"其它区\",\n\t    \"511000\": \"内江市\",\n\t    \"511002\": \"市中区\",\n\t    \"511011\": \"东兴区\",\n\t    \"511024\": \"威远县\",\n\t    \"511025\": \"资中县\",\n\t    \"511028\": \"隆昌县\",\n\t    \"511029\": \"其它区\",\n\t    \"511100\": \"乐山市\",\n\t    \"511102\": \"市中区\",\n\t    \"511111\": \"沙湾区\",\n\t    \"511112\": \"五通桥区\",\n\t    \"511113\": \"金口河区\",\n\t    \"511123\": \"犍为县\",\n\t    \"511124\": \"井研县\",\n\t    \"511126\": \"夹江县\",\n\t    \"511129\": \"沐川县\",\n\t    \"511132\": \"峨边彝族自治县\",\n\t    \"511133\": \"马边彝族自治县\",\n\t    \"511181\": \"峨眉山市\",\n\t    \"511182\": \"其它区\",\n\t    \"511300\": \"南充市\",\n\t    \"511302\": \"顺庆区\",\n\t    \"511303\": \"高坪区\",\n\t    \"511304\": \"嘉陵区\",\n\t    \"511321\": \"南部县\",\n\t    \"511322\": \"营山县\",\n\t    \"511323\": \"蓬安县\",\n\t    \"511324\": \"仪陇县\",\n\t    \"511325\": \"西充县\",\n\t    \"511381\": \"阆中市\",\n\t    \"511382\": \"其它区\",\n\t    \"511400\": \"眉山市\",\n\t    \"511402\": \"东坡区\",\n\t    \"511421\": \"仁寿县\",\n\t    \"511422\": \"彭山县\",\n\t    \"511423\": \"洪雅县\",\n\t    \"511424\": \"丹棱县\",\n\t    \"511425\": \"青神县\",\n\t    \"511426\": \"其它区\",\n\t    \"511500\": \"宜宾市\",\n\t    \"511502\": \"翠屏区\",\n\t    \"511521\": \"宜宾县\",\n\t    \"511522\": \"南溪区\",\n\t    \"511523\": \"江安县\",\n\t    \"511524\": \"长宁县\",\n\t    \"511525\": \"高县\",\n\t    \"511526\": \"珙县\",\n\t    \"511527\": \"筠连县\",\n\t    \"511528\": \"兴文县\",\n\t    \"511529\": \"屏山县\",\n\t    \"511530\": \"其它区\",\n\t    \"511600\": \"广安市\",\n\t    \"511602\": \"广安区\",\n\t    \"511603\": \"前锋区\",\n\t    \"511621\": \"岳池县\",\n\t    \"511622\": \"武胜县\",\n\t    \"511623\": \"邻水县\",\n\t    \"511681\": \"华蓥市\",\n\t    \"511683\": \"其它区\",\n\t    \"511700\": \"达州市\",\n\t    \"511702\": \"通川区\",\n\t    \"511721\": \"达川区\",\n\t    \"511722\": \"宣汉县\",\n\t    \"511723\": \"开江县\",\n\t    \"511724\": \"大竹县\",\n\t    \"511725\": \"渠县\",\n\t    \"511781\": \"万源市\",\n\t    \"511782\": \"其它区\",\n\t    \"511800\": \"雅安市\",\n\t    \"511802\": \"雨城区\",\n\t    \"511821\": \"名山区\",\n\t    \"511822\": \"荥经县\",\n\t    \"511823\": \"汉源县\",\n\t    \"511824\": \"石棉县\",\n\t    \"511825\": \"天全县\",\n\t    \"511826\": \"芦山县\",\n\t    \"511827\": \"宝兴县\",\n\t    \"511828\": \"其它区\",\n\t    \"511900\": \"巴中市\",\n\t    \"511902\": \"巴州区\",\n\t    \"511903\": \"恩阳区\",\n\t    \"511921\": \"通江县\",\n\t    \"511922\": \"南江县\",\n\t    \"511923\": \"平昌县\",\n\t    \"511924\": \"其它区\",\n\t    \"512000\": \"资阳市\",\n\t    \"512002\": \"雁江区\",\n\t    \"512021\": \"安岳县\",\n\t    \"512022\": \"乐至县\",\n\t    \"512081\": \"简阳市\",\n\t    \"512082\": \"其它区\",\n\t    \"513200\": \"阿坝藏族羌族自治州\",\n\t    \"513221\": \"汶川县\",\n\t    \"513222\": \"理县\",\n\t    \"513223\": \"茂县\",\n\t    \"513224\": \"松潘县\",\n\t    \"513225\": \"九寨沟县\",\n\t    \"513226\": \"金川县\",\n\t    \"513227\": \"小金县\",\n\t    \"513228\": \"黑水县\",\n\t    \"513229\": \"马尔康县\",\n\t    \"513230\": \"壤塘县\",\n\t    \"513231\": \"阿坝县\",\n\t    \"513232\": \"若尔盖县\",\n\t    \"513233\": \"红原县\",\n\t    \"513234\": \"其它区\",\n\t    \"513300\": \"甘孜藏族自治州\",\n\t    \"513321\": \"康定县\",\n\t    \"513322\": \"泸定县\",\n\t    \"513323\": \"丹巴县\",\n\t    \"513324\": \"九龙县\",\n\t    \"513325\": \"雅江县\",\n\t    \"513326\": \"道孚县\",\n\t    \"513327\": \"炉霍县\",\n\t    \"513328\": \"甘孜县\",\n\t    \"513329\": \"新龙县\",\n\t    \"513330\": \"德格县\",\n\t    \"513331\": \"白玉县\",\n\t    \"513332\": \"石渠县\",\n\t    \"513333\": \"色达县\",\n\t    \"513334\": \"理塘县\",\n\t    \"513335\": \"巴塘县\",\n\t    \"513336\": \"乡城县\",\n\t    \"513337\": \"稻城县\",\n\t    \"513338\": \"得荣县\",\n\t    \"513339\": \"其它区\",\n\t    \"513400\": \"凉山彝族自治州\",\n\t    \"513401\": \"西昌市\",\n\t    \"513422\": \"木里藏族自治县\",\n\t    \"513423\": \"盐源县\",\n\t    \"513424\": \"德昌县\",\n\t    \"513425\": \"会理县\",\n\t    \"513426\": \"会东县\",\n\t    \"513427\": \"宁南县\",\n\t    \"513428\": \"普格县\",\n\t    \"513429\": \"布拖县\",\n\t    \"513430\": \"金阳县\",\n\t    \"513431\": \"昭觉县\",\n\t    \"513432\": \"喜德县\",\n\t    \"513433\": \"冕宁县\",\n\t    \"513434\": \"越西县\",\n\t    \"513435\": \"甘洛县\",\n\t    \"513436\": \"美姑县\",\n\t    \"513437\": \"雷波县\",\n\t    \"513438\": \"其它区\",\n\t    \"520000\": \"贵州省\",\n\t    \"520100\": \"贵阳市\",\n\t    \"520102\": \"南明区\",\n\t    \"520103\": \"云岩区\",\n\t    \"520111\": \"花溪区\",\n\t    \"520112\": \"乌当区\",\n\t    \"520113\": \"白云区\",\n\t    \"520121\": \"开阳县\",\n\t    \"520122\": \"息烽县\",\n\t    \"520123\": \"修文县\",\n\t    \"520151\": \"观山湖区\",\n\t    \"520181\": \"清镇市\",\n\t    \"520182\": \"其它区\",\n\t    \"520200\": \"六盘水市\",\n\t    \"520201\": \"钟山区\",\n\t    \"520203\": \"六枝特区\",\n\t    \"520221\": \"水城县\",\n\t    \"520222\": \"盘县\",\n\t    \"520223\": \"其它区\",\n\t    \"520300\": \"遵义市\",\n\t    \"520302\": \"红花岗区\",\n\t    \"520303\": \"汇川区\",\n\t    \"520321\": \"遵义县\",\n\t    \"520322\": \"桐梓县\",\n\t    \"520323\": \"绥阳县\",\n\t    \"520324\": \"正安县\",\n\t    \"520325\": \"道真仡佬族苗族自治县\",\n\t    \"520326\": \"务川仡佬族苗族自治县\",\n\t    \"520327\": \"凤冈县\",\n\t    \"520328\": \"湄潭县\",\n\t    \"520329\": \"余庆县\",\n\t    \"520330\": \"习水县\",\n\t    \"520381\": \"赤水市\",\n\t    \"520382\": \"仁怀市\",\n\t    \"520383\": \"其它区\",\n\t    \"520400\": \"安顺市\",\n\t    \"520402\": \"西秀区\",\n\t    \"520421\": \"平坝县\",\n\t    \"520422\": \"普定县\",\n\t    \"520423\": \"镇宁布依族苗族自治县\",\n\t    \"520424\": \"关岭布依族苗族自治县\",\n\t    \"520425\": \"紫云苗族布依族自治县\",\n\t    \"520426\": \"其它区\",\n\t    \"522200\": \"铜仁市\",\n\t    \"522201\": \"碧江区\",\n\t    \"522222\": \"江口县\",\n\t    \"522223\": \"玉屏侗族自治县\",\n\t    \"522224\": \"石阡县\",\n\t    \"522225\": \"思南县\",\n\t    \"522226\": \"印江土家族苗族自治县\",\n\t    \"522227\": \"德江县\",\n\t    \"522228\": \"沿河土家族自治县\",\n\t    \"522229\": \"松桃苗族自治县\",\n\t    \"522230\": \"万山区\",\n\t    \"522231\": \"其它区\",\n\t    \"522300\": \"黔西南布依族苗族自治州\",\n\t    \"522301\": \"兴义市\",\n\t    \"522322\": \"兴仁县\",\n\t    \"522323\": \"普安县\",\n\t    \"522324\": \"晴隆县\",\n\t    \"522325\": \"贞丰县\",\n\t    \"522326\": \"望谟县\",\n\t    \"522327\": \"册亨县\",\n\t    \"522328\": \"安龙县\",\n\t    \"522329\": \"其它区\",\n\t    \"522400\": \"毕节市\",\n\t    \"522401\": \"七星关区\",\n\t    \"522422\": \"大方县\",\n\t    \"522423\": \"黔西县\",\n\t    \"522424\": \"金沙县\",\n\t    \"522425\": \"织金县\",\n\t    \"522426\": \"纳雍县\",\n\t    \"522427\": \"威宁彝族回族苗族自治县\",\n\t    \"522428\": \"赫章县\",\n\t    \"522429\": \"其它区\",\n\t    \"522600\": \"黔东南苗族侗族自治州\",\n\t    \"522601\": \"凯里市\",\n\t    \"522622\": \"黄平县\",\n\t    \"522623\": \"施秉县\",\n\t    \"522624\": \"三穗县\",\n\t    \"522625\": \"镇远县\",\n\t    \"522626\": \"岑巩县\",\n\t    \"522627\": \"天柱县\",\n\t    \"522628\": \"锦屏县\",\n\t    \"522629\": \"剑河县\",\n\t    \"522630\": \"台江县\",\n\t    \"522631\": \"黎平县\",\n\t    \"522632\": \"榕江县\",\n\t    \"522633\": \"从江县\",\n\t    \"522634\": \"雷山县\",\n\t    \"522635\": \"麻江县\",\n\t    \"522636\": \"丹寨县\",\n\t    \"522637\": \"其它区\",\n\t    \"522700\": \"黔南布依族苗族自治州\",\n\t    \"522701\": \"都匀市\",\n\t    \"522702\": \"福泉市\",\n\t    \"522722\": \"荔波县\",\n\t    \"522723\": \"贵定县\",\n\t    \"522725\": \"瓮安县\",\n\t    \"522726\": \"独山县\",\n\t    \"522727\": \"平塘县\",\n\t    \"522728\": \"罗甸县\",\n\t    \"522729\": \"长顺县\",\n\t    \"522730\": \"龙里县\",\n\t    \"522731\": \"惠水县\",\n\t    \"522732\": \"三都水族自治县\",\n\t    \"522733\": \"其它区\",\n\t    \"530000\": \"云南省\",\n\t    \"530100\": \"昆明市\",\n\t    \"530102\": \"五华区\",\n\t    \"530103\": \"盘龙区\",\n\t    \"530111\": \"官渡区\",\n\t    \"530112\": \"西山区\",\n\t    \"530113\": \"东川区\",\n\t    \"530121\": \"呈贡区\",\n\t    \"530122\": \"晋宁县\",\n\t    \"530124\": \"富民县\",\n\t    \"530125\": \"宜良县\",\n\t    \"530126\": \"石林彝族自治县\",\n\t    \"530127\": \"嵩明县\",\n\t    \"530128\": \"禄劝彝族苗族自治县\",\n\t    \"530129\": \"寻甸回族彝族自治县\",\n\t    \"530181\": \"安宁市\",\n\t    \"530182\": \"其它区\",\n\t    \"530300\": \"曲靖市\",\n\t    \"530302\": \"麒麟区\",\n\t    \"530321\": \"马龙县\",\n\t    \"530322\": \"陆良县\",\n\t    \"530323\": \"师宗县\",\n\t    \"530324\": \"罗平县\",\n\t    \"530325\": \"富源县\",\n\t    \"530326\": \"会泽县\",\n\t    \"530328\": \"沾益县\",\n\t    \"530381\": \"宣威市\",\n\t    \"530382\": \"其它区\",\n\t    \"530400\": \"玉溪市\",\n\t    \"530402\": \"红塔区\",\n\t    \"530421\": \"江川县\",\n\t    \"530422\": \"澄江县\",\n\t    \"530423\": \"通海县\",\n\t    \"530424\": \"华宁县\",\n\t    \"530425\": \"易门县\",\n\t    \"530426\": \"峨山彝族自治县\",\n\t    \"530427\": \"新平彝族傣族自治县\",\n\t    \"530428\": \"元江哈尼族彝族傣族自治县\",\n\t    \"530429\": \"其它区\",\n\t    \"530500\": \"保山市\",\n\t    \"530502\": \"隆阳区\",\n\t    \"530521\": \"施甸县\",\n\t    \"530522\": \"腾冲县\",\n\t    \"530523\": \"龙陵县\",\n\t    \"530524\": \"昌宁县\",\n\t    \"530525\": \"其它区\",\n\t    \"530600\": \"昭通市\",\n\t    \"530602\": \"昭阳区\",\n\t    \"530621\": \"鲁甸县\",\n\t    \"530622\": \"巧家县\",\n\t    \"530623\": \"盐津县\",\n\t    \"530624\": \"大关县\",\n\t    \"530625\": \"永善县\",\n\t    \"530626\": \"绥江县\",\n\t    \"530627\": \"镇雄县\",\n\t    \"530628\": \"彝良县\",\n\t    \"530629\": \"威信县\",\n\t    \"530630\": \"水富县\",\n\t    \"530631\": \"其它区\",\n\t    \"530700\": \"丽江市\",\n\t    \"530702\": \"古城区\",\n\t    \"530721\": \"玉龙纳西族自治县\",\n\t    \"530722\": \"永胜县\",\n\t    \"530723\": \"华坪县\",\n\t    \"530724\": \"宁蒗彝族自治县\",\n\t    \"530725\": \"其它区\",\n\t    \"530800\": \"普洱市\",\n\t    \"530802\": \"思茅区\",\n\t    \"530821\": \"宁洱哈尼族彝族自治县\",\n\t    \"530822\": \"墨江哈尼族自治县\",\n\t    \"530823\": \"景东彝族自治县\",\n\t    \"530824\": \"景谷傣族彝族自治县\",\n\t    \"530825\": \"镇沅彝族哈尼族拉祜族自治县\",\n\t    \"530826\": \"江城哈尼族彝族自治县\",\n\t    \"530827\": \"孟连傣族拉祜族佤族自治县\",\n\t    \"530828\": \"澜沧拉祜族自治县\",\n\t    \"530829\": \"西盟佤族自治县\",\n\t    \"530830\": \"其它区\",\n\t    \"530900\": \"临沧市\",\n\t    \"530902\": \"临翔区\",\n\t    \"530921\": \"凤庆县\",\n\t    \"530922\": \"云县\",\n\t    \"530923\": \"永德县\",\n\t    \"530924\": \"镇康县\",\n\t    \"530925\": \"双江拉祜族佤族布朗族傣族自治县\",\n\t    \"530926\": \"耿马傣族佤族自治县\",\n\t    \"530927\": \"沧源佤族自治县\",\n\t    \"530928\": \"其它区\",\n\t    \"532300\": \"楚雄彝族自治州\",\n\t    \"532301\": \"楚雄市\",\n\t    \"532322\": \"双柏县\",\n\t    \"532323\": \"牟定县\",\n\t    \"532324\": \"南华县\",\n\t    \"532325\": \"姚安县\",\n\t    \"532326\": \"大姚县\",\n\t    \"532327\": \"永仁县\",\n\t    \"532328\": \"元谋县\",\n\t    \"532329\": \"武定县\",\n\t    \"532331\": \"禄丰县\",\n\t    \"532332\": \"其它区\",\n\t    \"532500\": \"红河哈尼族彝族自治州\",\n\t    \"532501\": \"个旧市\",\n\t    \"532502\": \"开远市\",\n\t    \"532522\": \"蒙自市\",\n\t    \"532523\": \"屏边苗族自治县\",\n\t    \"532524\": \"建水县\",\n\t    \"532525\": \"石屏县\",\n\t    \"532526\": \"弥勒市\",\n\t    \"532527\": \"泸西县\",\n\t    \"532528\": \"元阳县\",\n\t    \"532529\": \"红河县\",\n\t    \"532530\": \"金平苗族瑶族傣族自治县\",\n\t    \"532531\": \"绿春县\",\n\t    \"532532\": \"河口瑶族自治县\",\n\t    \"532533\": \"其它区\",\n\t    \"532600\": \"文山壮族苗族自治州\",\n\t    \"532621\": \"文山市\",\n\t    \"532622\": \"砚山县\",\n\t    \"532623\": \"西畴县\",\n\t    \"532624\": \"麻栗坡县\",\n\t    \"532625\": \"马关县\",\n\t    \"532626\": \"丘北县\",\n\t    \"532627\": \"广南县\",\n\t    \"532628\": \"富宁县\",\n\t    \"532629\": \"其它区\",\n\t    \"532800\": \"西双版纳傣族自治州\",\n\t    \"532801\": \"景洪市\",\n\t    \"532822\": \"勐海县\",\n\t    \"532823\": \"勐腊县\",\n\t    \"532824\": \"其它区\",\n\t    \"532900\": \"大理白族自治州\",\n\t    \"532901\": \"大理市\",\n\t    \"532922\": \"漾濞彝族自治县\",\n\t    \"532923\": \"祥云县\",\n\t    \"532924\": \"宾川县\",\n\t    \"532925\": \"弥渡县\",\n\t    \"532926\": \"南涧彝族自治县\",\n\t    \"532927\": \"巍山彝族回族自治县\",\n\t    \"532928\": \"永平县\",\n\t    \"532929\": \"云龙县\",\n\t    \"532930\": \"洱源县\",\n\t    \"532931\": \"剑川县\",\n\t    \"532932\": \"鹤庆县\",\n\t    \"532933\": \"其它区\",\n\t    \"533100\": \"德宏傣族景颇族自治州\",\n\t    \"533102\": \"瑞丽市\",\n\t    \"533103\": \"芒市\",\n\t    \"533122\": \"梁河县\",\n\t    \"533123\": \"盈江县\",\n\t    \"533124\": \"陇川县\",\n\t    \"533125\": \"其它区\",\n\t    \"533300\": \"怒江傈僳族自治州\",\n\t    \"533321\": \"泸水县\",\n\t    \"533323\": \"福贡县\",\n\t    \"533324\": \"贡山独龙族怒族自治县\",\n\t    \"533325\": \"兰坪白族普米族自治县\",\n\t    \"533326\": \"其它区\",\n\t    \"533400\": \"迪庆藏族自治州\",\n\t    \"533421\": \"香格里拉县\",\n\t    \"533422\": \"德钦县\",\n\t    \"533423\": \"维西傈僳族自治县\",\n\t    \"533424\": \"其它区\",\n\t    \"540000\": \"西藏自治区\",\n\t    \"540100\": \"拉萨市\",\n\t    \"540102\": \"城关区\",\n\t    \"540121\": \"林周县\",\n\t    \"540122\": \"当雄县\",\n\t    \"540123\": \"尼木县\",\n\t    \"540124\": \"曲水县\",\n\t    \"540125\": \"堆龙德庆县\",\n\t    \"540126\": \"达孜县\",\n\t    \"540127\": \"墨竹工卡县\",\n\t    \"540128\": \"其它区\",\n\t    \"542100\": \"昌都地区\",\n\t    \"542121\": \"昌都县\",\n\t    \"542122\": \"江达县\",\n\t    \"542123\": \"贡觉县\",\n\t    \"542124\": \"类乌齐县\",\n\t    \"542125\": \"丁青县\",\n\t    \"542126\": \"察雅县\",\n\t    \"542127\": \"八宿县\",\n\t    \"542128\": \"左贡县\",\n\t    \"542129\": \"芒康县\",\n\t    \"542132\": \"洛隆县\",\n\t    \"542133\": \"边坝县\",\n\t    \"542134\": \"其它区\",\n\t    \"542200\": \"山南地区\",\n\t    \"542221\": \"乃东县\",\n\t    \"542222\": \"扎囊县\",\n\t    \"542223\": \"贡嘎县\",\n\t    \"542224\": \"桑日县\",\n\t    \"542225\": \"琼结县\",\n\t    \"542226\": \"曲松县\",\n\t    \"542227\": \"措美县\",\n\t    \"542228\": \"洛扎县\",\n\t    \"542229\": \"加查县\",\n\t    \"542231\": \"隆子县\",\n\t    \"542232\": \"错那县\",\n\t    \"542233\": \"浪卡子县\",\n\t    \"542234\": \"其它区\",\n\t    \"542300\": \"日喀则地区\",\n\t    \"542301\": \"日喀则市\",\n\t    \"542322\": \"南木林县\",\n\t    \"542323\": \"江孜县\",\n\t    \"542324\": \"定日县\",\n\t    \"542325\": \"萨迦县\",\n\t    \"542326\": \"拉孜县\",\n\t    \"542327\": \"昂仁县\",\n\t    \"542328\": \"谢通门县\",\n\t    \"542329\": \"白朗县\",\n\t    \"542330\": \"仁布县\",\n\t    \"542331\": \"康马县\",\n\t    \"542332\": \"定结县\",\n\t    \"542333\": \"仲巴县\",\n\t    \"542334\": \"亚东县\",\n\t    \"542335\": \"吉隆县\",\n\t    \"542336\": \"聂拉木县\",\n\t    \"542337\": \"萨嘎县\",\n\t    \"542338\": \"岗巴县\",\n\t    \"542339\": \"其它区\",\n\t    \"542400\": \"那曲地区\",\n\t    \"542421\": \"那曲县\",\n\t    \"542422\": \"嘉黎县\",\n\t    \"542423\": \"比如县\",\n\t    \"542424\": \"聂荣县\",\n\t    \"542425\": \"安多县\",\n\t    \"542426\": \"申扎县\",\n\t    \"542427\": \"索县\",\n\t    \"542428\": \"班戈县\",\n\t    \"542429\": \"巴青县\",\n\t    \"542430\": \"尼玛县\",\n\t    \"542431\": \"其它区\",\n\t    \"542432\": \"双湖县\",\n\t    \"542500\": \"阿里地区\",\n\t    \"542521\": \"普兰县\",\n\t    \"542522\": \"札达县\",\n\t    \"542523\": \"噶尔县\",\n\t    \"542524\": \"日土县\",\n\t    \"542525\": \"革吉县\",\n\t    \"542526\": \"改则县\",\n\t    \"542527\": \"措勤县\",\n\t    \"542528\": \"其它区\",\n\t    \"542600\": \"林芝地区\",\n\t    \"542621\": \"林芝县\",\n\t    \"542622\": \"工布江达县\",\n\t    \"542623\": \"米林县\",\n\t    \"542624\": \"墨脱县\",\n\t    \"542625\": \"波密县\",\n\t    \"542626\": \"察隅县\",\n\t    \"542627\": \"朗县\",\n\t    \"542628\": \"其它区\",\n\t    \"610000\": \"陕西省\",\n\t    \"610100\": \"西安市\",\n\t    \"610102\": \"新城区\",\n\t    \"610103\": \"碑林区\",\n\t    \"610104\": \"莲湖区\",\n\t    \"610111\": \"灞桥区\",\n\t    \"610112\": \"未央区\",\n\t    \"610113\": \"雁塔区\",\n\t    \"610114\": \"阎良区\",\n\t    \"610115\": \"临潼区\",\n\t    \"610116\": \"长安区\",\n\t    \"610122\": \"蓝田县\",\n\t    \"610124\": \"周至县\",\n\t    \"610125\": \"户县\",\n\t    \"610126\": \"高陵县\",\n\t    \"610127\": \"其它区\",\n\t    \"610200\": \"铜川市\",\n\t    \"610202\": \"王益区\",\n\t    \"610203\": \"印台区\",\n\t    \"610204\": \"耀州区\",\n\t    \"610222\": \"宜君县\",\n\t    \"610223\": \"其它区\",\n\t    \"610300\": \"宝鸡市\",\n\t    \"610302\": \"渭滨区\",\n\t    \"610303\": \"金台区\",\n\t    \"610304\": \"陈仓区\",\n\t    \"610322\": \"凤翔县\",\n\t    \"610323\": \"岐山县\",\n\t    \"610324\": \"扶风县\",\n\t    \"610326\": \"眉县\",\n\t    \"610327\": \"陇县\",\n\t    \"610328\": \"千阳县\",\n\t    \"610329\": \"麟游县\",\n\t    \"610330\": \"凤县\",\n\t    \"610331\": \"太白县\",\n\t    \"610332\": \"其它区\",\n\t    \"610400\": \"咸阳市\",\n\t    \"610402\": \"秦都区\",\n\t    \"610403\": \"杨陵区\",\n\t    \"610404\": \"渭城区\",\n\t    \"610422\": \"三原县\",\n\t    \"610423\": \"泾阳县\",\n\t    \"610424\": \"乾县\",\n\t    \"610425\": \"礼泉县\",\n\t    \"610426\": \"永寿县\",\n\t    \"610427\": \"彬县\",\n\t    \"610428\": \"长武县\",\n\t    \"610429\": \"旬邑县\",\n\t    \"610430\": \"淳化县\",\n\t    \"610431\": \"武功县\",\n\t    \"610481\": \"兴平市\",\n\t    \"610482\": \"其它区\",\n\t    \"610500\": \"渭南市\",\n\t    \"610502\": \"临渭区\",\n\t    \"610521\": \"华县\",\n\t    \"610522\": \"潼关县\",\n\t    \"610523\": \"大荔县\",\n\t    \"610524\": \"合阳县\",\n\t    \"610525\": \"澄城县\",\n\t    \"610526\": \"蒲城县\",\n\t    \"610527\": \"白水县\",\n\t    \"610528\": \"富平县\",\n\t    \"610581\": \"韩城市\",\n\t    \"610582\": \"华阴市\",\n\t    \"610583\": \"其它区\",\n\t    \"610600\": \"延安市\",\n\t    \"610602\": \"宝塔区\",\n\t    \"610621\": \"延长县\",\n\t    \"610622\": \"延川县\",\n\t    \"610623\": \"子长县\",\n\t    \"610624\": \"安塞县\",\n\t    \"610625\": \"志丹县\",\n\t    \"610626\": \"吴起县\",\n\t    \"610627\": \"甘泉县\",\n\t    \"610628\": \"富县\",\n\t    \"610629\": \"洛川县\",\n\t    \"610630\": \"宜川县\",\n\t    \"610631\": \"黄龙县\",\n\t    \"610632\": \"黄陵县\",\n\t    \"610633\": \"其它区\",\n\t    \"610700\": \"汉中市\",\n\t    \"610702\": \"汉台区\",\n\t    \"610721\": \"南郑县\",\n\t    \"610722\": \"城固县\",\n\t    \"610723\": \"洋县\",\n\t    \"610724\": \"西乡县\",\n\t    \"610725\": \"勉县\",\n\t    \"610726\": \"宁强县\",\n\t    \"610727\": \"略阳县\",\n\t    \"610728\": \"镇巴县\",\n\t    \"610729\": \"留坝县\",\n\t    \"610730\": \"佛坪县\",\n\t    \"610731\": \"其它区\",\n\t    \"610800\": \"榆林市\",\n\t    \"610802\": \"榆阳区\",\n\t    \"610821\": \"神木县\",\n\t    \"610822\": \"府谷县\",\n\t    \"610823\": \"横山县\",\n\t    \"610824\": \"靖边县\",\n\t    \"610825\": \"定边县\",\n\t    \"610826\": \"绥德县\",\n\t    \"610827\": \"米脂县\",\n\t    \"610828\": \"佳县\",\n\t    \"610829\": \"吴堡县\",\n\t    \"610830\": \"清涧县\",\n\t    \"610831\": \"子洲县\",\n\t    \"610832\": \"其它区\",\n\t    \"610900\": \"安康市\",\n\t    \"610902\": \"汉滨区\",\n\t    \"610921\": \"汉阴县\",\n\t    \"610922\": \"石泉县\",\n\t    \"610923\": \"宁陕县\",\n\t    \"610924\": \"紫阳县\",\n\t    \"610925\": \"岚皋县\",\n\t    \"610926\": \"平利县\",\n\t    \"610927\": \"镇坪县\",\n\t    \"610928\": \"旬阳县\",\n\t    \"610929\": \"白河县\",\n\t    \"610930\": \"其它区\",\n\t    \"611000\": \"商洛市\",\n\t    \"611002\": \"商州区\",\n\t    \"611021\": \"洛南县\",\n\t    \"611022\": \"丹凤县\",\n\t    \"611023\": \"商南县\",\n\t    \"611024\": \"山阳县\",\n\t    \"611025\": \"镇安县\",\n\t    \"611026\": \"柞水县\",\n\t    \"611027\": \"其它区\",\n\t    \"620000\": \"甘肃省\",\n\t    \"620100\": \"兰州市\",\n\t    \"620102\": \"城关区\",\n\t    \"620103\": \"七里河区\",\n\t    \"620104\": \"西固区\",\n\t    \"620105\": \"安宁区\",\n\t    \"620111\": \"红古区\",\n\t    \"620121\": \"永登县\",\n\t    \"620122\": \"皋兰县\",\n\t    \"620123\": \"榆中县\",\n\t    \"620124\": \"其它区\",\n\t    \"620200\": \"嘉峪关市\",\n\t    \"620300\": \"金昌市\",\n\t    \"620302\": \"金川区\",\n\t    \"620321\": \"永昌县\",\n\t    \"620322\": \"其它区\",\n\t    \"620400\": \"白银市\",\n\t    \"620402\": \"白银区\",\n\t    \"620403\": \"平川区\",\n\t    \"620421\": \"靖远县\",\n\t    \"620422\": \"会宁县\",\n\t    \"620423\": \"景泰县\",\n\t    \"620424\": \"其它区\",\n\t    \"620500\": \"天水市\",\n\t    \"620502\": \"秦州区\",\n\t    \"620503\": \"麦积区\",\n\t    \"620521\": \"清水县\",\n\t    \"620522\": \"秦安县\",\n\t    \"620523\": \"甘谷县\",\n\t    \"620524\": \"武山县\",\n\t    \"620525\": \"张家川回族自治县\",\n\t    \"620526\": \"其它区\",\n\t    \"620600\": \"武威市\",\n\t    \"620602\": \"凉州区\",\n\t    \"620621\": \"民勤县\",\n\t    \"620622\": \"古浪县\",\n\t    \"620623\": \"天祝藏族自治县\",\n\t    \"620624\": \"其它区\",\n\t    \"620700\": \"张掖市\",\n\t    \"620702\": \"甘州区\",\n\t    \"620721\": \"肃南裕固族自治县\",\n\t    \"620722\": \"民乐县\",\n\t    \"620723\": \"临泽县\",\n\t    \"620724\": \"高台县\",\n\t    \"620725\": \"山丹县\",\n\t    \"620726\": \"其它区\",\n\t    \"620800\": \"平凉市\",\n\t    \"620802\": \"崆峒区\",\n\t    \"620821\": \"泾川县\",\n\t    \"620822\": \"灵台县\",\n\t    \"620823\": \"崇信县\",\n\t    \"620824\": \"华亭县\",\n\t    \"620825\": \"庄浪县\",\n\t    \"620826\": \"静宁县\",\n\t    \"620827\": \"其它区\",\n\t    \"620900\": \"酒泉市\",\n\t    \"620902\": \"肃州区\",\n\t    \"620921\": \"金塔县\",\n\t    \"620922\": \"瓜州县\",\n\t    \"620923\": \"肃北蒙古族自治县\",\n\t    \"620924\": \"阿克塞哈萨克族自治县\",\n\t    \"620981\": \"玉门市\",\n\t    \"620982\": \"敦煌市\",\n\t    \"620983\": \"其它区\",\n\t    \"621000\": \"庆阳市\",\n\t    \"621002\": \"西峰区\",\n\t    \"621021\": \"庆城县\",\n\t    \"621022\": \"环县\",\n\t    \"621023\": \"华池县\",\n\t    \"621024\": \"合水县\",\n\t    \"621025\": \"正宁县\",\n\t    \"621026\": \"宁县\",\n\t    \"621027\": \"镇原县\",\n\t    \"621028\": \"其它区\",\n\t    \"621100\": \"定西市\",\n\t    \"621102\": \"安定区\",\n\t    \"621121\": \"通渭县\",\n\t    \"621122\": \"陇西县\",\n\t    \"621123\": \"渭源县\",\n\t    \"621124\": \"临洮县\",\n\t    \"621125\": \"漳县\",\n\t    \"621126\": \"岷县\",\n\t    \"621127\": \"其它区\",\n\t    \"621200\": \"陇南市\",\n\t    \"621202\": \"武都区\",\n\t    \"621221\": \"成县\",\n\t    \"621222\": \"文县\",\n\t    \"621223\": \"宕昌县\",\n\t    \"621224\": \"康县\",\n\t    \"621225\": \"西和县\",\n\t    \"621226\": \"礼县\",\n\t    \"621227\": \"徽县\",\n\t    \"621228\": \"两当县\",\n\t    \"621229\": \"其它区\",\n\t    \"622900\": \"临夏回族自治州\",\n\t    \"622901\": \"临夏市\",\n\t    \"622921\": \"临夏县\",\n\t    \"622922\": \"康乐县\",\n\t    \"622923\": \"永靖县\",\n\t    \"622924\": \"广河县\",\n\t    \"622925\": \"和政县\",\n\t    \"622926\": \"东乡族自治县\",\n\t    \"622927\": \"积石山保安族东乡族撒拉族自治县\",\n\t    \"622928\": \"其它区\",\n\t    \"623000\": \"甘南藏族自治州\",\n\t    \"623001\": \"合作市\",\n\t    \"623021\": \"临潭县\",\n\t    \"623022\": \"卓尼县\",\n\t    \"623023\": \"舟曲县\",\n\t    \"623024\": \"迭部县\",\n\t    \"623025\": \"玛曲县\",\n\t    \"623026\": \"碌曲县\",\n\t    \"623027\": \"夏河县\",\n\t    \"623028\": \"其它区\",\n\t    \"630000\": \"青海省\",\n\t    \"630100\": \"西宁市\",\n\t    \"630102\": \"城东区\",\n\t    \"630103\": \"城中区\",\n\t    \"630104\": \"城西区\",\n\t    \"630105\": \"城北区\",\n\t    \"630121\": \"大通回族土族自治县\",\n\t    \"630122\": \"湟中县\",\n\t    \"630123\": \"湟源县\",\n\t    \"630124\": \"其它区\",\n\t    \"632100\": \"海东市\",\n\t    \"632121\": \"平安县\",\n\t    \"632122\": \"民和回族土族自治县\",\n\t    \"632123\": \"乐都区\",\n\t    \"632126\": \"互助土族自治县\",\n\t    \"632127\": \"化隆回族自治县\",\n\t    \"632128\": \"循化撒拉族自治县\",\n\t    \"632129\": \"其它区\",\n\t    \"632200\": \"海北藏族自治州\",\n\t    \"632221\": \"门源回族自治县\",\n\t    \"632222\": \"祁连县\",\n\t    \"632223\": \"海晏县\",\n\t    \"632224\": \"刚察县\",\n\t    \"632225\": \"其它区\",\n\t    \"632300\": \"黄南藏族自治州\",\n\t    \"632321\": \"同仁县\",\n\t    \"632322\": \"尖扎县\",\n\t    \"632323\": \"泽库县\",\n\t    \"632324\": \"河南蒙古族自治县\",\n\t    \"632325\": \"其它区\",\n\t    \"632500\": \"海南藏族自治州\",\n\t    \"632521\": \"共和县\",\n\t    \"632522\": \"同德县\",\n\t    \"632523\": \"贵德县\",\n\t    \"632524\": \"兴海县\",\n\t    \"632525\": \"贵南县\",\n\t    \"632526\": \"其它区\",\n\t    \"632600\": \"果洛藏族自治州\",\n\t    \"632621\": \"玛沁县\",\n\t    \"632622\": \"班玛县\",\n\t    \"632623\": \"甘德县\",\n\t    \"632624\": \"达日县\",\n\t    \"632625\": \"久治县\",\n\t    \"632626\": \"玛多县\",\n\t    \"632627\": \"其它区\",\n\t    \"632700\": \"玉树藏族自治州\",\n\t    \"632721\": \"玉树市\",\n\t    \"632722\": \"杂多县\",\n\t    \"632723\": \"称多县\",\n\t    \"632724\": \"治多县\",\n\t    \"632725\": \"囊谦县\",\n\t    \"632726\": \"曲麻莱县\",\n\t    \"632727\": \"其它区\",\n\t    \"632800\": \"海西蒙古族藏族自治州\",\n\t    \"632801\": \"格尔木市\",\n\t    \"632802\": \"德令哈市\",\n\t    \"632821\": \"乌兰县\",\n\t    \"632822\": \"都兰县\",\n\t    \"632823\": \"天峻县\",\n\t    \"632824\": \"其它区\",\n\t    \"640000\": \"宁夏回族自治区\",\n\t    \"640100\": \"银川市\",\n\t    \"640104\": \"兴庆区\",\n\t    \"640105\": \"西夏区\",\n\t    \"640106\": \"金凤区\",\n\t    \"640121\": \"永宁县\",\n\t    \"640122\": \"贺兰县\",\n\t    \"640181\": \"灵武市\",\n\t    \"640182\": \"其它区\",\n\t    \"640200\": \"石嘴山市\",\n\t    \"640202\": \"大武口区\",\n\t    \"640205\": \"惠农区\",\n\t    \"640221\": \"平罗县\",\n\t    \"640222\": \"其它区\",\n\t    \"640300\": \"吴忠市\",\n\t    \"640302\": \"利通区\",\n\t    \"640303\": \"红寺堡区\",\n\t    \"640323\": \"盐池县\",\n\t    \"640324\": \"同心县\",\n\t    \"640381\": \"青铜峡市\",\n\t    \"640382\": \"其它区\",\n\t    \"640400\": \"固原市\",\n\t    \"640402\": \"原州区\",\n\t    \"640422\": \"西吉县\",\n\t    \"640423\": \"隆德县\",\n\t    \"640424\": \"泾源县\",\n\t    \"640425\": \"彭阳县\",\n\t    \"640426\": \"其它区\",\n\t    \"640500\": \"中卫市\",\n\t    \"640502\": \"沙坡头区\",\n\t    \"640521\": \"中宁县\",\n\t    \"640522\": \"海原县\",\n\t    \"640523\": \"其它区\",\n\t    \"650000\": \"新疆维吾尔自治区\",\n\t    \"650100\": \"乌鲁木齐市\",\n\t    \"650102\": \"天山区\",\n\t    \"650103\": \"沙依巴克区\",\n\t    \"650104\": \"新市区\",\n\t    \"650105\": \"水磨沟区\",\n\t    \"650106\": \"头屯河区\",\n\t    \"650107\": \"达坂城区\",\n\t    \"650109\": \"米东区\",\n\t    \"650121\": \"乌鲁木齐县\",\n\t    \"650122\": \"其它区\",\n\t    \"650200\": \"克拉玛依市\",\n\t    \"650202\": \"独山子区\",\n\t    \"650203\": \"克拉玛依区\",\n\t    \"650204\": \"白碱滩区\",\n\t    \"650205\": \"乌尔禾区\",\n\t    \"650206\": \"其它区\",\n\t    \"652100\": \"吐鲁番地区\",\n\t    \"652101\": \"吐鲁番市\",\n\t    \"652122\": \"鄯善县\",\n\t    \"652123\": \"托克逊县\",\n\t    \"652124\": \"其它区\",\n\t    \"652200\": \"哈密地区\",\n\t    \"652201\": \"哈密市\",\n\t    \"652222\": \"巴里坤哈萨克自治县\",\n\t    \"652223\": \"伊吾县\",\n\t    \"652224\": \"其它区\",\n\t    \"652300\": \"昌吉回族自治州\",\n\t    \"652301\": \"昌吉市\",\n\t    \"652302\": \"阜康市\",\n\t    \"652323\": \"呼图壁县\",\n\t    \"652324\": \"玛纳斯县\",\n\t    \"652325\": \"奇台县\",\n\t    \"652327\": \"吉木萨尔县\",\n\t    \"652328\": \"木垒哈萨克自治县\",\n\t    \"652329\": \"其它区\",\n\t    \"652700\": \"博尔塔拉蒙古自治州\",\n\t    \"652701\": \"博乐市\",\n\t    \"652702\": \"阿拉山口市\",\n\t    \"652722\": \"精河县\",\n\t    \"652723\": \"温泉县\",\n\t    \"652724\": \"其它区\",\n\t    \"652800\": \"巴音郭楞蒙古自治州\",\n\t    \"652801\": \"库尔勒市\",\n\t    \"652822\": \"轮台县\",\n\t    \"652823\": \"尉犁县\",\n\t    \"652824\": \"若羌县\",\n\t    \"652825\": \"且末县\",\n\t    \"652826\": \"焉耆回族自治县\",\n\t    \"652827\": \"和静县\",\n\t    \"652828\": \"和硕县\",\n\t    \"652829\": \"博湖县\",\n\t    \"652830\": \"其它区\",\n\t    \"652900\": \"阿克苏地区\",\n\t    \"652901\": \"阿克苏市\",\n\t    \"652922\": \"温宿县\",\n\t    \"652923\": \"库车县\",\n\t    \"652924\": \"沙雅县\",\n\t    \"652925\": \"新和县\",\n\t    \"652926\": \"拜城县\",\n\t    \"652927\": \"乌什县\",\n\t    \"652928\": \"阿瓦提县\",\n\t    \"652929\": \"柯坪县\",\n\t    \"652930\": \"其它区\",\n\t    \"653000\": \"克孜勒苏柯尔克孜自治州\",\n\t    \"653001\": \"阿图什市\",\n\t    \"653022\": \"阿克陶县\",\n\t    \"653023\": \"阿合奇县\",\n\t    \"653024\": \"乌恰县\",\n\t    \"653025\": \"其它区\",\n\t    \"653100\": \"喀什地区\",\n\t    \"653101\": \"喀什市\",\n\t    \"653121\": \"疏附县\",\n\t    \"653122\": \"疏勒县\",\n\t    \"653123\": \"英吉沙县\",\n\t    \"653124\": \"泽普县\",\n\t    \"653125\": \"莎车县\",\n\t    \"653126\": \"叶城县\",\n\t    \"653127\": \"麦盖提县\",\n\t    \"653128\": \"岳普湖县\",\n\t    \"653129\": \"伽师县\",\n\t    \"653130\": \"巴楚县\",\n\t    \"653131\": \"塔什库尔干塔吉克自治县\",\n\t    \"653132\": \"其它区\",\n\t    \"653200\": \"和田地区\",\n\t    \"653201\": \"和田市\",\n\t    \"653221\": \"和田县\",\n\t    \"653222\": \"墨玉县\",\n\t    \"653223\": \"皮山县\",\n\t    \"653224\": \"洛浦县\",\n\t    \"653225\": \"策勒县\",\n\t    \"653226\": \"于田县\",\n\t    \"653227\": \"民丰县\",\n\t    \"653228\": \"其它区\",\n\t    \"654000\": \"伊犁哈萨克自治州\",\n\t    \"654002\": \"伊宁市\",\n\t    \"654003\": \"奎屯市\",\n\t    \"654021\": \"伊宁县\",\n\t    \"654022\": \"察布查尔锡伯自治县\",\n\t    \"654023\": \"霍城县\",\n\t    \"654024\": \"巩留县\",\n\t    \"654025\": \"新源县\",\n\t    \"654026\": \"昭苏县\",\n\t    \"654027\": \"特克斯县\",\n\t    \"654028\": \"尼勒克县\",\n\t    \"654029\": \"其它区\",\n\t    \"654200\": \"塔城地区\",\n\t    \"654201\": \"塔城市\",\n\t    \"654202\": \"乌苏市\",\n\t    \"654221\": \"额敏县\",\n\t    \"654223\": \"沙湾县\",\n\t    \"654224\": \"托里县\",\n\t    \"654225\": \"裕民县\",\n\t    \"654226\": \"和布克赛尔蒙古自治县\",\n\t    \"654227\": \"其它区\",\n\t    \"654300\": \"阿勒泰地区\",\n\t    \"654301\": \"阿勒泰市\",\n\t    \"654321\": \"布尔津县\",\n\t    \"654322\": \"富蕴县\",\n\t    \"654323\": \"福海县\",\n\t    \"654324\": \"哈巴河县\",\n\t    \"654325\": \"青河县\",\n\t    \"654326\": \"吉木乃县\",\n\t    \"654327\": \"其它区\",\n\t    \"659001\": \"石河子市\",\n\t    \"659002\": \"阿拉尔市\",\n\t    \"659003\": \"图木舒克市\",\n\t    \"659004\": \"五家渠市\",\n\t    \"710000\": \"台湾\",\n\t    \"710100\": \"台北市\",\n\t    \"710101\": \"中正区\",\n\t    \"710102\": \"大同区\",\n\t    \"710103\": \"中山区\",\n\t    \"710104\": \"松山区\",\n\t    \"710105\": \"大安区\",\n\t    \"710106\": \"万华区\",\n\t    \"710107\": \"信义区\",\n\t    \"710108\": \"士林区\",\n\t    \"710109\": \"北投区\",\n\t    \"710110\": \"内湖区\",\n\t    \"710111\": \"南港区\",\n\t    \"710112\": \"文山区\",\n\t    \"710113\": \"其它区\",\n\t    \"710200\": \"高雄市\",\n\t    \"710201\": \"新兴区\",\n\t    \"710202\": \"前金区\",\n\t    \"710203\": \"芩雅区\",\n\t    \"710204\": \"盐埕区\",\n\t    \"710205\": \"鼓山区\",\n\t    \"710206\": \"旗津区\",\n\t    \"710207\": \"前镇区\",\n\t    \"710208\": \"三民区\",\n\t    \"710209\": \"左营区\",\n\t    \"710210\": \"楠梓区\",\n\t    \"710211\": \"小港区\",\n\t    \"710212\": \"其它区\",\n\t    \"710241\": \"苓雅区\",\n\t    \"710242\": \"仁武区\",\n\t    \"710243\": \"大社区\",\n\t    \"710244\": \"冈山区\",\n\t    \"710245\": \"路竹区\",\n\t    \"710246\": \"阿莲区\",\n\t    \"710247\": \"田寮区\",\n\t    \"710248\": \"燕巢区\",\n\t    \"710249\": \"桥头区\",\n\t    \"710250\": \"梓官区\",\n\t    \"710251\": \"弥陀区\",\n\t    \"710252\": \"永安区\",\n\t    \"710253\": \"湖内区\",\n\t    \"710254\": \"凤山区\",\n\t    \"710255\": \"大寮区\",\n\t    \"710256\": \"林园区\",\n\t    \"710257\": \"鸟松区\",\n\t    \"710258\": \"大树区\",\n\t    \"710259\": \"旗山区\",\n\t    \"710260\": \"美浓区\",\n\t    \"710261\": \"六龟区\",\n\t    \"710262\": \"内门区\",\n\t    \"710263\": \"杉林区\",\n\t    \"710264\": \"甲仙区\",\n\t    \"710265\": \"桃源区\",\n\t    \"710266\": \"那玛夏区\",\n\t    \"710267\": \"茂林区\",\n\t    \"710268\": \"茄萣区\",\n\t    \"710300\": \"台南市\",\n\t    \"710301\": \"中西区\",\n\t    \"710302\": \"东区\",\n\t    \"710303\": \"南区\",\n\t    \"710304\": \"北区\",\n\t    \"710305\": \"安平区\",\n\t    \"710306\": \"安南区\",\n\t    \"710307\": \"其它区\",\n\t    \"710339\": \"永康区\",\n\t    \"710340\": \"归仁区\",\n\t    \"710341\": \"新化区\",\n\t    \"710342\": \"左镇区\",\n\t    \"710343\": \"玉井区\",\n\t    \"710344\": \"楠西区\",\n\t    \"710345\": \"南化区\",\n\t    \"710346\": \"仁德区\",\n\t    \"710347\": \"关庙区\",\n\t    \"710348\": \"龙崎区\",\n\t    \"710349\": \"官田区\",\n\t    \"710350\": \"麻豆区\",\n\t    \"710351\": \"佳里区\",\n\t    \"710352\": \"西港区\",\n\t    \"710353\": \"七股区\",\n\t    \"710354\": \"将军区\",\n\t    \"710355\": \"学甲区\",\n\t    \"710356\": \"北门区\",\n\t    \"710357\": \"新营区\",\n\t    \"710358\": \"后壁区\",\n\t    \"710359\": \"白河区\",\n\t    \"710360\": \"东山区\",\n\t    \"710361\": \"六甲区\",\n\t    \"710362\": \"下营区\",\n\t    \"710363\": \"柳营区\",\n\t    \"710364\": \"盐水区\",\n\t    \"710365\": \"善化区\",\n\t    \"710366\": \"大内区\",\n\t    \"710367\": \"山上区\",\n\t    \"710368\": \"新市区\",\n\t    \"710369\": \"安定区\",\n\t    \"710400\": \"台中市\",\n\t    \"710401\": \"中区\",\n\t    \"710402\": \"东区\",\n\t    \"710403\": \"南区\",\n\t    \"710404\": \"西区\",\n\t    \"710405\": \"北区\",\n\t    \"710406\": \"北屯区\",\n\t    \"710407\": \"西屯区\",\n\t    \"710408\": \"南屯区\",\n\t    \"710409\": \"其它区\",\n\t    \"710431\": \"太平区\",\n\t    \"710432\": \"大里区\",\n\t    \"710433\": \"雾峰区\",\n\t    \"710434\": \"乌日区\",\n\t    \"710435\": \"丰原区\",\n\t    \"710436\": \"后里区\",\n\t    \"710437\": \"石冈区\",\n\t    \"710438\": \"东势区\",\n\t    \"710439\": \"和平区\",\n\t    \"710440\": \"新社区\",\n\t    \"710441\": \"潭子区\",\n\t    \"710442\": \"大雅区\",\n\t    \"710443\": \"神冈区\",\n\t    \"710444\": \"大肚区\",\n\t    \"710445\": \"沙鹿区\",\n\t    \"710446\": \"龙井区\",\n\t    \"710447\": \"梧栖区\",\n\t    \"710448\": \"清水区\",\n\t    \"710449\": \"大甲区\",\n\t    \"710450\": \"外埔区\",\n\t    \"710451\": \"大安区\",\n\t    \"710500\": \"金门县\",\n\t    \"710507\": \"金沙镇\",\n\t    \"710508\": \"金湖镇\",\n\t    \"710509\": \"金宁乡\",\n\t    \"710510\": \"金城镇\",\n\t    \"710511\": \"烈屿乡\",\n\t    \"710512\": \"乌坵乡\",\n\t    \"710600\": \"南投县\",\n\t    \"710614\": \"南投市\",\n\t    \"710615\": \"中寮乡\",\n\t    \"710616\": \"草屯镇\",\n\t    \"710617\": \"国姓乡\",\n\t    \"710618\": \"埔里镇\",\n\t    \"710619\": \"仁爱乡\",\n\t    \"710620\": \"名间乡\",\n\t    \"710621\": \"集集镇\",\n\t    \"710622\": \"水里乡\",\n\t    \"710623\": \"鱼池乡\",\n\t    \"710624\": \"信义乡\",\n\t    \"710625\": \"竹山镇\",\n\t    \"710626\": \"鹿谷乡\",\n\t    \"710700\": \"基隆市\",\n\t    \"710701\": \"仁爱区\",\n\t    \"710702\": \"信义区\",\n\t    \"710703\": \"中正区\",\n\t    \"710704\": \"中山区\",\n\t    \"710705\": \"安乐区\",\n\t    \"710706\": \"暖暖区\",\n\t    \"710707\": \"七堵区\",\n\t    \"710708\": \"其它区\",\n\t    \"710800\": \"新竹市\",\n\t    \"710801\": \"东区\",\n\t    \"710802\": \"北区\",\n\t    \"710803\": \"香山区\",\n\t    \"710804\": \"其它区\",\n\t    \"710900\": \"嘉义市\",\n\t    \"710901\": \"东区\",\n\t    \"710902\": \"西区\",\n\t    \"710903\": \"其它区\",\n\t    \"711100\": \"新北市\",\n\t    \"711130\": \"万里区\",\n\t    \"711131\": \"金山区\",\n\t    \"711132\": \"板桥区\",\n\t    \"711133\": \"汐止区\",\n\t    \"711134\": \"深坑区\",\n\t    \"711135\": \"石碇区\",\n\t    \"711136\": \"瑞芳区\",\n\t    \"711137\": \"平溪区\",\n\t    \"711138\": \"双溪区\",\n\t    \"711139\": \"贡寮区\",\n\t    \"711140\": \"新店区\",\n\t    \"711141\": \"坪林区\",\n\t    \"711142\": \"乌来区\",\n\t    \"711143\": \"永和区\",\n\t    \"711144\": \"中和区\",\n\t    \"711145\": \"土城区\",\n\t    \"711146\": \"三峡区\",\n\t    \"711147\": \"树林区\",\n\t    \"711148\": \"莺歌区\",\n\t    \"711149\": \"三重区\",\n\t    \"711150\": \"新庄区\",\n\t    \"711151\": \"泰山区\",\n\t    \"711152\": \"林口区\",\n\t    \"711153\": \"芦洲区\",\n\t    \"711154\": \"五股区\",\n\t    \"711155\": \"八里区\",\n\t    \"711156\": \"淡水区\",\n\t    \"711157\": \"三芝区\",\n\t    \"711158\": \"石门区\",\n\t    \"711200\": \"宜兰县\",\n\t    \"711214\": \"宜兰市\",\n\t    \"711215\": \"头城镇\",\n\t    \"711216\": \"礁溪乡\",\n\t    \"711217\": \"壮围乡\",\n\t    \"711218\": \"员山乡\",\n\t    \"711219\": \"罗东镇\",\n\t    \"711220\": \"三星乡\",\n\t    \"711221\": \"大同乡\",\n\t    \"711222\": \"五结乡\",\n\t    \"711223\": \"冬山乡\",\n\t    \"711224\": \"苏澳镇\",\n\t    \"711225\": \"南澳乡\",\n\t    \"711226\": \"钓鱼台\",\n\t    \"711300\": \"新竹县\",\n\t    \"711314\": \"竹北市\",\n\t    \"711315\": \"湖口乡\",\n\t    \"711316\": \"新丰乡\",\n\t    \"711317\": \"新埔镇\",\n\t    \"711318\": \"关西镇\",\n\t    \"711319\": \"芎林乡\",\n\t    \"711320\": \"宝山乡\",\n\t    \"711321\": \"竹东镇\",\n\t    \"711322\": \"五峰乡\",\n\t    \"711323\": \"横山乡\",\n\t    \"711324\": \"尖石乡\",\n\t    \"711325\": \"北埔乡\",\n\t    \"711326\": \"峨眉乡\",\n\t    \"711400\": \"桃园县\",\n\t    \"711414\": \"中坜市\",\n\t    \"711415\": \"平镇市\",\n\t    \"711416\": \"龙潭乡\",\n\t    \"711417\": \"杨梅市\",\n\t    \"711418\": \"新屋乡\",\n\t    \"711419\": \"观音乡\",\n\t    \"711420\": \"桃园市\",\n\t    \"711421\": \"龟山乡\",\n\t    \"711422\": \"八德市\",\n\t    \"711423\": \"大溪镇\",\n\t    \"711424\": \"复兴乡\",\n\t    \"711425\": \"大园乡\",\n\t    \"711426\": \"芦竹乡\",\n\t    \"711500\": \"苗栗县\",\n\t    \"711519\": \"竹南镇\",\n\t    \"711520\": \"头份镇\",\n\t    \"711521\": \"三湾乡\",\n\t    \"711522\": \"南庄乡\",\n\t    \"711523\": \"狮潭乡\",\n\t    \"711524\": \"后龙镇\",\n\t    \"711525\": \"通霄镇\",\n\t    \"711526\": \"苑里镇\",\n\t    \"711527\": \"苗栗市\",\n\t    \"711528\": \"造桥乡\",\n\t    \"711529\": \"头屋乡\",\n\t    \"711530\": \"公馆乡\",\n\t    \"711531\": \"大湖乡\",\n\t    \"711532\": \"泰安乡\",\n\t    \"711533\": \"铜锣乡\",\n\t    \"711534\": \"三义乡\",\n\t    \"711535\": \"西湖乡\",\n\t    \"711536\": \"卓兰镇\",\n\t    \"711700\": \"彰化县\",\n\t    \"711727\": \"彰化市\",\n\t    \"711728\": \"芬园乡\",\n\t    \"711729\": \"花坛乡\",\n\t    \"711730\": \"秀水乡\",\n\t    \"711731\": \"鹿港镇\",\n\t    \"711732\": \"福兴乡\",\n\t    \"711733\": \"线西乡\",\n\t    \"711734\": \"和美镇\",\n\t    \"711735\": \"伸港乡\",\n\t    \"711736\": \"员林镇\",\n\t    \"711737\": \"社头乡\",\n\t    \"711738\": \"永靖乡\",\n\t    \"711739\": \"埔心乡\",\n\t    \"711740\": \"溪湖镇\",\n\t    \"711741\": \"大村乡\",\n\t    \"711742\": \"埔盐乡\",\n\t    \"711743\": \"田中镇\",\n\t    \"711744\": \"北斗镇\",\n\t    \"711745\": \"田尾乡\",\n\t    \"711746\": \"埤头乡\",\n\t    \"711747\": \"溪州乡\",\n\t    \"711748\": \"竹塘乡\",\n\t    \"711749\": \"二林镇\",\n\t    \"711750\": \"大城乡\",\n\t    \"711751\": \"芳苑乡\",\n\t    \"711752\": \"二水乡\",\n\t    \"711900\": \"嘉义县\",\n\t    \"711919\": \"番路乡\",\n\t    \"711920\": \"梅山乡\",\n\t    \"711921\": \"竹崎乡\",\n\t    \"711922\": \"阿里山乡\",\n\t    \"711923\": \"中埔乡\",\n\t    \"711924\": \"大埔乡\",\n\t    \"711925\": \"水上乡\",\n\t    \"711926\": \"鹿草乡\",\n\t    \"711927\": \"太保市\",\n\t    \"711928\": \"朴子市\",\n\t    \"711929\": \"东石乡\",\n\t    \"711930\": \"六脚乡\",\n\t    \"711931\": \"新港乡\",\n\t    \"711932\": \"民雄乡\",\n\t    \"711933\": \"大林镇\",\n\t    \"711934\": \"溪口乡\",\n\t    \"711935\": \"义竹乡\",\n\t    \"711936\": \"布袋镇\",\n\t    \"712100\": \"云林县\",\n\t    \"712121\": \"斗南镇\",\n\t    \"712122\": \"大埤乡\",\n\t    \"712123\": \"虎尾镇\",\n\t    \"712124\": \"土库镇\",\n\t    \"712125\": \"褒忠乡\",\n\t    \"712126\": \"东势乡\",\n\t    \"712127\": \"台西乡\",\n\t    \"712128\": \"仑背乡\",\n\t    \"712129\": \"麦寮乡\",\n\t    \"712130\": \"斗六市\",\n\t    \"712131\": \"林内乡\",\n\t    \"712132\": \"古坑乡\",\n\t    \"712133\": \"莿桐乡\",\n\t    \"712134\": \"西螺镇\",\n\t    \"712135\": \"二仑乡\",\n\t    \"712136\": \"北港镇\",\n\t    \"712137\": \"水林乡\",\n\t    \"712138\": \"口湖乡\",\n\t    \"712139\": \"四湖乡\",\n\t    \"712140\": \"元长乡\",\n\t    \"712400\": \"屏东县\",\n\t    \"712434\": \"屏东市\",\n\t    \"712435\": \"三地门乡\",\n\t    \"712436\": \"雾台乡\",\n\t    \"712437\": \"玛家乡\",\n\t    \"712438\": \"九如乡\",\n\t    \"712439\": \"里港乡\",\n\t    \"712440\": \"高树乡\",\n\t    \"712441\": \"盐埔乡\",\n\t    \"712442\": \"长治乡\",\n\t    \"712443\": \"麟洛乡\",\n\t    \"712444\": \"竹田乡\",\n\t    \"712445\": \"内埔乡\",\n\t    \"712446\": \"万丹乡\",\n\t    \"712447\": \"潮州镇\",\n\t    \"712448\": \"泰武乡\",\n\t    \"712449\": \"来义乡\",\n\t    \"712450\": \"万峦乡\",\n\t    \"712451\": \"崁顶乡\",\n\t    \"712452\": \"新埤乡\",\n\t    \"712453\": \"南州乡\",\n\t    \"712454\": \"林边乡\",\n\t    \"712455\": \"东港镇\",\n\t    \"712456\": \"琉球乡\",\n\t    \"712457\": \"佳冬乡\",\n\t    \"712458\": \"新园乡\",\n\t    \"712459\": \"枋寮乡\",\n\t    \"712460\": \"枋山乡\",\n\t    \"712461\": \"春日乡\",\n\t    \"712462\": \"狮子乡\",\n\t    \"712463\": \"车城乡\",\n\t    \"712464\": \"牡丹乡\",\n\t    \"712465\": \"恒春镇\",\n\t    \"712466\": \"满州乡\",\n\t    \"712500\": \"台东县\",\n\t    \"712517\": \"台东市\",\n\t    \"712518\": \"绿岛乡\",\n\t    \"712519\": \"兰屿乡\",\n\t    \"712520\": \"延平乡\",\n\t    \"712521\": \"卑南乡\",\n\t    \"712522\": \"鹿野乡\",\n\t    \"712523\": \"关山镇\",\n\t    \"712524\": \"海端乡\",\n\t    \"712525\": \"池上乡\",\n\t    \"712526\": \"东河乡\",\n\t    \"712527\": \"成功镇\",\n\t    \"712528\": \"长滨乡\",\n\t    \"712529\": \"金峰乡\",\n\t    \"712530\": \"大武乡\",\n\t    \"712531\": \"达仁乡\",\n\t    \"712532\": \"太麻里乡\",\n\t    \"712600\": \"花莲县\",\n\t    \"712615\": \"花莲市\",\n\t    \"712616\": \"新城乡\",\n\t    \"712617\": \"太鲁阁\",\n\t    \"712618\": \"秀林乡\",\n\t    \"712619\": \"吉安乡\",\n\t    \"712620\": \"寿丰乡\",\n\t    \"712621\": \"凤林镇\",\n\t    \"712622\": \"光复乡\",\n\t    \"712623\": \"丰滨乡\",\n\t    \"712624\": \"瑞穗乡\",\n\t    \"712625\": \"万荣乡\",\n\t    \"712626\": \"玉里镇\",\n\t    \"712627\": \"卓溪乡\",\n\t    \"712628\": \"富里乡\",\n\t    \"712700\": \"澎湖县\",\n\t    \"712707\": \"马公市\",\n\t    \"712708\": \"西屿乡\",\n\t    \"712709\": \"望安乡\",\n\t    \"712710\": \"七美乡\",\n\t    \"712711\": \"白沙乡\",\n\t    \"712712\": \"湖西乡\",\n\t    \"712800\": \"连江县\",\n\t    \"712805\": \"南竿乡\",\n\t    \"712806\": \"北竿乡\",\n\t    \"712807\": \"莒光乡\",\n\t    \"712808\": \"东引乡\",\n\t    \"810000\": \"香港特别行政区\",\n\t    \"810100\": \"香港岛\",\n\t    \"810101\": \"中西区\",\n\t    \"810102\": \"湾仔\",\n\t    \"810103\": \"东区\",\n\t    \"810104\": \"南区\",\n\t    \"810200\": \"九龙\",\n\t    \"810201\": \"九龙城区\",\n\t    \"810202\": \"油尖旺区\",\n\t    \"810203\": \"深水埗区\",\n\t    \"810204\": \"黄大仙区\",\n\t    \"810205\": \"观塘区\",\n\t    \"810300\": \"新界\",\n\t    \"810301\": \"北区\",\n\t    \"810302\": \"大埔区\",\n\t    \"810303\": \"沙田区\",\n\t    \"810304\": \"西贡区\",\n\t    \"810305\": \"元朗区\",\n\t    \"810306\": \"屯门区\",\n\t    \"810307\": \"荃湾区\",\n\t    \"810308\": \"葵青区\",\n\t    \"810309\": \"离岛区\",\n\t    \"820000\": \"澳门特别行政区\",\n\t    \"820100\": \"澳门半岛\",\n\t    \"820200\": \"离岛\",\n\t    \"990000\": \"海外\",\n\t    \"990100\": \"海外\"\n\t}\n\n\t// id pid/parentId name children\n\tfunction tree(list) {\n\t    var mapped = {}\n\t    for (var i = 0, item; i < list.length; i++) {\n\t        item = list[i]\n\t        if (!item || !item.id) continue\n\t        mapped[item.id] = item\n\t    }\n\n\t    var result = []\n\t    for (var ii = 0; ii < list.length; ii++) {\n\t        item = list[ii]\n\n\t        if (!item) continue\n\t            /* jshint -W041 */\n\t        if (item.pid == undefined && item.parentId == undefined) {\n\t            result.push(item)\n\t            continue\n\t        }\n\t        var parent = mapped[item.pid] || mapped[item.parentId]\n\t        if (!parent) continue\n\t        if (!parent.children) parent.children = []\n\t        parent.children.push(item)\n\t    }\n\t    return result\n\t}\n\n\tvar DICT_FIXED = function() {\n\t    var fixed = []\n\t    for (var id in DICT) {\n\t        var pid = id.slice(2, 6) === '0000' ? undefined :\n\t            id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') :\n\t            id.slice(0, 4) + '00'\n\t        fixed.push({\n\t            id: id,\n\t            pid: pid,\n\t            name: DICT[id]\n\t        })\n\t    }\n\t    return tree(fixed)\n\t}()\n\n\tmodule.exports = DICT_FIXED\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## Miscellaneous\n\t*/\n\tvar DICT = __webpack_require__(18)\n\tmodule.exports = {\n\t\t// Dice\n\t\td4: function() {\n\t\t\treturn this.natural(1, 4)\n\t\t},\n\t\td6: function() {\n\t\t\treturn this.natural(1, 6)\n\t\t},\n\t\td8: function() {\n\t\t\treturn this.natural(1, 8)\n\t\t},\n\t\td12: function() {\n\t\t\treturn this.natural(1, 12)\n\t\t},\n\t\td20: function() {\n\t\t\treturn this.natural(1, 20)\n\t\t},\n\t\td100: function() {\n\t\t\treturn this.natural(1, 100)\n\t\t},\n\t\t/*\n\t\t    随机生成一个 GUID。\n\n\t\t    http://www.broofa.com/2008/09/javascript-uuid-function/\n\t\t    [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt)\n\t\t        UUIDs (Universally Unique IDentifier)\n\t\t        GUIDs (Globally Unique IDentifier)\n\t\t        The formal definition of the UUID string representation is provided by the following ABNF [7]:\n\t\t            UUID                   = time-low \"-\" time-mid \"-\"\n\t\t                                   time-high-and-version \"-\"\n\t\t                                   clock-seq-and-reserved\n\t\t                                   clock-seq-low \"-\" node\n\t\t            time-low               = 4hexOctet\n\t\t            time-mid               = 2hexOctet\n\t\t            time-high-and-version  = 2hexOctet\n\t\t            clock-seq-and-reserved = hexOctet\n\t\t            clock-seq-low          = hexOctet\n\t\t            node                   = 6hexOctet\n\t\t            hexOctet               = hexDigit hexDigit\n\t\t            hexDigit =\n\t\t                \"0\" / \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" / \"9\" /\n\t\t                \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" /\n\t\t                \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n\t\t    \n\t\t    https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349\n\t\t*/\n\t\tguid: function() {\n\t\t\tvar pool = \"abcdefABCDEF1234567890\",\n\t\t\t\tguid = this.string(pool, 8) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 12);\n\t\t\treturn guid\n\t\t},\n\t\tuuid: function() {\n\t\t\treturn this.guid()\n\t\t},\n\t\t/*\n\t\t    随机生成一个 18 位身份证。\n\n\t\t    [身份证](http://baike.baidu.com/view/1697.htm#4)\n\t\t        地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1\n\t\t    [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)\n\t\t*/\n\t\tid: function() {\n\t\t\tvar id,\n\t\t\t\tsum = 0,\n\t\t\t\trank = [\n\t\t\t\t\t\"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\", \"1\", \"6\", \"3\", \"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\"\n\t\t\t\t],\n\t\t\t\tlast = [\n\t\t\t\t\t\"1\", \"0\", \"X\", \"9\", \"8\", \"7\", \"6\", \"5\", \"4\", \"3\", \"2\"\n\t\t\t\t]\n\n\t\t\tid = this.pick(DICT).id +\n\t\t\t\tthis.date('yyyyMMdd') +\n\t\t\t\tthis.string('number', 3)\n\n\t\t\tfor (var i = 0; i < id.length; i++) {\n\t\t\t\tsum += id[i] * rank[i];\n\t\t\t}\n\t\t\tid += last[sum % 11];\n\n\t\t\treturn id\n\t\t},\n\n\t\t/*\n\t\t    生成一个全局的自增整数。\n\t\t    类似自增主键(auto increment primary key)。\n\t\t*/\n\t\tincrement: function() {\n\t\t\tvar key = 0\n\t\t\treturn function(step) {\n\t\t\t\treturn key += (+step || 1) // step?\n\t\t\t}\n\t\t}(),\n\t\tinc: function(step) {\n\t\t\treturn this.increment(step)\n\t\t}\n\t}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Parser = __webpack_require__(21)\n\tvar Handler = __webpack_require__(22)\n\tmodule.exports = {\n\t\tParser: Parser,\n\t\tHandler: Handler\n\t}\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\t// https://github.com/nuysoft/regexp\n\t// forked from https://github.com/ForbesLindesay/regexp\n\n\tfunction parse(n) {\n\t    if (\"string\" != typeof n) {\n\t        var l = new TypeError(\"The regexp to parse must be represented as a string.\");\n\t        throw l;\n\t    }\n\t    return index = 1, cgs = {}, parser.parse(n);\n\t}\n\n\tfunction Token(n) {\n\t    this.type = n, this.offset = Token.offset(), this.text = Token.text();\n\t}\n\n\tfunction Alternate(n, l) {\n\t    Token.call(this, \"alternate\"), this.left = n, this.right = l;\n\t}\n\n\tfunction Match(n) {\n\t    Token.call(this, \"match\"), this.body = n.filter(Boolean);\n\t}\n\n\tfunction Group(n, l) {\n\t    Token.call(this, n), this.body = l;\n\t}\n\n\tfunction CaptureGroup(n) {\n\t    Group.call(this, \"capture-group\"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), \n\t    this.body = n;\n\t}\n\n\tfunction Quantified(n, l) {\n\t    Token.call(this, \"quantified\"), this.body = n, this.quantifier = l;\n\t}\n\n\tfunction Quantifier(n, l) {\n\t    Token.call(this, \"quantifier\"), this.min = n, this.max = l, this.greedy = !0;\n\t}\n\n\tfunction CharSet(n, l) {\n\t    Token.call(this, \"charset\"), this.invert = n, this.body = l;\n\t}\n\n\tfunction CharacterRange(n, l) {\n\t    Token.call(this, \"range\"), this.start = n, this.end = l;\n\t}\n\n\tfunction Literal(n) {\n\t    Token.call(this, \"literal\"), this.body = n, this.escaped = this.body != this.text;\n\t}\n\n\tfunction Unicode(n) {\n\t    Token.call(this, \"unicode\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction Hex(n) {\n\t    Token.call(this, \"hex\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction Octal(n) {\n\t    Token.call(this, \"octal\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction BackReference(n) {\n\t    Token.call(this, \"back-reference\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction ControlCharacter(n) {\n\t    Token.call(this, \"control-character\"), this.code = n.toUpperCase();\n\t}\n\n\tvar parser = function() {\n\t    function n(n, l) {\n\t        function u() {\n\t            this.constructor = n;\n\t        }\n\t        u.prototype = l.prototype, n.prototype = new u();\n\t    }\n\t    function l(n, l, u, t, r) {\n\t        function e(n, l) {\n\t            function u(n) {\n\t                function l(n) {\n\t                    return n.charCodeAt(0).toString(16).toUpperCase();\n\t                }\n\t                return n.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\x08/g, \"\\\\b\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\f/g, \"\\\\f\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(n) {\n\t                    return \"\\\\x0\" + l(n);\n\t                }).replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(n) {\n\t                    return \"\\\\x\" + l(n);\n\t                }).replace(/[\\u0180-\\u0FFF]/g, function(n) {\n\t                    return \"\\\\u0\" + l(n);\n\t                }).replace(/[\\u1080-\\uFFFF]/g, function(n) {\n\t                    return \"\\\\u\" + l(n);\n\t                });\n\t            }\n\t            var t, r;\n\t            switch (n.length) {\n\t              case 0:\n\t                t = \"end of input\";\n\t                break;\n\n\t              case 1:\n\t                t = n[0];\n\t                break;\n\n\t              default:\n\t                t = n.slice(0, -1).join(\", \") + \" or \" + n[n.length - 1];\n\t            }\n\t            return r = l ? '\"' + u(l) + '\"' : \"end of input\", \"Expected \" + t + \" but \" + r + \" found.\";\n\t        }\n\t        this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, \n\t        this.name = \"SyntaxError\", this.message = e(n, l);\n\t    }\n\t    function u(n) {\n\t        function u() {\n\t            return n.substring(Lt, qt);\n\t        }\n\t        function t() {\n\t            return Lt;\n\t        }\n\t        function r(l) {\n\t            function u(l, u, t) {\n\t                var r, e;\n\t                for (r = u; t > r; r++) e = n.charAt(r), \"\\n\" === e ? (l.seenCR || l.line++, l.column = 1, \n\t                l.seenCR = !1) : \"\\r\" === e || \"\\u2028\" === e || \"\\u2029\" === e ? (l.line++, l.column = 1, \n\t                l.seenCR = !0) : (l.column++, l.seenCR = !1);\n\t            }\n\t            return Mt !== l && (Mt > l && (Mt = 0, Dt = {\n\t                line: 1,\n\t                column: 1,\n\t                seenCR: !1\n\t            }), u(Dt, Mt, l), Mt = l), Dt;\n\t        }\n\t        function e(n) {\n\t            Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n));\n\t        }\n\t        function o(n) {\n\t            var l = 0;\n\t            for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++;\n\t        }\n\t        function c() {\n\t            var l, u, t, r, o;\n\t            return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, \n\t            qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], \n\t            t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, \n\t            u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, \n\t            l = il), l;\n\t        }\n\t        function i() {\n\t            var n, l, u, t, r;\n\t            if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), \n\t            Wt--, null === t ? u = al : (qt = u, u = il), null !== u) {\n\t                for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), \n\t                null === r && (r = a());\n\t                null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), \n\t                null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il);\n\t            } else qt = n, n = il; else qt = n, n = il;\n\t            return n;\n\t        }\n\t        function a() {\n\t            var n;\n\t            return n = x(), null === n && (n = Q(), null === n && (n = B())), n;\n\t        }\n\t        function f() {\n\t            var l, u;\n\t            return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), \n\t            null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function s() {\n\t            var l, u;\n\t            return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), \n\t            null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function h() {\n\t            var n, l, u;\n\t            return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), \n\t            null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n;\n\t        }\n\t        function d() {\n\t            var n, l, u;\n\t            return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, \n\t            l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, \n\t            n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n;\n\t        }\n\t        function p() {\n\t            var n;\n\t            return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), \n\t            null === n && (n = g(), null === n && (n = b()))))), n;\n\t        }\n\t        function v() {\n\t            var l, u, t, r, o, c;\n\t            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t            null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, \n\t            0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, \n\t            qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, \n\t            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function w() {\n\t            var l, u, t, r;\n\t            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t            null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, \n\t            0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function A() {\n\t            var l, u, t, r;\n\t            return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t            null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, \n\t            0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function C() {\n\t            var l, u;\n\t            return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), \n\t            null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function g() {\n\t            var l, u;\n\t            return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), \n\t            null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function b() {\n\t            var l, u;\n\t            return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), \n\t            null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function k() {\n\t            var l;\n\t            return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), \n\t            l;\n\t        }\n\t        function T() {\n\t            var l, u, t;\n\t            if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, \n\t            0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), \n\t            qt++) : (t = null, 0 === Wt && e(Il)); else u = il;\n\t            return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, \n\t            l;\n\t        }\n\t        function x() {\n\t            var l, u, t, r;\n\t            return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), \n\t            null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), \n\t            null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), \n\t            null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function y() {\n\t            var n, l;\n\t            return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, \n\t            n = l) : n = l, n;\n\t        }\n\t        function m() {\n\t            var l, u, t;\n\t            return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), \n\t            null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function R() {\n\t            var l, u, t;\n\t            return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), \n\t            null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function F() {\n\t            var l, u, t;\n\t            return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), \n\t            null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function Q() {\n\t            var l, u, t, r, o;\n\t            if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), \n\t            null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), \n\t            null === t && (t = al), null !== t) {\n\t                for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), \n\t                null === o && (o = U());\n\t                null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), \n\t                null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t                l = il)) : (qt = l, l = il);\n\t            } else qt = l, l = il; else qt = l, l = il;\n\t            return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l;\n\t        }\n\t        function S() {\n\t            var l, u, t, r;\n\t            return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, \n\t            0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, \n\t            l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, \n\t            null === l && (u = null, 0 === Wt && e(du)), l;\n\t        }\n\t        function U() {\n\t            var n, l;\n\t            return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), \n\t            n;\n\t        }\n\t        function E() {\n\t            var l, u;\n\t            return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), \n\t            null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function G() {\n\t            var n;\n\t            return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), \n\t            null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), \n\t            null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), \n\t            null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), \n\t            null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n;\n\t        }\n\t        function B() {\n\t            var n;\n\t            return n = j(), null === n && (n = q(), null === n && (n = $())), n;\n\t        }\n\t        function j() {\n\t            var l, u;\n\t            return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), \n\t            null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function $() {\n\t            var l, u;\n\t            return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, \n\t            0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, \n\t            Wt--, null === l && (u = null, 0 === Wt && e(yu)), l;\n\t        }\n\t        function q() {\n\t            var n;\n\t            return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), \n\t            null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), \n\t            null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), \n\t            null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), \n\t            null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), \n\t            n;\n\t        }\n\t        function L() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t            null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function M() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t            null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function D() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), \n\t            null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function H() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), \n\t            null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function O() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), \n\t            null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function W() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), \n\t            null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function z() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), \n\t            null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function I() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), \n\t            null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function J() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), \n\t            null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function K() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), \n\t            null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function N() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), \n\t            null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function P() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), \n\t            null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function V() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), \n\t            null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function X() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), \n\t            null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function Y() {\n\t            var l, u, t;\n\t            return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), \n\t            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t            null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function Z() {\n\t            var l, u, t;\n\t            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t            null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), \n\t            null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        function _() {\n\t            var l, u, t, r;\n\t            if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t            null !== u) {\n\t                if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), \n\t                null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t                qt++) : (r = null, 0 === Wt && e(mt)); else t = il;\n\t                null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t                l = il);\n\t            } else qt = l, l = il;\n\t            return l;\n\t        }\n\t        function nl() {\n\t            var l, u, t, r;\n\t            if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), \n\t            null !== u) {\n\t                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t                null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t                l = il);\n\t            } else qt = l, l = il;\n\t            return l;\n\t        }\n\t        function ll() {\n\t            var l, u, t, r;\n\t            if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), \n\t            null !== u) {\n\t                if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t                null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t                qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t                null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t                l = il);\n\t            } else qt = l, l = il;\n\t            return l;\n\t        }\n\t        function ul() {\n\t            var l, u;\n\t            return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t            null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l;\n\t        }\n\t        function tl() {\n\t            var l, u, t;\n\t            return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t            null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t            null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t            l = il)) : (qt = l, l = il), l;\n\t        }\n\t        var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = {\n\t            regexp: c\n\t        }, cl = c, il = null, al = \"\", fl = \"|\", sl = '\"|\"', hl = function(n, l) {\n\t            return l ? new Alternate(n, l[1]) : n;\n\t        }, dl = function(n, l, u) {\n\t            return new Match([ n ].concat(l).concat([ u ]));\n\t        }, pl = \"^\", vl = '\"^\"', wl = function() {\n\t            return new Token(\"start\");\n\t        }, Al = \"$\", Cl = '\"$\"', gl = function() {\n\t            return new Token(\"end\");\n\t        }, bl = function(n, l) {\n\t            return new Quantified(n, l);\n\t        }, kl = \"Quantifier\", Tl = function(n, l) {\n\t            return l && (n.greedy = !1), n;\n\t        }, xl = \"{\", yl = '\"{\"', ml = \",\", Rl = '\",\"', Fl = \"}\", Ql = '\"}\"', Sl = function(n, l) {\n\t            return new Quantifier(n, l);\n\t        }, Ul = \",}\", El = '\",}\"', Gl = function(n) {\n\t            return new Quantifier(n, 1/0);\n\t        }, Bl = function(n) {\n\t            return new Quantifier(n, n);\n\t        }, jl = \"+\", $l = '\"+\"', ql = function() {\n\t            return new Quantifier(1, 1/0);\n\t        }, Ll = \"*\", Ml = '\"*\"', Dl = function() {\n\t            return new Quantifier(0, 1/0);\n\t        }, Hl = \"?\", Ol = '\"?\"', Wl = function() {\n\t            return new Quantifier(0, 1);\n\t        }, zl = /^[0-9]/, Il = \"[0-9]\", Jl = function(n) {\n\t            return +n.join(\"\");\n\t        }, Kl = \"(\", Nl = '\"(\"', Pl = \")\", Vl = '\")\"', Xl = function(n) {\n\t            return n;\n\t        }, Yl = function(n) {\n\t            return new CaptureGroup(n);\n\t        }, Zl = \"?:\", _l = '\"?:\"', nu = function(n) {\n\t            return new Group(\"non-capture-group\", n);\n\t        }, lu = \"?=\", uu = '\"?=\"', tu = function(n) {\n\t            return new Group(\"positive-lookahead\", n);\n\t        }, ru = \"?!\", eu = '\"?!\"', ou = function(n) {\n\t            return new Group(\"negative-lookahead\", n);\n\t        }, cu = \"CharacterSet\", iu = \"[\", au = '\"[\"', fu = \"]\", su = '\"]\"', hu = function(n, l) {\n\t            return new CharSet(!!n, l);\n\t        }, du = \"CharacterRange\", pu = \"-\", vu = '\"-\"', wu = function(n, l) {\n\t            return new CharacterRange(n, l);\n\t        }, Au = \"Character\", Cu = /^[^\\\\\\]]/, gu = \"[^\\\\\\\\\\\\]]\", bu = function(n) {\n\t            return new Literal(n);\n\t        }, ku = \".\", Tu = '\".\"', xu = function() {\n\t            return new Token(\"any-character\");\n\t        }, yu = \"Literal\", mu = /^[^|\\\\\\/.[()?+*$\\^]/, Ru = \"[^|\\\\\\\\\\\\/.[()?+*$\\\\^]\", Fu = \"\\\\b\", Qu = '\"\\\\\\\\b\"', Su = function() {\n\t            return new Token(\"backspace\");\n\t        }, Uu = function() {\n\t            return new Token(\"word-boundary\");\n\t        }, Eu = \"\\\\B\", Gu = '\"\\\\\\\\B\"', Bu = function() {\n\t            return new Token(\"non-word-boundary\");\n\t        }, ju = \"\\\\d\", $u = '\"\\\\\\\\d\"', qu = function() {\n\t            return new Token(\"digit\");\n\t        }, Lu = \"\\\\D\", Mu = '\"\\\\\\\\D\"', Du = function() {\n\t            return new Token(\"non-digit\");\n\t        }, Hu = \"\\\\f\", Ou = '\"\\\\\\\\f\"', Wu = function() {\n\t            return new Token(\"form-feed\");\n\t        }, zu = \"\\\\n\", Iu = '\"\\\\\\\\n\"', Ju = function() {\n\t            return new Token(\"line-feed\");\n\t        }, Ku = \"\\\\r\", Nu = '\"\\\\\\\\r\"', Pu = function() {\n\t            return new Token(\"carriage-return\");\n\t        }, Vu = \"\\\\s\", Xu = '\"\\\\\\\\s\"', Yu = function() {\n\t            return new Token(\"white-space\");\n\t        }, Zu = \"\\\\S\", _u = '\"\\\\\\\\S\"', nt = function() {\n\t            return new Token(\"non-white-space\");\n\t        }, lt = \"\\\\t\", ut = '\"\\\\\\\\t\"', tt = function() {\n\t            return new Token(\"tab\");\n\t        }, rt = \"\\\\v\", et = '\"\\\\\\\\v\"', ot = function() {\n\t            return new Token(\"vertical-tab\");\n\t        }, ct = \"\\\\w\", it = '\"\\\\\\\\w\"', at = function() {\n\t            return new Token(\"word\");\n\t        }, ft = \"\\\\W\", st = '\"\\\\\\\\W\"', ht = function() {\n\t            return new Token(\"non-word\");\n\t        }, dt = \"\\\\c\", pt = '\"\\\\\\\\c\"', vt = \"any character\", wt = function(n) {\n\t            return new ControlCharacter(n);\n\t        }, At = \"\\\\\", Ct = '\"\\\\\\\\\"', gt = /^[1-9]/, bt = \"[1-9]\", kt = function(n) {\n\t            return new BackReference(n);\n\t        }, Tt = \"\\\\0\", xt = '\"\\\\\\\\0\"', yt = /^[0-7]/, mt = \"[0-7]\", Rt = function(n) {\n\t            return new Octal(n.join(\"\"));\n\t        }, Ft = \"\\\\x\", Qt = '\"\\\\\\\\x\"', St = /^[0-9a-fA-F]/, Ut = \"[0-9a-fA-F]\", Et = function(n) {\n\t            return new Hex(n.join(\"\"));\n\t        }, Gt = \"\\\\u\", Bt = '\"\\\\\\\\u\"', jt = function(n) {\n\t            return new Unicode(n.join(\"\"));\n\t        }, $t = function() {\n\t            return new Token(\"null-character\");\n\t        }, qt = 0, Lt = 0, Mt = 0, Dt = {\n\t            line: 1,\n\t            column: 1,\n\t            seenCR: !1\n\t        }, Ht = 0, Ot = [], Wt = 0;\n\t        if (\"startRule\" in el) {\n\t            if (!(el.startRule in ol)) throw new Error(\"Can't start parsing from rule \\\"\" + el.startRule + '\".');\n\t            cl = ol[el.startRule];\n\t        }\n\t        if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl;\n\t        throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column);\n\t    }\n\t    return n(l, Error), {\n\t        SyntaxError: l,\n\t        parse: u\n\t    };\n\t}(), index = 1, cgs = {};\n\n\tmodule.exports = parser\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## RegExp Handler\n\n\t    https://github.com/ForbesLindesay/regexp\n\t    https://github.com/dmajda/pegjs\n\t    http://www.regexper.com/\n\n\t    每个节点的结构\n\t        {\n\t            type: '',\n\t            offset: number,\n\t            text: '',\n\t            body: {},\n\t            escaped: true/false\n\t        }\n\n\t    type 可选值\n\t        alternate             |         选择\n\t        match                 匹配\n\t        capture-group         ()        捕获组\n\t        non-capture-group     (?:...)   非捕获组\n\t        positive-lookahead    (?=p)     零宽正向先行断言\n\t        negative-lookahead    (?!p)     零宽负向先行断言\n\t        quantified            a*        重复节点\n\t        quantifier            *         量词\n\t        charset               []        字符集\n\t        range                 {m, n}    范围\n\t        literal               a         直接量字符\n\t        unicode               \\uxxxx    Unicode\n\t        hex                   \\x        十六进制\n\t        octal                 八进制\n\t        back-reference        \\n        反向引用\n\t        control-character     \\cX       控制字符\n\n\t        // Token\n\t        start               ^       开头\n\t        end                 $       结尾\n\t        any-character       .       任意字符\n\t        backspace           [\\b]    退格直接量\n\t        word-boundary       \\b      单词边界\n\t        non-word-boundary   \\B      非单词边界\n\t        digit               \\d      ASCII 数字,[0-9]\n\t        non-digit           \\D      非 ASCII 数字,[^0-9]\n\t        form-feed           \\f      换页符\n\t        line-feed           \\n      换行符\n\t        carriage-return     \\r      回车符\n\t        white-space         \\s      空白符\n\t        non-white-space     \\S      非空白符\n\t        tab                 \\t      制表符\n\t        vertical-tab        \\v      垂直制表符\n\t        word                \\w      ASCII 字符,[a-zA-Z0-9]\n\t        non-word            \\W      非 ASCII 字符,[^a-zA-Z0-9]\n\t        null-character      \\o      NUL 字符\n\t */\n\n\tvar Util = __webpack_require__(3)\n\tvar Random = __webpack_require__(5)\n\t    /*\n\t        \n\t    */\n\tvar Handler = {\n\t    extend: Util.extend\n\t}\n\n\t// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart\n\t/*var ASCII_CONTROL_CODE_CHART = {\n\t    '@': ['\\u0000'],\n\t    A: ['\\u0001'],\n\t    B: ['\\u0002'],\n\t    C: ['\\u0003'],\n\t    D: ['\\u0004'],\n\t    E: ['\\u0005'],\n\t    F: ['\\u0006'],\n\t    G: ['\\u0007', '\\a'],\n\t    H: ['\\u0008', '\\b'],\n\t    I: ['\\u0009', '\\t'],\n\t    J: ['\\u000A', '\\n'],\n\t    K: ['\\u000B', '\\v'],\n\t    L: ['\\u000C', '\\f'],\n\t    M: ['\\u000D', '\\r'],\n\t    N: ['\\u000E'],\n\t    O: ['\\u000F'],\n\t    P: ['\\u0010'],\n\t    Q: ['\\u0011'],\n\t    R: ['\\u0012'],\n\t    S: ['\\u0013'],\n\t    T: ['\\u0014'],\n\t    U: ['\\u0015'],\n\t    V: ['\\u0016'],\n\t    W: ['\\u0017'],\n\t    X: ['\\u0018'],\n\t    Y: ['\\u0019'],\n\t    Z: ['\\u001A'],\n\t    '[': ['\\u001B', '\\e'],\n\t    '\\\\': ['\\u001C'],\n\t    ']': ['\\u001D'],\n\t    '^': ['\\u001E'],\n\t    '_': ['\\u001F']\n\t}*/\n\n\t// ASCII printable code chart\n\t// var LOWER = 'abcdefghijklmnopqrstuvwxyz'\n\t// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\t// var NUMBER = '0123456789'\n\t// var SYMBOL = ' !\"#$%&\\'()*+,-./' + ':;<=>?@' + '[\\\\]^_`' + '{|}~'\n\tvar LOWER = ascii(97, 122)\n\tvar UPPER = ascii(65, 90)\n\tvar NUMBER = ascii(48, 57)\n\tvar OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96)\n\tvar PRINTABLE = ascii(32, 126)\n\tvar SPACE = ' \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029'\n\tvar CHARACTER_CLASSES = {\n\t    '\\\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95)\n\t    '\\\\W': OTHER.replace('_', ''),\n\t    '\\\\s': SPACE,\n\t    '\\\\S': function() {\n\t        var result = PRINTABLE\n\t        for (var i = 0; i < SPACE.length; i++) {\n\t            result = result.replace(SPACE[i], '')\n\t        }\n\t        return result\n\t    }(),\n\t    '\\\\d': NUMBER,\n\t    '\\\\D': LOWER + UPPER + OTHER\n\t}\n\n\tfunction ascii(from, to) {\n\t    var result = ''\n\t    for (var i = from; i <= to; i++) {\n\t        result += String.fromCharCode(i)\n\t    }\n\t    return result\n\t}\n\n\t// var ast = RegExpParser.parse(regexp.source)\n\tHandler.gen = function(node, result, cache) {\n\t    cache = cache || {\n\t        guid: 1\n\t    }\n\t    return Handler[node.type] ? Handler[node.type](node, result, cache) :\n\t        Handler.token(node, result, cache)\n\t}\n\n\tHandler.extend({\n\t    /* jshint unused:false */\n\t    token: function(node, result, cache) {\n\t        switch (node.type) {\n\t            case 'start':\n\t            case 'end':\n\t                return ''\n\t            case 'any-character':\n\t                return Random.character()\n\t            case 'backspace':\n\t                return ''\n\t            case 'word-boundary': // TODO\n\t                return ''\n\t            case 'non-word-boundary': // TODO\n\t                break\n\t            case 'digit':\n\t                return Random.pick(\n\t                    NUMBER.split('')\n\t                )\n\t            case 'non-digit':\n\t                return Random.pick(\n\t                    (LOWER + UPPER + OTHER).split('')\n\t                )\n\t            case 'form-feed':\n\t                break\n\t            case 'line-feed':\n\t                return node.body || node.text\n\t            case 'carriage-return':\n\t                break\n\t            case 'white-space':\n\t                return Random.pick(\n\t                    SPACE.split('')\n\t                )\n\t            case 'non-white-space':\n\t                return Random.pick(\n\t                    (LOWER + UPPER + NUMBER).split('')\n\t                )\n\t            case 'tab':\n\t                break\n\t            case 'vertical-tab':\n\t                break\n\t            case 'word': // \\w [a-zA-Z0-9]\n\t                return Random.pick(\n\t                    (LOWER + UPPER + NUMBER).split('')\n\t                )\n\t            case 'non-word': // \\W [^a-zA-Z0-9]\n\t                return Random.pick(\n\t                    OTHER.replace('_', '').split('')\n\t                )\n\t            case 'null-character':\n\t                break\n\t        }\n\t        return node.body || node.text\n\t    },\n\t    /*\n\t        {\n\t            type: 'alternate',\n\t            offset: 0,\n\t            text: '',\n\t            left: {\n\t                boyd: []\n\t            },\n\t            right: {\n\t                boyd: []\n\t            }\n\t        }\n\t    */\n\t    alternate: function(node, result, cache) {\n\t        // node.left/right {}\n\t        return this.gen(\n\t            Random.boolean() ? node.left : node.right,\n\t            result,\n\t            cache\n\t        )\n\t    },\n\t    /*\n\t        {\n\t            type: 'match',\n\t            offset: 0,\n\t            text: '',\n\t            body: []\n\t        }\n\t    */\n\t    match: function(node, result, cache) {\n\t        result = ''\n\t            // node.body []\n\t        for (var i = 0; i < node.body.length; i++) {\n\t            result += this.gen(node.body[i], result, cache)\n\t        }\n\t        return result\n\t    },\n\t    // ()\n\t    'capture-group': function(node, result, cache) {\n\t        // node.body {}\n\t        result = this.gen(node.body, result, cache)\n\t        cache[cache.guid++] = result\n\t        return result\n\t    },\n\t    // (?:...)\n\t    'non-capture-group': function(node, result, cache) {\n\t        // node.body {}\n\t        return this.gen(node.body, result, cache)\n\t    },\n\t    // (?=p)\n\t    'positive-lookahead': function(node, result, cache) {\n\t        // node.body\n\t        return this.gen(node.body, result, cache)\n\t    },\n\t    // (?!p)\n\t    'negative-lookahead': function(node, result, cache) {\n\t        // node.body\n\t        return ''\n\t    },\n\t    /*\n\t        {\n\t            type: 'quantified',\n\t            offset: 3,\n\t            text: 'c*',\n\t            body: {\n\t                type: 'literal',\n\t                offset: 3,\n\t                text: 'c',\n\t                body: 'c',\n\t                escaped: false\n\t            },\n\t            quantifier: {\n\t                type: 'quantifier',\n\t                offset: 4,\n\t                text: '*',\n\t                min: 0,\n\t                max: Infinity,\n\t                greedy: true\n\t            }\n\t        }\n\t    */\n\t    quantified: function(node, result, cache) {\n\t        result = ''\n\t            // node.quantifier {}\n\t        var count = this.quantifier(node.quantifier);\n\t        // node.body {}\n\t        for (var i = 0; i < count; i++) {\n\t            result += this.gen(node.body, result, cache)\n\t        }\n\t        return result\n\t    },\n\t    /*\n\t        quantifier: {\n\t            type: 'quantifier',\n\t            offset: 4,\n\t            text: '*',\n\t            min: 0,\n\t            max: Infinity,\n\t            greedy: true\n\t        }\n\t    */\n\t    quantifier: function(node, result, cache) {\n\t        var min = Math.max(node.min, 0)\n\t        var max = isFinite(node.max) ? node.max :\n\t            min + Random.integer(3, 7)\n\t        return Random.integer(min, max)\n\t    },\n\t    /*\n\t        \n\t    */\n\t    charset: function(node, result, cache) {\n\t        // node.invert\n\t        if (node.invert) return this['invert-charset'](node, result, cache)\n\n\t        // node.body []\n\t        var literal = Random.pick(node.body)\n\t        return this.gen(literal, result, cache)\n\t    },\n\t    'invert-charset': function(node, result, cache) {\n\t        var pool = PRINTABLE\n\t        for (var i = 0, item; i < node.body.length; i++) {\n\t            item = node.body[i]\n\t            switch (item.type) {\n\t                case 'literal':\n\t                    pool = pool.replace(item.body, '')\n\t                    break\n\t                case 'range':\n\t                    var min = this.gen(item.start, result, cache).charCodeAt()\n\t                    var max = this.gen(item.end, result, cache).charCodeAt()\n\t                    for (var ii = min; ii <= max; ii++) {\n\t                        pool = pool.replace(String.fromCharCode(ii), '')\n\t                    }\n\t                    /* falls through */\n\t                default:\n\t                    var characters = CHARACTER_CLASSES[item.text]\n\t                    if (characters) {\n\t                        for (var iii = 0; iii <= characters.length; iii++) {\n\t                            pool = pool.replace(characters[iii], '')\n\t                        }\n\t                    }\n\t            }\n\t        }\n\t        return Random.pick(pool.split(''))\n\t    },\n\t    range: function(node, result, cache) {\n\t        // node.start, node.end\n\t        var min = this.gen(node.start, result, cache).charCodeAt()\n\t        var max = this.gen(node.end, result, cache).charCodeAt()\n\t        return String.fromCharCode(\n\t            Random.integer(min, max)\n\t        )\n\t    },\n\t    literal: function(node, result, cache) {\n\t        return node.escaped ? node.body : node.text\n\t    },\n\t    // Unicode \\u\n\t    unicode: function(node, result, cache) {\n\t        return String.fromCharCode(\n\t            parseInt(node.code, 16)\n\t        )\n\t    },\n\t    // 十六进制 \\xFF\n\t    hex: function(node, result, cache) {\n\t        return String.fromCharCode(\n\t            parseInt(node.code, 16)\n\t        )\n\t    },\n\t    // 八进制 \\0\n\t    octal: function(node, result, cache) {\n\t        return String.fromCharCode(\n\t            parseInt(node.code, 8)\n\t        )\n\t    },\n\t    // 反向引用\n\t    'back-reference': function(node, result, cache) {\n\t        return cache[node.code] || ''\n\t    },\n\t    /*\n\t        http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n\t    */\n\t    CONTROL_CHARACTER_MAP: function() {\n\t        var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\\\ ] ^ _'.split(' ')\n\t        var CONTROL_CHARACTER_UNICODE = '\\u0000 \\u0001 \\u0002 \\u0003 \\u0004 \\u0005 \\u0006 \\u0007 \\u0008 \\u0009 \\u000A \\u000B \\u000C \\u000D \\u000E \\u000F \\u0010 \\u0011 \\u0012 \\u0013 \\u0014 \\u0015 \\u0016 \\u0017 \\u0018 \\u0019 \\u001A \\u001B \\u001C \\u001D \\u001E \\u001F'.split(' ')\n\t        var map = {}\n\t        for (var i = 0; i < CONTROL_CHARACTER.length; i++) {\n\t            map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]\n\t        }\n\t        return map\n\t    }(),\n\t    'control-character': function(node, result, cache) {\n\t        return this.CONTROL_CHARACTER_MAP[node.code]\n\t    }\n\t})\n\n\tmodule.exports = Handler\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(24)\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## toJSONSchema\n\n\t    把 Mock.js 风格的数据模板转换成 JSON Schema。\n\n\t    > [JSON Schema](http://json-schema.org/)\n\t */\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar Parser = __webpack_require__(4)\n\n\tfunction toJSONSchema(template, name, path /* Internal Use Only */ ) {\n\t    // type rule properties items\n\t    path = path || []\n\t    var result = {\n\t        name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name,\n\t        template: template,\n\t        type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] }\n\t        rule: Parser.parse(name)\n\t    }\n\t    result.path = path.slice(0)\n\t    result.path.push(name === undefined ? 'ROOT' : result.name)\n\n\t    switch (result.type) {\n\t        case 'array':\n\t            result.items = []\n\t            Util.each(template, function(value, index) {\n\t                result.items.push(\n\t                    toJSONSchema(value, index, result.path)\n\t                )\n\t            })\n\t            break\n\t        case 'object':\n\t            result.properties = []\n\t            Util.each(template, function(value, name) {\n\t                result.properties.push(\n\t                    toJSONSchema(value, name, result.path)\n\t                )\n\t            })\n\t            break\n\t    }\n\n\t    return result\n\n\t}\n\n\tmodule.exports = toJSONSchema\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(26)\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t    ## valid(template, data)\n\n\t    校验真实数据 data 是否与数据模板 template 匹配。\n\t    \n\t    实现思路:\n\t    1. 解析规则。\n\t        先把数据模板 template 解析为更方便机器解析的 JSON-Schame\n\t        name               属性名 \n\t        type               属性值类型\n\t        template           属性值模板\n\t        properties         对象属性数组\n\t        items              数组元素数组\n\t        rule               属性值生成规则\n\t    2. 递归验证规则。\n\t        然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。\n\n\t    提示信息 \n\t    https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties\n\t    [JSON-Schama validator](http://json-schema-validator.herokuapp.com/)\n\t    [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)\n\t*/\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar toJSONSchema = __webpack_require__(23)\n\n\tfunction valid(template, data) {\n\t    var schema = toJSONSchema(template)\n\t    var result = Diff.diff(schema, data)\n\t    for (var i = 0; i < result.length; i++) {\n\t        // console.log(template, data)\n\t        // console.warn(Assert.message(result[i]))\n\t    }\n\t    return result\n\t}\n\n\t/*\n\t    ## name\n\t        有生成规则:比较解析后的 name\n\t        无生成规则:直接比较\n\t    ## type\n\t        无类型转换:直接比较\n\t        有类型转换:先试着解析 template,然后再检查?\n\t    ## value vs. template\n\t        基本类型\n\t            无生成规则:直接比较\n\t            有生成规则:\n\t                number\n\t                    min-max.dmin-dmax\n\t                    min-max.dcount\n\t                    count.dmin-dmax\n\t                    count.dcount\n\t                    +step\n\t                    整数部分\n\t                    小数部分\n\t                boolean \n\t                string  \n\t                    min-max\n\t                    count\n\t    ## properties\n\t        对象\n\t            有生成规则:检测期望的属性个数,继续递归\n\t            无生成规则:检测全部的属性个数,继续递归\n\t    ## items\n\t        数组\n\t            有生成规则:\n\t                `'name|1': [{}, {} ...]`            其中之一,继续递归\n\t                `'name|+1': [{}, {} ...]`           顺序检测,继续递归\n\t                `'name|min-max': [{}, {} ...]`      检测个数,继续递归\n\t                `'name|count': [{}, {} ...]`        检测个数,继续递归\n\t            无生成规则:检测全部的元素个数,继续递归\n\t*/\n\tvar Diff = {\n\t    diff: function diff(schema, data, name /* Internal Use Only */ ) {\n\t        var result = []\n\n\t        // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测\n\t        if (\n\t            this.name(schema, data, name, result) &&\n\t            this.type(schema, data, name, result)\n\t        ) {\n\t            this.value(schema, data, name, result)\n\t            this.properties(schema, data, name, result)\n\t            this.items(schema, data, name, result)\n\t        }\n\n\t        return result\n\t    },\n\t    /* jshint unused:false */\n\t    name: function(schema, data, name, result) {\n\t        var length = result.length\n\n\t        Assert.equal('name', schema.path, name + '', schema.name + '', result)\n\n\t        return result.length === length\n\t    },\n\t    type: function(schema, data, name, result) {\n\t        var length = result.length\n\n\t        switch (schema.type) {\n\t            case 'string':\n\t                // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值\n\t                if (schema.template.match(Constant.RE_PLACEHOLDER)) return true\n\t                break\n\t            case 'array':\n\t                if (schema.rule.parameters) {\n\t                    // name|count: array\n\t                    if (schema.rule.min !== undefined && schema.rule.max === undefined) {\n\t                        // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致\n\t                        if (schema.rule.count === 1) return true\n\t                    }\n\t                    // 跳过 name|+inc: array\n\t                    if (schema.rule.parameters[2]) return true\n\t                }\n\t                break\n\t            case 'function':\n\t                // 跳过 `'name': function`,因为函数可以返回任何类型的值。\n\t                return true\n\t        }\n\n\t        Assert.equal('type', schema.path, Util.type(data), schema.type, result)\n\n\t        return result.length === length\n\t    },\n\t    value: function(schema, data, name, result) {\n\t        var length = result.length\n\n\t        var rule = schema.rule\n\t        var templateType = schema.type\n\t        if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true\n\n\t        // 无生成规则\n\t        if (!rule.parameters) {\n\t            switch (templateType) {\n\t                case 'regexp':\n\t                    Assert.match('value', schema.path, data, schema.template, result)\n\t                    return result.length === length\n\t                case 'string':\n\t                    // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致\n\t                    if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length\n\t                    break\n\t            }\n\t            Assert.equal('value', schema.path, data, schema.template, result)\n\t            return result.length === length\n\t        }\n\n\t        // 有生成规则\n\t        var actualRepeatCount\n\t        switch (templateType) {\n\t            case 'number':\n\t                var parts = (data + '').split('.')\n\t                parts[0] = +parts[0]\n\n\t                // 整数部分\n\t                // |min-max\n\t                if (rule.min !== undefined && rule.max !== undefined) {\n\t                    Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)\n\t                        // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')\n\t                    Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)\n\t                }\n\t                // |count\n\t                if (rule.min !== undefined && rule.max === undefined) {\n\t                    Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)\n\t                }\n\n\t                // 小数部分\n\t                if (rule.decimal) {\n\t                    // |dmin-dmax\n\t                    if (rule.dmin !== undefined && rule.dmax !== undefined) {\n\t                        Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)\n\t                        Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)\n\t                    }\n\t                    // |dcount\n\t                    if (rule.dmin !== undefined && rule.dmax === undefined) {\n\t                        Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)\n\t                    }\n\t                }\n\n\t                break\n\n\t            case 'boolean':\n\t                break\n\n\t            case 'string':\n\t                // 'aaa'.match(/a/g)\n\t                actualRepeatCount = data.match(new RegExp(schema.template, 'g'))\n\t                actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n\t                // |min-max\n\t                if (rule.min !== undefined && rule.max !== undefined) {\n\t                    Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t                    Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t                }\n\t                // |count\n\t                if (rule.min !== undefined && rule.max === undefined) {\n\t                    Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t                }\n\n\t                break\n\n\t            case 'regexp':\n\t                actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\\^|\\$$/g, ''), 'g'))\n\t                actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n\t                // |min-max\n\t                if (rule.min !== undefined && rule.max !== undefined) {\n\t                    Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t                    Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t                }\n\t                // |count\n\t                if (rule.min !== undefined && rule.max === undefined) {\n\t                    Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t                }\n\t                break\n\t        }\n\n\t        return result.length === length\n\t    },\n\t    properties: function(schema, data, name, result) {\n\t        var length = result.length\n\n\t        var rule = schema.rule\n\t        var keys = Util.keys(data)\n\t        if (!schema.properties) return\n\n\t        // 无生成规则\n\t        if (!schema.rule.parameters) {\n\t            Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)\n\t        } else {\n\t            // 有生成规则\n\t            // |min-max\n\t            if (rule.min !== undefined && rule.max !== undefined) {\n\t                Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)\n\t                Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)\n\t            }\n\t            // |count\n\t            if (rule.min !== undefined && rule.max === undefined) {\n\t                // |1, |>1\n\t                if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)\n\t            }\n\t        }\n\n\t        if (result.length !== length) return false\n\n\t        for (var i = 0; i < keys.length; i++) {\n\t            result.push.apply(\n\t                result,\n\t                this.diff(\n\t                    function() {\n\t                        var property\n\t                        Util.each(schema.properties, function(item /*, index*/ ) {\n\t                            if (item.name === keys[i]) property = item\n\t                        })\n\t                        return property || schema.properties[i]\n\t                    }(),\n\t                    data[keys[i]],\n\t                    keys[i]\n\t                )\n\t            )\n\t        }\n\n\t        return result.length === length\n\t    },\n\t    items: function(schema, data, name, result) {\n\t        var length = result.length\n\n\t        if (!schema.items) return\n\n\t        var rule = schema.rule\n\n\t        // 无生成规则\n\t        if (!schema.rule.parameters) {\n\t            Assert.equal('items length', schema.path, data.length, schema.items.length, result)\n\t        } else {\n\t            // 有生成规则\n\t            // |min-max\n\t            if (rule.min !== undefined && rule.max !== undefined) {\n\t                Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,\n\t                    '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')\n\t                Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,\n\t                    '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')\n\t            }\n\t            // |count\n\t            if (rule.min !== undefined && rule.max === undefined) {\n\t                // |1, |>1\n\t                if (rule.count === 1) return result.length === length\n\t                else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)\n\t            }\n\t            // |+inc\n\t            if (rule.parameters[2]) return result.length === length\n\t        }\n\n\t        if (result.length !== length) return false\n\n\t        for (var i = 0; i < data.length; i++) {\n\t            result.push.apply(\n\t                result,\n\t                this.diff(\n\t                    schema.items[i % schema.items.length],\n\t                    data[i],\n\t                    i % schema.items.length\n\t                )\n\t            )\n\t        }\n\n\t        return result.length === length\n\t    }\n\t}\n\n\t/*\n\t    完善、友好的提示信息\n\t    \n\t    Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to\n\t    路径 验证类型 描述 \n\n\t    Expect path.name is less than or equal to expected, but path.name is actual.\n\n\t    Expect path.name is less than or equal to expected, but path.name is actual.\n\t    Expect path.name is greater than or equal to expected, but path.name is actual.\n\n\t*/\n\tvar Assert = {\n\t    message: function(item) {\n\t        return (item.message ||\n\t                '[{utype}] Expect {path}\\'{ltype} {action} {expected}, but is {actual}')\n\t            .replace('{utype}', item.type.toUpperCase())\n\t            .replace('{ltype}', item.type.toLowerCase())\n\t            .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path)\n\t            .replace('{action}', item.action)\n\t            .replace('{expected}', item.expected)\n\t            .replace('{actual}', item.actual)\n\t    },\n\t    equal: function(type, path, actual, expected, result, message) {\n\t        if (actual === expected) return true\n\t        switch (type) {\n\t            case 'type':\n\t                // 正则模板 === 字符串最终值\n\t                if (expected === 'regexp' && actual === 'string') return true\n\t                break\n\t        }\n\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is equal to',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    // actual matches expected\n\t    match: function(type, path, actual, expected, result, message) {\n\t        if (expected.test(actual)) return true\n\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'matches',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    notEqual: function(type, path, actual, expected, result, message) {\n\t        if (actual !== expected) return true\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is not equal to',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    greaterThan: function(type, path, actual, expected, result, message) {\n\t        if (actual > expected) return true\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is greater than',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    lessThan: function(type, path, actual, expected, result, message) {\n\t        if (actual < expected) return true\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is less to',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t        if (actual >= expected) return true\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is greater than or equal to',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    },\n\t    lessThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t        if (actual <= expected) return true\n\t        var item = {\n\t            path: path,\n\t            type: type,\n\t            actual: actual,\n\t            expected: expected,\n\t            action: 'is less than or equal to',\n\t            message: message\n\t        }\n\t        item.message = Assert.message(item)\n\t        result.push(item)\n\t        return false\n\t    }\n\t}\n\n\tvalid.Diff = Diff\n\tvalid.Assert = Assert\n\n\tmodule.exports = valid\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(28)\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global window, document, location, Event, setTimeout */\n\t/*\n\t    ## MockXMLHttpRequest\n\n\t    期望的功能:\n\t    1. 完整地覆盖原生 XHR 的行为\n\t    2. 完整地模拟原生 XHR 的行为\n\t    3. 在发起请求时,自动检测是否需要拦截\n\t    4. 如果不必拦截,则执行原生 XHR 的行为\n\t    5. 如果需要拦截,则执行虚拟 XHR 的行为\n\t    6. 兼容 XMLHttpRequest 和 ActiveXObject\n\t        new window.XMLHttpRequest()\n\t        new window.ActiveXObject(\"Microsoft.XMLHTTP\")\n\n\t    关键方法的逻辑:\n\t    * new   此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。\n\t    * open  此时可以取到 URL,可以决定是否进行拦截。\n\t    * send  此时已经确定了请求方式。\n\n\t    规范:\n\t    http://xhr.spec.whatwg.org/\n\t    http://www.w3.org/TR/XMLHttpRequest2/\n\n\t    参考实现:\n\t    https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js\n\t    https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js\n\t    https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js\n\t    https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js\n\t    https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js\n\n\t    **需不需要全面重写 XMLHttpRequest?**\n\t        http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n\t        关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。\n\t        因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。\n\n\t    // Event handlers\n\t    onloadstart         loadstart\n\t    onprogress          progress\n\t    onabort             abort\n\t    onerror             error\n\t    onload              load\n\t    ontimeout           timeout\n\t    onloadend           loadend\n\t    onreadystatechange  readystatechange\n\t */\n\n\tvar Util = __webpack_require__(3)\n\n\t// 备份原生 XMLHttpRequest\n\twindow._XMLHttpRequest = window.XMLHttpRequest\n\twindow._ActiveXObject = window.ActiveXObject\n\n\t/*\n\t    PhantomJS\n\t    TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event(\"readystatechange\")')\n\n\t    https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18\n\t    https://github.com/ariya/phantomjs/issues/11289\n\t*/\n\ttry {\n\t    new window.Event('custom')\n\t} catch (exception) {\n\t    window.Event = function(type, bubbles, cancelable, detail) {\n\t        var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent'\n\t        event.initCustomEvent(type, bubbles, cancelable, detail)\n\t        return event\n\t    }\n\t}\n\n\tvar XHR_STATES = {\n\t    // The object has been constructed.\n\t    UNSENT: 0,\n\t    // The open() method has been successfully invoked.\n\t    OPENED: 1,\n\t    // All redirects (if any) have been followed and all HTTP headers of the response have been received.\n\t    HEADERS_RECEIVED: 2,\n\t    // The response's body is being received.\n\t    LOADING: 3,\n\t    // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects).\n\t    DONE: 4\n\t}\n\n\tvar XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ')\n\tvar XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ')\n\tvar XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ')\n\n\t// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32\n\tvar HTTP_STATUS_CODES = {\n\t    100: \"Continue\",\n\t    101: \"Switching Protocols\",\n\t    200: \"OK\",\n\t    201: \"Created\",\n\t    202: \"Accepted\",\n\t    203: \"Non-Authoritative Information\",\n\t    204: \"No Content\",\n\t    205: \"Reset Content\",\n\t    206: \"Partial Content\",\n\t    300: \"Multiple Choice\",\n\t    301: \"Moved Permanently\",\n\t    302: \"Found\",\n\t    303: \"See Other\",\n\t    304: \"Not Modified\",\n\t    305: \"Use Proxy\",\n\t    307: \"Temporary Redirect\",\n\t    400: \"Bad Request\",\n\t    401: \"Unauthorized\",\n\t    402: \"Payment Required\",\n\t    403: \"Forbidden\",\n\t    404: \"Not Found\",\n\t    405: \"Method Not Allowed\",\n\t    406: \"Not Acceptable\",\n\t    407: \"Proxy Authentication Required\",\n\t    408: \"Request Timeout\",\n\t    409: \"Conflict\",\n\t    410: \"Gone\",\n\t    411: \"Length Required\",\n\t    412: \"Precondition Failed\",\n\t    413: \"Request Entity Too Large\",\n\t    414: \"Request-URI Too Long\",\n\t    415: \"Unsupported Media Type\",\n\t    416: \"Requested Range Not Satisfiable\",\n\t    417: \"Expectation Failed\",\n\t    422: \"Unprocessable Entity\",\n\t    500: \"Internal Server Error\",\n\t    501: \"Not Implemented\",\n\t    502: \"Bad Gateway\",\n\t    503: \"Service Unavailable\",\n\t    504: \"Gateway Timeout\",\n\t    505: \"HTTP Version Not Supported\"\n\t}\n\n\t/*\n\t    MockXMLHttpRequest\n\t*/\n\n\tfunction MockXMLHttpRequest() {\n\t    // 初始化 custom 对象,用于存储自定义属性\n\t    this.custom = {\n\t        events: {},\n\t        requestHeaders: {},\n\t        responseHeaders: {}\n\t    }\n\t}\n\n\tMockXMLHttpRequest._settings = {\n\t    timeout: '10-100',\n\t    /*\n\t        timeout: 50,\n\t        timeout: '10-100',\n\t     */\n\t}\n\n\tMockXMLHttpRequest.setup = function(settings) {\n\t    Util.extend(MockXMLHttpRequest._settings, settings)\n\t    return MockXMLHttpRequest._settings\n\t}\n\n\tUtil.extend(MockXMLHttpRequest, XHR_STATES)\n\tUtil.extend(MockXMLHttpRequest.prototype, XHR_STATES)\n\n\t// 标记当前对象为 MockXMLHttpRequest\n\tMockXMLHttpRequest.prototype.mock = true\n\n\t// 是否拦截 Ajax 请求\n\tMockXMLHttpRequest.prototype.match = false\n\n\t// 初始化 Request 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t    // https://xhr.spec.whatwg.org/#the-open()-method\n\t    // Sets the request method, request URL, and synchronous flag.\n\t    open: function(method, url, async, username, password) {\n\t        var that = this\n\n\t        Util.extend(this.custom, {\n\t            method: method,\n\t            url: url,\n\t            async: typeof async === 'boolean' ? async : true,\n\t            username: username,\n\t            password: password,\n\t            options: {\n\t                url: url,\n\t                type: method\n\t            }\n\t        })\n\n\t        this.custom.timeout = function(timeout) {\n\t            if (typeof timeout === 'number') return timeout\n\t            if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10)\n\t            if (typeof timeout === 'string' && ~timeout.indexOf('-')) {\n\t                var tmp = timeout.split('-')\n\t                var min = parseInt(tmp[0], 10)\n\t                var max = parseInt(tmp[1], 10)\n\t                return Math.round(Math.random() * (max - min)) + min\n\t            }\n\t        }(MockXMLHttpRequest._settings.timeout)\n\n\t        // 查找与请求参数匹配的数据模板\n\t        var item = find(this.custom.options)\n\n\t        function handle(event) {\n\t            // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest\n\t            for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) {\n\t                try {\n\t                    that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]\n\t                } catch (e) {}\n\t            }\n\t            // 触发 MockXMLHttpRequest 上的同名事件\n\t            that.dispatchEvent(new Event(event.type /*, false, false, that*/ ))\n\t        }\n\n\t        // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。\n\t        if (!item) {\n\t            // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件\n\t            var xhr = createNativeXMLHttpRequest()\n\t            this.custom.xhr = xhr\n\n\t            // 初始化所有事件,用于监听原生 XHR 对象的事件\n\t            for (var i = 0; i < XHR_EVENTS.length; i++) {\n\t                xhr.addEventListener(XHR_EVENTS[i], handle)\n\t            }\n\n\t            // xhr.open()\n\t            if (username) xhr.open(method, url, async, username, password)\n\t            else xhr.open(method, url, async)\n\n\t            // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest\n\t            for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) {\n\t                try {\n\t                    xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]\n\t                } catch (e) {}\n\t            }\n\n\t            return\n\t        }\n\n\t        // 找到了匹配的数据模板,开始拦截 XHR 请求\n\t        this.match = true\n\t        this.custom.template = item\n\t        this.readyState = MockXMLHttpRequest.OPENED\n\t        this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ ))\n\t    },\n\t    // https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n\t    // Combines a header in author request headers.\n\t    setRequestHeader: function(name, value) {\n\t        // 原生 XHR\n\t        if (!this.match) {\n\t            this.custom.xhr.setRequestHeader(name, value)\n\t            return\n\t        }\n\n\t        // 拦截 XHR\n\t        var requestHeaders = this.custom.requestHeaders\n\t        if (requestHeaders[name]) requestHeaders[name] += ',' + value\n\t        else requestHeaders[name] = value\n\t    },\n\t    timeout: 0,\n\t    withCredentials: false,\n\t    upload: {},\n\t    // https://xhr.spec.whatwg.org/#the-send()-method\n\t    // Initiates the request.\n\t    send: function send(data) {\n\t        var that = this\n\t        this.custom.options.body = data\n\n\t        // 原生 XHR\n\t        if (!this.match) {\n\t            this.custom.xhr.send(data)\n\t            return\n\t        }\n\n\t        // 拦截 XHR\n\n\t        // X-Requested-With header\n\t        this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest')\n\n\t        // loadstart The fetch initiates.\n\t        this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ ))\n\n\t        if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步\n\t        else done() // 同步\n\n\t        function done() {\n\t            that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED\n\t            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t            that.readyState = MockXMLHttpRequest.LOADING\n\t            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\n\t            that.status = 200\n\t            that.statusText = HTTP_STATUS_CODES[200]\n\n\t            // fix #92 #93 by @qddegtya\n\t            that.response = that.responseText = JSON.stringify(\n\t                convert(that.custom.template, that.custom.options),\n\t                null, 4\n\t            )\n\n\t            that.readyState = MockXMLHttpRequest.DONE\n\t            that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t            that.dispatchEvent(new Event('load' /*, false, false, that*/ ));\n\t            that.dispatchEvent(new Event('loadend' /*, false, false, that*/ ));\n\t        }\n\t    },\n\t    // https://xhr.spec.whatwg.org/#the-abort()-method\n\t    // Cancels any network activity.\n\t    abort: function abort() {\n\t        // 原生 XHR\n\t        if (!this.match) {\n\t            this.custom.xhr.abort()\n\t            return\n\t        }\n\n\t        // 拦截 XHR\n\t        this.readyState = MockXMLHttpRequest.UNSENT\n\t        this.dispatchEvent(new Event('abort', false, false, this))\n\t        this.dispatchEvent(new Event('error', false, false, this))\n\t    }\n\t})\n\n\t// 初始化 Response 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t    responseURL: '',\n\t    status: MockXMLHttpRequest.UNSENT,\n\t    statusText: '',\n\t    // https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n\t    getResponseHeader: function(name) {\n\t        // 原生 XHR\n\t        if (!this.match) {\n\t            return this.custom.xhr.getResponseHeader(name)\n\t        }\n\n\t        // 拦截 XHR\n\t        return this.custom.responseHeaders[name.toLowerCase()]\n\t    },\n\t    // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n\t    // http://www.utf8-chartable.de/\n\t    getAllResponseHeaders: function() {\n\t        // 原生 XHR\n\t        if (!this.match) {\n\t            return this.custom.xhr.getAllResponseHeaders()\n\t        }\n\n\t        // 拦截 XHR\n\t        var responseHeaders = this.custom.responseHeaders\n\t        var headers = ''\n\t        for (var h in responseHeaders) {\n\t            if (!responseHeaders.hasOwnProperty(h)) continue\n\t            headers += h + ': ' + responseHeaders[h] + '\\r\\n'\n\t        }\n\t        return headers\n\t    },\n\t    overrideMimeType: function( /*mime*/ ) {},\n\t    responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'\n\t    response: null,\n\t    responseText: '',\n\t    responseXML: null\n\t})\n\n\t// EventTarget\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t    addEventListener: function addEventListener(type, handle) {\n\t        var events = this.custom.events\n\t        if (!events[type]) events[type] = []\n\t        events[type].push(handle)\n\t    },\n\t    removeEventListener: function removeEventListener(type, handle) {\n\t        var handles = this.custom.events[type] || []\n\t        for (var i = 0; i < handles.length; i++) {\n\t            if (handles[i] === handle) {\n\t                handles.splice(i--, 1)\n\t            }\n\t        }\n\t    },\n\t    dispatchEvent: function dispatchEvent(event) {\n\t        var handles = this.custom.events[event.type] || []\n\t        for (var i = 0; i < handles.length; i++) {\n\t            handles[i].call(this, event)\n\t        }\n\n\t        var ontype = 'on' + event.type\n\t        if (this[ontype]) this[ontype](event)\n\t    }\n\t})\n\n\t// Inspired by jQuery\n\tfunction createNativeXMLHttpRequest() {\n\t    var isLocal = function() {\n\t        var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/\n\t        var rurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/\n\t        var ajaxLocation = location.href\n\t        var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n\t        return rlocalProtocol.test(ajaxLocParts[1])\n\t    }()\n\n\t    return window.ActiveXObject ?\n\t        (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR()\n\n\t    function createStandardXHR() {\n\t        try {\n\t            return new window._XMLHttpRequest();\n\t        } catch (e) {}\n\t    }\n\n\t    function createActiveXHR() {\n\t        try {\n\t            return new window._ActiveXObject(\"Microsoft.XMLHTTP\");\n\t        } catch (e) {}\n\t    }\n\t}\n\n\n\t// 查找与请求参数匹配的数据模板:URL,Type\n\tfunction find(options) {\n\n\t    for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {\n\t        var item = MockXMLHttpRequest.Mock._mocked[sUrlType]\n\t        if (\n\t            (!item.rurl || match(item.rurl, options.url)) &&\n\t            (!item.rtype || match(item.rtype, options.type.toLowerCase()))\n\t        ) {\n\t            // console.log('[mock]', options.url, '>', item.rurl)\n\t            return item\n\t        }\n\t    }\n\n\t    function match(expected, actual) {\n\t        if (Util.type(expected) === 'string') {\n\t            return expected === actual\n\t        }\n\t        if (Util.type(expected) === 'regexp') {\n\t            return expected.test(actual)\n\t        }\n\t    }\n\n\t}\n\n\t// 数据模板 => 响应数据\n\tfunction convert(item, options) {\n\t    return Util.isFunction(item.template) ?\n\t        item.template(options) : MockXMLHttpRequest.Mock.mock(item.template)\n\t}\n\n\tmodule.exports = MockXMLHttpRequest\n\n/***/ })\n/******/ ])\n});\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX21vY2tqc0AxLjEuMEBtb2NranMvZGlzdC9tb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19tb2NranNAMS4xLjBAbW9ja2pzL2Rpc3QvbW9jay5qcz8wM2ExIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIk1vY2tcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiTW9ja1wiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0LyogZ2xvYmFsIHJlcXVpcmUsIG1vZHVsZSwgd2luZG93ICovXG5cdHZhciBIYW5kbGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblx0dmFyIFJhbmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNSlcblx0dmFyIFJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMClcblx0dmFyIHRvSlNPTlNjaGVtYSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpXG5cdHZhciB2YWxpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpXG5cblx0dmFyIFhIUlxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIFhIUiA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cblx0LyohXG5cdCAgICBNb2NrIC0g5qih5ouf6K+35rGCICYg5qih5ouf5pWw5o2uXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vbnV5c29mdC9Nb2NrXG5cdCAgICDloqjmmbogbW96aGkuZ3l5QHRhb2Jhby5jb20gbnV5c29mdEBnbWFpbC5jb21cblx0Ki9cblx0dmFyIE1vY2sgPSB7XG5cdCAgICBIYW5kbGVyOiBIYW5kbGVyLFxuXHQgICAgUmFuZG9tOiBSYW5kb20sXG5cdCAgICBVdGlsOiBVdGlsLFxuXHQgICAgWEhSOiBYSFIsXG5cdCAgICBSRTogUkUsXG5cdCAgICB0b0pTT05TY2hlbWE6IHRvSlNPTlNjaGVtYSxcblx0ICAgIHZhbGlkOiB2YWxpZCxcblx0ICAgIGhlcmVkb2M6IFV0aWwuaGVyZWRvYyxcblx0ICAgIHNldHVwOiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHQgICAgICAgIHJldHVybiBYSFIuc2V0dXAoc2V0dGluZ3MpXG5cdCAgICB9LFxuXHQgICAgX21vY2tlZDoge31cblx0fVxuXG5cdE1vY2sudmVyc2lvbiA9ICcxLjAuMS1iZXRhMydcblxuXHQvLyDpgb/lhY3lvqrnjq/kvp3otZZcblx0aWYgKFhIUikgWEhSLk1vY2sgPSBNb2NrXG5cblx0Lypcblx0ICAgICogTW9jay5tb2NrKCB0ZW1wbGF0ZSApXG5cdCAgICAqIE1vY2subW9jayggZnVuY3Rpb24oKSApXG5cdCAgICAqIE1vY2subW9jayggcnVybCwgdGVtcGxhdGUgKVxuXHQgICAgKiBNb2NrLm1vY2soIHJ1cmwsIGZ1bmN0aW9uKG9wdGlvbnMpIClcblx0ICAgICogTW9jay5tb2NrKCBydXJsLCBydHlwZSwgdGVtcGxhdGUgKVxuXHQgICAgKiBNb2NrLm1vY2soIHJ1cmwsIHJ0eXBlLCBmdW5jdGlvbihvcHRpb25zKSApXG5cblx0ICAgIOagueaNruaVsOaNruaooeadv+eUn+aIkOaooeaLn+aVsOaNruOAglxuXHQqL1xuXHRNb2NrLm1vY2sgPSBmdW5jdGlvbihydXJsLCBydHlwZSwgdGVtcGxhdGUpIHtcblx0ICAgIC8vIE1vY2subW9jayh0ZW1wbGF0ZSlcblx0ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgcmV0dXJuIEhhbmRsZXIuZ2VuKHJ1cmwpXG5cdCAgICB9XG5cdCAgICAvLyBNb2NrLm1vY2socnVybCwgdGVtcGxhdGUpXG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHQgICAgICAgIHRlbXBsYXRlID0gcnR5cGVcblx0ICAgICAgICBydHlwZSA9IHVuZGVmaW5lZFxuXHQgICAgfVxuXHQgICAgLy8g5oum5oiqIFhIUlxuXHQgICAgaWYgKFhIUikgd2luZG93LlhNTEh0dHBSZXF1ZXN0ID0gWEhSXG5cdCAgICBNb2NrLl9tb2NrZWRbcnVybCArIChydHlwZSB8fCAnJyldID0ge1xuXHQgICAgICAgIHJ1cmw6IHJ1cmwsXG5cdCAgICAgICAgcnR5cGU6IHJ0eXBlLFxuXHQgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIE1vY2tcblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0gTW9ja1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBcblx0ICAgICMjIEhhbmRsZXJcblxuXHQgICAg5aSE55CG5pWw5o2u5qih5p2/44CCXG5cdCAgICBcblx0ICAgICogSGFuZGxlci5nZW4oIHRlbXBsYXRlLCBuYW1lPywgY29udGV4dD8gKVxuXG5cdCAgICAgICAg5YWl5Y+j5pa55rOV44CCXG5cblx0ICAgICogRGF0YSBUZW1wbGF0ZSBEZWZpbml0aW9uLCBEVERcblx0ICAgICAgICBcblx0ICAgICAgICDlpITnkIbmlbDmja7mqKHmnb/lrprkuYnjgIJcblxuXHQgICAgICAgICogSGFuZGxlci5hcnJheSggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLm9iamVjdCggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLm51bWJlciggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLmJvb2xlYW4oIG9wdGlvbnMgKVxuXHQgICAgICAgICogSGFuZGxlci5zdHJpbmcoIG9wdGlvbnMgKVxuXHQgICAgICAgICogSGFuZGxlci5mdW5jdGlvbiggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLnJlZ2V4cCggb3B0aW9ucyApXG5cdCAgICAgICAgXG5cdCAgICAgICAg5aSE55CG6Lev5b6E77yI55u45a+55ZKM57ud5a+577yJ44CCXG5cblx0ICAgICAgICAqIEhhbmRsZXIuZ2V0VmFsdWVCeUtleVBhdGgoIGtleSwgb3B0aW9ucyApXG5cblx0ICAgICogRGF0YSBQbGFjZWhvbGRlciBEZWZpbml0aW9uLCBEUERcblxuXHQgICAgICAgIOWkhOeQhuaVsOaNruWNoOS9jeespuWumuS5iVxuXG5cdCAgICAgICAgKiBIYW5kbGVyLnBsYWNlaG9sZGVyKCBwbGFjZWhvbGRlciwgY29udGV4dCwgdGVtcGxhdGVDb250ZXh0LCBvcHRpb25zIClcblxuXHQqL1xuXG5cdHZhciBDb25zdGFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMilcblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciBQYXJzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cdHZhciBSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApXG5cblx0dmFyIEhhbmRsZXIgPSB7XG5cdCAgICBleHRlbmQ6IFV0aWwuZXh0ZW5kXG5cdH1cblxuXHQvKlxuXHQgICAgdGVtcGxhdGUgICAgICAgIOWxnuaAp+WAvO+8iOWNs+aVsOaNruaooeadv++8iVxuXHQgICAgbmFtZSAgICAgICAgICAgIOWxnuaAp+WQjVxuXHQgICAgY29udGV4dCAgICAgICAgIOaVsOaNruS4iuS4i+aWh++8jOeUn+aIkOWQjueahOaVsOaNrlxuXHQgICAgdGVtcGxhdGVDb250ZXh0IOaooeadv+S4iuS4i+aWh++8jFxuXG5cdCAgICBIYW5kbGUuZ2VuKHRlbXBsYXRlLCBuYW1lLCBvcHRpb25zKVxuXHQgICAgY29udGV4dFxuXHQgICAgICAgIGN1cnJlbnRDb250ZXh0LCB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0LCBcblx0ICAgICAgICBwYXRoLCB0ZW1wbGF0ZVBhdGhcblx0ICAgICAgICByb290LCB0ZW1wbGF0ZVJvb3Rcblx0Ki9cblx0SGFuZGxlci5nZW4gPSBmdW5jdGlvbih0ZW1wbGF0ZSwgbmFtZSwgY29udGV4dCkge1xuXHQgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICBuYW1lID0gbmFtZSA9PSB1bmRlZmluZWQgPyAnJyA6IChuYW1lICsgJycpXG5cblx0ICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHt9XG5cdCAgICBjb250ZXh0ID0ge1xuXHQgICAgICAgICAgICAvLyDlvZPliY3orr/pl67ot6/lvoTvvIzlj6rmnInlsZ7mgKflkI3vvIzkuI3ljIXmi6znlJ/miJDop4TliJlcblx0ICAgICAgICAgICAgcGF0aDogY29udGV4dC5wYXRoIHx8IFtDb25zdGFudC5HVUlEXSxcblx0ICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBjb250ZXh0LnRlbXBsYXRlUGF0aCB8fCBbQ29uc3RhbnQuR1VJRCsrXSxcblx0ICAgICAgICAgICAgLy8g5pyA57uI5bGe5oCn5YC855qE5LiK5LiL5paHXG5cdCAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiBjb250ZXh0LmN1cnJlbnRDb250ZXh0LFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflgLzmqKHmnb/nmoTkuIrkuIvmlodcblx0ICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogY29udGV4dC50ZW1wbGF0ZUN1cnJlbnRDb250ZXh0IHx8IHRlbXBsYXRlLFxuXHQgICAgICAgICAgICAvLyDmnIDnu4jlgLznmoTmoLlcblx0ICAgICAgICAgICAgcm9vdDogY29udGV4dC5yb290IHx8IGNvbnRleHQuY3VycmVudENvbnRleHQsXG5cdCAgICAgICAgICAgIC8vIOaooeadv+eahOaguVxuXHQgICAgICAgICAgICB0ZW1wbGF0ZVJvb3Q6IGNvbnRleHQudGVtcGxhdGVSb290IHx8IGNvbnRleHQudGVtcGxhdGVDdXJyZW50Q29udGV4dCB8fCB0ZW1wbGF0ZVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBjb25zb2xlLmxvZygncGF0aDonLCBjb250ZXh0LnBhdGguam9pbignLicpLCB0ZW1wbGF0ZSlcblxuXHQgICAgdmFyIHJ1bGUgPSBQYXJzZXIucGFyc2UobmFtZSlcblx0ICAgIHZhciB0eXBlID0gVXRpbC50eXBlKHRlbXBsYXRlKVxuXHQgICAgdmFyIGRhdGFcblxuXHQgICAgaWYgKEhhbmRsZXJbdHlwZV0pIHtcblx0ICAgICAgICBkYXRhID0gSGFuZGxlclt0eXBlXSh7XG5cdCAgICAgICAgICAgIC8vIOWxnuaAp+WAvOexu+Wei1xuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflgLzmqKHmnb9cblx0ICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflkI0gKyDnlJ/miJDop4TliJlcblx0ICAgICAgICAgICAgbmFtZTogbmFtZSxcblx0ICAgICAgICAgICAgLy8g5bGe5oCn5ZCNXG5cdCAgICAgICAgICAgIHBhcnNlZE5hbWU6IG5hbWUgPyBuYW1lLnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKSA6IG5hbWUsXG5cblx0ICAgICAgICAgICAgLy8g6Kej5p6Q5ZCO55qE55Sf5oiQ6KeE5YiZXG5cdCAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXG5cdCAgICAgICAgICAgIC8vIOebuOWFs+S4iuS4i+aWh1xuXHQgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG5cdCAgICAgICAgfSlcblxuXHQgICAgICAgIGlmICghY29udGV4dC5yb290KSBjb250ZXh0LnJvb3QgPSBkYXRhXG5cdCAgICAgICAgcmV0dXJuIGRhdGFcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHRlbXBsYXRlXG5cdH1cblxuXHRIYW5kbGVyLmV4dGVuZCh7XG5cdCAgICBhcnJheTogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXSxcblx0ICAgICAgICAgICAgaSwgaWk7XG5cblx0ICAgICAgICAvLyAnbmFtZXwxJzogW11cblx0ICAgICAgICAvLyAnbmFtZXxjb3VudCc6IFtdXG5cdCAgICAgICAgLy8gJ25hbWV8bWluLW1heCc6IFtdXG5cdCAgICAgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzdWx0XG5cblx0ICAgICAgICAvLyAnYXJyJzogW3sgJ2VtYWlsJzogJ0BFTUFJTCcgfSwgeyAnZW1haWwnOiAnQEVNQUlMJyB9XVxuXHQgICAgICAgIGlmICghb3B0aW9ucy5ydWxlLnBhcmFtZXRlcnMpIHtcblx0ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2goaSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChpKVxuXHQgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG5cdCAgICAgICAgICAgICAgICAgICAgSGFuZGxlci5nZW4ob3B0aW9ucy50ZW1wbGF0ZVtpXSwgaSwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBvcHRpb25zLmNvbnRleHQucGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0OiBvcHRpb25zLnRlbXBsYXRlLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICByb290OiBvcHRpb25zLmNvbnRleHQucm9vdCB8fCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUm9vdDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUm9vdCB8fCBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnBvcCgpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLnBvcCgpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnbWV0aG9kfDEnOiBbJ0dFVCcsICdQT1NUJywgJ0hFQUQnLCAnREVMRVRFJ11cblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5taW4gPT09IDEgJiYgb3B0aW9ucy5ydWxlLm1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBmaXggIzE3XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wdXNoKG9wdGlvbnMubmFtZSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChvcHRpb25zLm5hbWUpXG5cdCAgICAgICAgICAgICAgICByZXN1bHQgPSBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBIYW5kbGVyLmdlbihvcHRpb25zLnRlbXBsYXRlLCB1bmRlZmluZWQsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5jb250ZXh0LnBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQ6IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogb3B0aW9ucy50ZW1wbGF0ZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcm9vdDogb3B0aW9ucy5jb250ZXh0LnJvb3QgfHwgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJvb3Q6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVJvb3QgfHwgb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aC5wb3AoKVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gJ2RhdGF8KzEnOiBbe30sIHt9XVxuXHQgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5wYXJhbWV0ZXJzWzJdKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4ID0gb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4IHx8IDBcblxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2gob3B0aW9ucy5uYW1lKVxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChvcHRpb25zLm5hbWUpXG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSGFuZGxlci5nZW4ob3B0aW9ucy50ZW1wbGF0ZSwgdW5kZWZpbmVkLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q6IG9wdGlvbnMuY29udGV4dC5yb290IHx8IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgICAgICB9KVtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4ICUgb3B0aW9ucy50ZW1wbGF0ZS5sZW5ndGhcblx0ICAgICAgICAgICAgICAgICAgICBdXG5cblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRlbXBsYXRlLl9fb3JkZXJfaW5kZXggKz0gK29wdGlvbnMucnVsZS5wYXJhbWV0ZXJzWzJdXG5cblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAnZGF0YXwxLTEwJzogW3t9XVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnJ1bGUuY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGF0YXwxLTEwJzogW3t9LCB7fV1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgb3B0aW9ucy50ZW1wbGF0ZS5sZW5ndGg7IGlpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2gocmVzdWx0Lmxlbmd0aClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChpaSlcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXIuZ2VuKG9wdGlvbnMudGVtcGxhdGVbaWldLCByZXN1bHQubGVuZ3RoLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q6IG9wdGlvbnMuY29udGV4dC5yb290IHx8IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0XG5cdCAgICB9LFxuXHQgICAgb2JqZWN0OiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IHt9LFxuXHQgICAgICAgICAgICBrZXlzLCBmbktleXMsIGtleSwgcGFyc2VkS2V5LCBpbmMsIGk7XG5cblx0ICAgICAgICAvLyAnb2JqfG1pbi1tYXgnOiB7fVxuXHQgICAgICAgIC8qIGpzaGludCAtVzA0MSAqL1xuXHQgICAgICAgIGlmIChvcHRpb25zLnJ1bGUubWluICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICBrZXlzID0gVXRpbC5rZXlzKG9wdGlvbnMudGVtcGxhdGUpXG5cdCAgICAgICAgICAgIGtleXMgPSBSYW5kb20uc2h1ZmZsZShrZXlzKVxuXHQgICAgICAgICAgICBrZXlzID0ga2V5cy5zbGljZSgwLCBvcHRpb25zLnJ1bGUuY291bnQpXG5cdCAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBrZXlzW2ldXG5cdCAgICAgICAgICAgICAgICBwYXJzZWRLZXkgPSBrZXkucmVwbGFjZShDb25zdGFudC5SRV9LRVksICckMScpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wdXNoKHBhcnNlZEtleSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChrZXkpXG5cdCAgICAgICAgICAgICAgICByZXN1bHRbcGFyc2VkS2V5XSA9IEhhbmRsZXIuZ2VuKG9wdGlvbnMudGVtcGxhdGVba2V5XSwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5jb250ZXh0LnBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogb3B0aW9ucy50ZW1wbGF0ZSxcblx0ICAgICAgICAgICAgICAgICAgICByb290OiBvcHRpb25zLmNvbnRleHQucm9vdCB8fCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aC5wb3AoKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnb2JqJzoge31cblx0ICAgICAgICAgICAga2V5cyA9IFtdXG5cdCAgICAgICAgICAgIGZuS2V5cyA9IFtdIC8vICMyNSDmlLnlj5jkuobpnZ7lh73mlbDlsZ7mgKfnmoTpobrluo/vvIzmn6Xmib7otbfmnaXkuI3mlrnkvr9cblx0ICAgICAgICAgICAgZm9yIChrZXkgaW4gb3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgKHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2tleV0gPT09ICdmdW5jdGlvbicgPyBmbktleXMgOiBrZXlzKS5wdXNoKGtleSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZm5LZXlzKVxuXG5cdCAgICAgICAgICAgIC8qXG5cdCAgICAgICAgICAgICAgICDkvJrmlLnlj5jpnZ7lh73mlbDlsZ7mgKfnmoTpobrluo9cblx0ICAgICAgICAgICAgICAgIGtleXMgPSBVdGlsLmtleXMob3B0aW9ucy50ZW1wbGF0ZSlcblx0ICAgICAgICAgICAgICAgIGtleXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFmbiA9IHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2FdID09PSAnZnVuY3Rpb24nXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGJmbiA9IHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2JdID09PSAnZnVuY3Rpb24nXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGFmbiA9PT0gYmZuKSByZXR1cm4gMFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChhZm4gJiYgIWJmbikgcmV0dXJuIDFcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoIWFmbiAmJiBiZm4pIHJldHVybiAtMVxuXHQgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgKi9cblxuXHQgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXVxuXHQgICAgICAgICAgICAgICAgcGFyc2VkS2V5ID0ga2V5LnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucHVzaChwYXJzZWRLZXkpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLnB1c2goa2V5KVxuXHQgICAgICAgICAgICAgICAgcmVzdWx0W3BhcnNlZEtleV0gPSBIYW5kbGVyLmdlbihvcHRpb25zLnRlbXBsYXRlW2tleV0sIGtleSwge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgcm9vdDogb3B0aW9ucy5jb250ZXh0LnJvb3QgfHwgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUm9vdDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUm9vdCB8fCBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAvLyAnaWR8KzEnOiAxXG5cdCAgICAgICAgICAgICAgICBpbmMgPSBrZXkubWF0Y2goQ29uc3RhbnQuUkVfS0VZKVxuXHQgICAgICAgICAgICAgICAgaWYgKGluYyAmJiBpbmNbMl0gJiYgVXRpbC50eXBlKG9wdGlvbnMudGVtcGxhdGVba2V5XSkgPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZVtrZXldICs9IHBhcnNlSW50KGluY1syXSwgMTApXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIG51bWJlcjogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIHZhciByZXN1bHQsIHBhcnRzO1xuXHQgICAgICAgIGlmIChvcHRpb25zLnJ1bGUuZGVjaW1hbCkgeyAvLyBmbG9hdFxuXHQgICAgICAgICAgICBvcHRpb25zLnRlbXBsYXRlICs9ICcnXG5cdCAgICAgICAgICAgIHBhcnRzID0gb3B0aW9ucy50ZW1wbGF0ZS5zcGxpdCgnLicpXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQxfC4xLTEwJzogMTAsXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQyfDEtMTAwLjEtMTAnOiAxLFxuXHQgICAgICAgICAgICAgICAgLy8gJ2Zsb2F0M3w5OTkuMS0xMCc6IDEsXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQ0fC4zLTEwJzogMTIzLjEyMyxcblx0ICAgICAgICAgICAgcGFydHNbMF0gPSBvcHRpb25zLnJ1bGUucmFuZ2UgPyBvcHRpb25zLnJ1bGUuY291bnQgOiBwYXJ0c1swXVxuXHQgICAgICAgICAgICBwYXJ0c1sxXSA9IChwYXJ0c1sxXSB8fCAnJykuc2xpY2UoMCwgb3B0aW9ucy5ydWxlLmRjb3VudClcblx0ICAgICAgICAgICAgd2hpbGUgKHBhcnRzWzFdLmxlbmd0aCA8IG9wdGlvbnMucnVsZS5kY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRzWzFdICs9IChcblx0ICAgICAgICAgICAgICAgICAgICAvLyDmnIDlkI7kuIDkvY3kuI3og73kuLogMO+8muWmguaenOacgOWQjuS4gOS9jeS4uiAw77yM5Lya6KKrIEpTIOW8leaTjuW/veeVpeaOieOAglxuXHQgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXS5sZW5ndGggPCBvcHRpb25zLnJ1bGUuZGNvdW50IC0gMSkgPyBSYW5kb20uY2hhcmFjdGVyKCdudW1iZXInKSA6IFJhbmRvbS5jaGFyYWN0ZXIoJzEyMzQ1Njc4OScpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChwYXJ0cy5qb2luKCcuJyksIDEwKVxuXHQgICAgICAgIH0gZWxzZSB7IC8vIGludGVnZXJcblx0ICAgICAgICAgICAgLy8gJ2dyYWRlMXwxLTEwMCc6IDEsXG5cdCAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnMucnVsZS5yYW5nZSAmJiAhb3B0aW9ucy5ydWxlLnBhcmFtZXRlcnNbMl0gPyBvcHRpb25zLnJ1bGUuY291bnQgOiBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICBib29sZWFuOiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIHJlc3VsdDtcblx0ICAgICAgICAvLyAncHJvcHxtdWx0aXBsZSc6IGZhbHNlLCDlvZPliY3lgLzmmK/nm7jlj43lgLznmoTmpoLnjoflgI3mlbBcblx0ICAgICAgICAvLyAncHJvcHxwcm9iYWJpbGl0eS1wcm9iYWJpbGl0eSc6IGZhbHNlLCDlvZPliY3lgLzkuI7nm7jlj43lgLznmoTmpoLnjodcblx0ICAgICAgICByZXN1bHQgPSBvcHRpb25zLnJ1bGUucGFyYW1ldGVycyA/IFJhbmRvbS5ib29sKG9wdGlvbnMucnVsZS5taW4sIG9wdGlvbnMucnVsZS5tYXgsIG9wdGlvbnMudGVtcGxhdGUpIDogb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICBzdHJpbmc6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJycsXG5cdCAgICAgICAgICAgIGksIHBsYWNlaG9sZGVycywgcGgsIHBoZWQ7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoKSB7XG5cblx0ICAgICAgICAgICAgLy8gICdmb28nOiAn4piFJyxcblx0ICAgICAgICAgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLnJ1bGUuY291bnQgPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gJ3N0YXJ8MS01JzogJ+KYhScsXG5cdCAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnJ1bGUuY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyAnZW1haWx8MS0xMCc6ICdARU1BSUwsICcsXG5cdCAgICAgICAgICAgIHBsYWNlaG9sZGVycyA9IHJlc3VsdC5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikgfHwgW10gLy8gQS1aXzAtOSA+IFxcd19cblx0ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlaG9sZGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcGggPSBwbGFjZWhvbGRlcnNbaV1cblxuXHQgICAgICAgICAgICAgICAgLy8g6YGH5Yiw6L2s5LmJ5pac5p2g77yM5LiN6ZyA6KaB6Kej5p6Q5Y2g5L2N56ymXG5cdCAgICAgICAgICAgICAgICBpZiAoL15cXFxcLy50ZXN0KHBoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVycy5zcGxpY2UoaS0tLCAxKVxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHBoZWQgPSBIYW5kbGVyLnBsYWNlaG9sZGVyKHBoLCBvcHRpb25zLmNvbnRleHQuY3VycmVudENvbnRleHQsIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZUN1cnJlbnRDb250ZXh0LCBvcHRpb25zKVxuXG5cdCAgICAgICAgICAgICAgICAvLyDlj6rmnInkuIDkuKrljaDkvY3nrKbvvIzlubbkuJTmsqHmnInlhbbku5blrZfnrKZcblx0ICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlcnMubGVuZ3RoID09PSAxICYmIHBoID09PSByZXN1bHQgJiYgdHlwZW9mIHBoZWQgIT09IHR5cGVvZiByZXN1bHQpIHsgLy8gXG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGhlZFxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc051bWVyaWMocGhlZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChwaGVkLCAxMClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChwaGVkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwaGVkID09PSAndHJ1ZScgPyB0cnVlIDpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoZWQgPT09ICdmYWxzZScgPyBmYWxzZSA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGVkIC8vIOW3sue7j+aYr+W4g+WwlOWAvFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHBoLCBwaGVkKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnQVNDSUl8MS0xMCc6ICcnLFxuXHQgICAgICAgICAgICAvLyAnQVNDSUknOiAnJyxcblx0ICAgICAgICAgICAgcmVzdWx0ID0gb3B0aW9ucy5ydWxlLnJhbmdlID8gUmFuZG9tLnN0cmluZyhvcHRpb25zLnJ1bGUuY291bnQpIDogb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0XG5cdCAgICB9LFxuXHQgICAgJ2Z1bmN0aW9uJzogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIC8vICggY29udGV4dCwgb3B0aW9ucyApXG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMudGVtcGxhdGUuY2FsbChvcHRpb25zLmNvbnRleHQuY3VycmVudENvbnRleHQsIG9wdGlvbnMpXG5cdCAgICB9LFxuXHQgICAgJ3JlZ2V4cCc6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgc291cmNlID0gJydcblxuXHQgICAgICAgIC8vICduYW1lJzogL3JlZ2V4cC8sXG5cdCAgICAgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5jb3VudCA9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgc291cmNlICs9IG9wdGlvbnMudGVtcGxhdGUuc291cmNlIC8vIHJlZ2V4cC5zb3VyY2Vcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyAnbmFtZXwxLTUnOiAvcmVnZXhwLyxcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucnVsZS5jb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZSArPSBvcHRpb25zLnRlbXBsYXRlLnNvdXJjZVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBSRS5IYW5kbGVyLmdlbihcblx0ICAgICAgICAgICAgUkUuUGFyc2VyLnBhcnNlKFxuXHQgICAgICAgICAgICAgICAgc291cmNlXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICApXG5cdCAgICB9XG5cdH0pXG5cblx0SGFuZGxlci5leHRlbmQoe1xuXHQgICAgX2FsbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIHJlID0ge307XG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIFJhbmRvbSkgcmVba2V5LnRvTG93ZXJDYXNlKCldID0ga2V5XG5cdCAgICAgICAgcmV0dXJuIHJlXG5cdCAgICB9LFxuXHQgICAgLy8g5aSE55CG5Y2g5L2N56ym77yM6L2s5o2i5Li65pyA57uI5YC8XG5cdCAgICBwbGFjZWhvbGRlcjogZnVuY3Rpb24ocGxhY2Vob2xkZXIsIG9iaiwgdGVtcGxhdGVDb250ZXh0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9ucy5jb250ZXh0LnBhdGgpXG5cdCAgICAgICAgLy8gMSBrZXksIDIgcGFyYW1zXG5cdCAgICAgICAgQ29uc3RhbnQuUkVfUExBQ0VIT0xERVIuZXhlYygnJylcblx0ICAgICAgICB2YXIgcGFydHMgPSBDb25zdGFudC5SRV9QTEFDRUhPTERFUi5leGVjKHBsYWNlaG9sZGVyKSxcblx0ICAgICAgICAgICAga2V5ID0gcGFydHMgJiYgcGFydHNbMV0sXG5cdCAgICAgICAgICAgIGxrZXkgPSBrZXkgJiYga2V5LnRvTG93ZXJDYXNlKCksXG5cdCAgICAgICAgICAgIG9rZXkgPSB0aGlzLl9hbGwoKVtsa2V5XSxcblx0ICAgICAgICAgICAgcGFyYW1zID0gcGFydHMgJiYgcGFydHNbMl0gfHwgJydcblx0ICAgICAgICB2YXIgcGF0aFBhcnRzID0gdGhpcy5zcGxpdFBhdGhUb0FycmF5KGtleSlcblxuXHQgICAgICAgIC8vIOino+aekOWNoOS9jeespueahOWPguaVsFxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIC8vIDEuIOWwneivleS/neaMgeWPguaVsOeahOexu+Wei1xuXHQgICAgICAgICAgICAvKlxuXHQgICAgICAgICAgICAgICAgIzI0IFtXaW5kb3cgRmlyZWZveCAzMC4wIOW8leeUqCDljaDkvY3nrKYg5oqb6ZSZXShodHRwczovL2dpdGh1Yi5jb20vbnV5c29mdC9Nb2NrL2lzc3Vlcy8yNClcblx0ICAgICAgICAgICAgICAgIFtCWDkwNTY6IOWQhOa1j+iniOWZqOS4iyB3aW5kb3cuZXZhbCDmlrnms5XnmoTmiafooYzkuIrkuIvmloflrZjlnKjlt67lvIJdKGh0dHA6Ly93d3cudzNoZWxwLm9yZy96aC1jbi9jYXVzZXMvQlg5MDU2KVxuXHQgICAgICAgICAgICAgICAg5bqU6K+l5bGe5LqOIFdpbmRvdyBGaXJlZm94IDMwLjAg55qEIEJVR1xuXHQgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICAvKiBqc2hpbnQgLVcwNjEgKi9cblx0ICAgICAgICAgICAgcGFyYW1zID0gZXZhbCgnKGZ1bmN0aW9uKCl7IHJldHVybiBbXS5zcGxpY2UuY2FsbChhcmd1bWVudHMsIDAgKSB9KSgnICsgcGFyYW1zICsgJyknKVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIC8vIDIuIOWmguaenOWksei0pe+8jOWPquiDveino+aekOS4uuWtl+espuS4slxuXHQgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycm9yKVxuXHQgICAgICAgICAgICAvLyBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgcGFyYW1zID0gcGFydHNbMl0uc3BsaXQoLyxcXHMqLyk7XG5cdCAgICAgICAgICAgIC8vIGVsc2UgdGhyb3cgZXJyb3Jcblx0ICAgICAgICAgICAgcGFyYW1zID0gcGFydHNbMl0uc3BsaXQoLyxcXHMqLylcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDljaDkvY3nrKbkvJjlhYjlvJXnlKjmlbDmja7mqKHmnb/kuK3nmoTlsZ7mgKdcblx0ICAgICAgICBpZiAob2JqICYmIChrZXkgaW4gb2JqKSkgcmV0dXJuIG9ialtrZXldXG5cblx0ICAgICAgICAvLyBAaW5kZXggQGtleVxuXHQgICAgICAgIC8vIGlmIChDb25zdGFudC5SRV9JTkRFWC50ZXN0KGtleSkpIHJldHVybiArb3B0aW9ucy5uYW1lXG5cdCAgICAgICAgLy8gaWYgKENvbnN0YW50LlJFX0tFWS50ZXN0KGtleSkpIHJldHVybiBvcHRpb25zLm5hbWVcblxuXHQgICAgICAgIC8vIOe7neWvuei3r+W+hCBvciDnm7jlr7not6/lvoRcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgPT09ICcvJyB8fFxuXHQgICAgICAgICAgICBwYXRoUGFydHMubGVuZ3RoID4gMVxuXHQgICAgICAgICkgcmV0dXJuIHRoaXMuZ2V0VmFsdWVCeUtleVBhdGgoa2V5LCBvcHRpb25zKVxuXG5cdCAgICAgICAgLy8g6YCS5b2S5byV55So5pWw5o2u5qih5p2/5Lit55qE5bGe5oCnXG5cdCAgICAgICAgaWYgKHRlbXBsYXRlQ29udGV4dCAmJlxuXHQgICAgICAgICAgICAodHlwZW9mIHRlbXBsYXRlQ29udGV4dCA9PT0gJ29iamVjdCcpICYmXG5cdCAgICAgICAgICAgIChrZXkgaW4gdGVtcGxhdGVDb250ZXh0KSAmJlxuXHQgICAgICAgICAgICAocGxhY2Vob2xkZXIgIT09IHRlbXBsYXRlQ29udGV4dFtrZXldKSAvLyBmaXggIzE1IOmBv+WFjeiHquW3seS+nei1luiHquW3sVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICAvLyDlhYjorqHnrpfooqvlvJXnlKjnmoTlsZ7mgKflgLxcblx0ICAgICAgICAgICAgdGVtcGxhdGVDb250ZXh0W2tleV0gPSBIYW5kbGVyLmdlbih0ZW1wbGF0ZUNvbnRleHRba2V5XSwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogb2JqLFxuXHQgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogdGVtcGxhdGVDb250ZXh0XG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUNvbnRleHRba2V5XVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIOWmguaenOacquaJvuWIsO+8jOWImeWOn+agt+i/lOWbnlxuXHQgICAgICAgIGlmICghKGtleSBpbiBSYW5kb20pICYmICEobGtleSBpbiBSYW5kb20pICYmICEob2tleSBpbiBSYW5kb20pKSByZXR1cm4gcGxhY2Vob2xkZXJcblxuXHQgICAgICAgIC8vIOmAkuW9kuino+aekOWPguaVsOS4reeahOWNoOS9jeesplxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIENvbnN0YW50LlJFX1BMQUNFSE9MREVSLmV4ZWMoJycpXG5cdCAgICAgICAgICAgIGlmIChDb25zdGFudC5SRV9QTEFDRUhPTERFUi50ZXN0KHBhcmFtc1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEhhbmRsZXIucGxhY2Vob2xkZXIocGFyYW1zW2ldLCBvYmosIHRlbXBsYXRlQ29udGV4dCwgb3B0aW9ucylcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBoYW5kbGUgPSBSYW5kb21ba2V5XSB8fCBSYW5kb21bbGtleV0gfHwgUmFuZG9tW29rZXldXG5cdCAgICAgICAgc3dpdGNoIChVdGlsLnR5cGUoaGFuZGxlKSkge1xuXHQgICAgICAgICAgICBjYXNlICdhcnJheSc6XG5cdCAgICAgICAgICAgICAgICAvLyDoh6rliqjku47mlbDnu4TkuK3lj5bkuIDkuKrvvIzkvovlpoIgQGFyZWFzXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soaGFuZGxlKVxuXHQgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG5cdCAgICAgICAgICAgICAgICAvLyDmiafooYzljaDkvY3nrKbmlrnms5XvvIjlpKflpJrmlbDmg4XlhrXvvIlcblx0ICAgICAgICAgICAgICAgIGhhbmRsZS5vcHRpb25zID0gb3B0aW9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIHJlID0gaGFuZGxlLmFwcGx5KFJhbmRvbSwgcGFyYW1zKVxuXHQgICAgICAgICAgICAgICAgaWYgKHJlID09PSB1bmRlZmluZWQpIHJlID0gJycgLy8g5Zug5Li65piv5Zyo5a2X56ym5Liy5Lit77yM5omA5Lul6buY6K6k5Li656m65a2X56ym5Liy44CCXG5cdCAgICAgICAgICAgICAgICBkZWxldGUgaGFuZGxlLm9wdGlvbnNcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZVxuXHQgICAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBnZXRWYWx1ZUJ5S2V5UGF0aDogZnVuY3Rpb24oa2V5LCBvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsS2V5ID0ga2V5XG5cdCAgICAgICAgdmFyIGtleVBhdGhQYXJ0cyA9IHRoaXMuc3BsaXRQYXRoVG9BcnJheShrZXkpXG5cdCAgICAgICAgdmFyIGFic29sdXRlUGF0aFBhcnRzID0gW11cblxuXHQgICAgICAgIC8vIOe7neWvuei3r+W+hFxuXHQgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAnLycpIHtcblx0ICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMgPSBbb3B0aW9ucy5jb250ZXh0LnBhdGhbMF1dLmNvbmNhdChcblx0ICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplUGF0aChrZXlQYXRoUGFydHMpXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyDnm7jlr7not6/lvoRcblx0ICAgICAgICAgICAgaWYgKGtleVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICBhYnNvbHV0ZVBhdGhQYXJ0cyA9IG9wdGlvbnMuY29udGV4dC5wYXRoLnNsaWNlKDApXG5cdCAgICAgICAgICAgICAgICBhYnNvbHV0ZVBhdGhQYXJ0cy5wb3AoKVxuXHQgICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMgPSB0aGlzLm5vcm1hbGl6ZVBhdGgoXG5cdCAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMuY29uY2F0KGtleVBhdGhQYXJ0cylcblx0ICAgICAgICAgICAgICAgIClcblxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAga2V5ID0ga2V5UGF0aFBhcnRzW2tleVBhdGhQYXJ0cy5sZW5ndGggLSAxXVxuXHQgICAgICAgICAgICB2YXIgY3VycmVudENvbnRleHQgPSBvcHRpb25zLmNvbnRleHQucm9vdFxuXHQgICAgICAgICAgICB2YXIgdGVtcGxhdGVDdXJyZW50Q29udGV4dCA9IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVJvb3Rcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhYnNvbHV0ZVBhdGhQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0ID0gY3VycmVudENvbnRleHRbYWJzb2x1dGVQYXRoUGFydHNbaV1dXG5cdCAgICAgICAgICAgICAgICB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0ID0gdGVtcGxhdGVDdXJyZW50Q29udGV4dFthYnNvbHV0ZVBhdGhQYXJ0c1tpXV1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyDlvJXnlKjnmoTlgLzlt7Lnu4/orqHnrpflpb1cblx0ICAgICAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0ICYmIChrZXkgaW4gY3VycmVudENvbnRleHQpKSByZXR1cm4gY3VycmVudENvbnRleHRba2V5XVxuXHQgICAgXG5cdCAgICAgICAgICAgIC8vIOWwmuacquiuoeeul++8jOmAkuW9kuW8leeUqOaVsOaNruaooeadv+S4reeahOWxnuaAp1xuXHQgICAgICAgICAgICBpZiAodGVtcGxhdGVDdXJyZW50Q29udGV4dCAmJlxuXHQgICAgICAgICAgICAgICAgKHR5cGVvZiB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0ID09PSAnb2JqZWN0JykgJiZcblx0ICAgICAgICAgICAgICAgIChrZXkgaW4gdGVtcGxhdGVDdXJyZW50Q29udGV4dCkgJiZcblx0ICAgICAgICAgICAgICAgIChvcmlnaW5hbEtleSAhPT0gdGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldKSAvLyBmaXggIzE1IOmBv+WFjeiHquW3seS+nei1luiHquW3sVxuXHQgICAgICAgICAgICApIHtcblx0ICAgICAgICAgICAgICAgIC8vIOWFiOiuoeeul+iiq+W8leeUqOeahOWxnuaAp+WAvFxuXHQgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldID0gSGFuZGxlci5nZW4odGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldLCBrZXksIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogY3VycmVudENvbnRleHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogdGVtcGxhdGVDdXJyZW50Q29udGV4dFxuXHQgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0W2tleV1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2goZXJyKSB7IH1cblxuXHQgICAgICAgIHJldHVybiAnQCcgKyBrZXlQYXRoUGFydHMuam9pbignLycpXG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2tpc3N5dGVhbS9raXNzeS9ibG9iL21hc3Rlci9zcmMvcGF0aC9zcmMvcGF0aC5qc1xuXHQgICAgbm9ybWFsaXplUGF0aDogZnVuY3Rpb24ocGF0aFBhcnRzKSB7XG5cdCAgICAgICAgdmFyIG5ld1BhdGhQYXJ0cyA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoUGFydHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgc3dpdGNoIChwYXRoUGFydHNbaV0pIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJy4uJzpcblx0ICAgICAgICAgICAgICAgICAgICBuZXdQYXRoUGFydHMucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnLic6XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgbmV3UGF0aFBhcnRzLnB1c2gocGF0aFBhcnRzW2ldKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXdQYXRoUGFydHNcblx0ICAgIH0sXG5cdCAgICBzcGxpdFBhdGhUb0FycmF5OiBmdW5jdGlvbihwYXRoKSB7XG5cdCAgICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuXHQgICAgICAgIGlmICghcGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgLTEpXG5cdCAgICAgICAgaWYgKCFwYXJ0c1swXSkgcGFydHMgPSBwYXJ0cy5zbGljZSgxKVxuXHQgICAgICAgIHJldHVybiBwYXJ0cztcblx0ICAgIH1cblx0fSlcblxuXHRtb2R1bGUuZXhwb3J0cyA9IEhhbmRsZXJcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIENvbnN0YW50XG5cblx0ICAgIOW4uOmHj+mbhuWQiOOAglxuXHQgKi9cblx0Lypcblx0ICAgIFJFX0tFWVxuXHQgICAgICAgICduYW1lfG1pbi1tYXgnOiB2YWx1ZVxuXHQgICAgICAgICduYW1lfGNvdW50JzogdmFsdWVcblx0ICAgICAgICAnbmFtZXxtaW4tbWF4LmRtaW4tZG1heCc6IHZhbHVlXG5cdCAgICAgICAgJ25hbWV8bWluLW1heC5kY291bnQnOiB2YWx1ZVxuXHQgICAgICAgICduYW1lfGNvdW50LmRtaW4tZG1heCc6IHZhbHVlXG5cdCAgICAgICAgJ25hbWV8Y291bnQuZGNvdW50JzogdmFsdWVcblx0ICAgICAgICAnbmFtZXwrc3RlcCc6IHZhbHVlXG5cblx0ICAgICAgICAxIG5hbWUsIDIgc3RlcCwgMyByYW5nZSBbIG1pbiwgbWF4IF0sIDQgZHJhbmdlIFsgZG1pbiwgZG1heCBdXG5cblx0ICAgIFJFX1BMQUNFSE9MREVSXG5cdCAgICAgICAgcGxhY2Vob2xkZXIoKilcblxuXHQgICAgW+ato+WImeafpeeci+W3peWFt10oaHR0cDovL3d3dy5yZWdleHBlci5jb20vKVxuXG5cdCAgICAjMjYg55Sf5oiQ6KeE5YiZIOaUr+aMgSDotJ/mlbDvvIzkvovlpoIgbnVtYmVyfC0xMDAtMTAwXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgR1VJRDogMSxcblx0ICAgIFJFX0tFWTogLyguKylcXHwoPzpcXCsoXFxkKyl8KFtcXCtcXC1dP1xcZCstP1tcXCtcXC1dP1xcZCopPyg/OlxcLihcXGQrLT9cXGQqKSk/KS8sXG5cdCAgICBSRV9SQU5HRTogLyhbXFwrXFwtXT9cXGQrKS0/KFtcXCtcXC1dP1xcZCspPy8sXG5cdCAgICBSRV9QTEFDRUhPTERFUjogL1xcXFwqQChbXkAjJSYoKVxcP1xcc10rKSg/OlxcKCguKj8pXFwpKT8vZ1xuXHQgICAgLy8gL1xcXFwqQChbXkAjJSYoKVxcP1xcc1xcL1xcLl0rKSg/OlxcKCguKj8pXFwpKT8vZ1xuXHQgICAgLy8gUkVfSU5ERVg6IC9eaW5kZXgkLyxcblx0ICAgIC8vIFJFX0tFWTogL15rZXkkL1xuXHR9XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBVdGlsaXRpZXNcblx0Ki9cblx0dmFyIFV0aWwgPSB7fVxuXG5cdFV0aWwuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKCkge1xuXHQgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSxcblx0ICAgICAgICBpID0gMSxcblx0ICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHQgICAgICAgIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY2xvbmVcblxuXHQgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRhcmdldCA9IHRoaXNcblx0ICAgICAgICBpID0gMFxuXHQgICAgfVxuXG5cdCAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1tpXVxuXHQgICAgICAgIGlmICghb3B0aW9ucykgY29udGludWVcblxuXHQgICAgICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdCAgICAgICAgICAgIHNyYyA9IHRhcmdldFtuYW1lXVxuXHQgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1tuYW1lXVxuXG5cdCAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGNvcHkpIGNvbnRpbnVlXG5cdCAgICAgICAgICAgIGlmIChjb3B5ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cblx0ICAgICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShjb3B5KSB8fCBVdGlsLmlzT2JqZWN0KGNvcHkpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KGNvcHkpKSBjbG9uZSA9IHNyYyAmJiBVdGlsLmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdXG5cdCAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc09iamVjdChjb3B5KSkgY2xvbmUgPSBzcmMgJiYgVXRpbC5pc09iamVjdChzcmMpID8gc3JjIDoge31cblxuXHQgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gVXRpbC5leHRlbmQoY2xvbmUsIGNvcHkpXG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBjb3B5XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiB0YXJnZXRcblx0fVxuXG5cdFV0aWwuZWFjaCA9IGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuXHQgICAgdmFyIGksIGtleVxuXHQgICAgaWYgKHRoaXMudHlwZShvYmopID09PSAnbnVtYmVyJykge1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmo7IGkrKykge1xuXHQgICAgICAgICAgICBpdGVyYXRvcihpLCBpKVxuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9PT0gZmFsc2UpIGJyZWFrXG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKSA9PT0gZmFsc2UpIGJyZWFrXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9XG5cblx0VXRpbC50eXBlID0gZnVuY3Rpb24gdHlwZShvYmopIHtcblx0ICAgIHJldHVybiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSA/IFN0cmluZyhvYmopIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xcW29iamVjdCAoXFx3KylcXF0vKVsxXS50b0xvd2VyQ2FzZSgpXG5cdH1cblxuXHRVdGlsLmVhY2goJ1N0cmluZyBPYmplY3QgQXJyYXkgUmVnRXhwIEZ1bmN0aW9uJy5zcGxpdCgnICcpLCBmdW5jdGlvbih2YWx1ZSkge1xuXHQgICAgVXRpbFsnaXMnICsgdmFsdWVdID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICAgICAgcmV0dXJuIFV0aWwudHlwZShvYmopID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG5cdCAgICB9XG5cdH0pXG5cblx0VXRpbC5pc09iamVjdE9yQXJyYXkgPSBmdW5jdGlvbih2YWx1ZSkge1xuXHQgICAgcmV0dXJuIFV0aWwuaXNPYmplY3QodmFsdWUpIHx8IFV0aWwuaXNBcnJheSh2YWx1ZSlcblx0fVxuXG5cdFV0aWwuaXNOdW1lcmljID0gZnVuY3Rpb24odmFsdWUpIHtcblx0ICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKVxuXHR9XG5cblx0VXRpbC5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICB2YXIga2V5cyA9IFtdO1xuXHQgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuXHQgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkga2V5cy5wdXNoKGtleSlcblx0ICAgIH1cblx0ICAgIHJldHVybiBrZXlzO1xuXHR9XG5cdFV0aWwudmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICB2YXIgdmFsdWVzID0gW107XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG5cdCAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB2YWx1ZXMucHVzaChvYmpba2V5XSlcblx0ICAgIH1cblx0ICAgIHJldHVybiB2YWx1ZXM7XG5cdH1cblxuXHQvKlxuXHQgICAgIyMjIE1vY2suaGVyZWRvYyhmbilcblxuXHQgICAgKiBNb2NrLmhlcmVkb2MoZm4pXG5cblx0ICAgIOS7peebtOinguOAgeWuieWFqOeahOaWueW8j+S5puWGme+8iOWkmuihjO+8iUhUTUwg5qih5p2/44CCXG5cblx0ICAgICoq5L2/55So56S65L6LKirlpoLkuIvmiYDnpLrvvJpcblxuXHQgICAgICAgIHZhciB0cGwgPSBNb2NrLmhlcmVkb2MoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIC8qIVxuXHQgICAgICAgIHt7ZW1haWx9fXt7YWdlfX1cblx0ICAgICAgICA8IS0tIE1vY2sgeyBcblx0ICAgICAgICAgICAgZW1haWw6ICdARU1BSUwnLFxuXHQgICAgICAgICAgICBhZ2U6ICdASU5UKDEsMTAwKSdcblx0ICAgICAgICB9IC0tPlxuXHQgICAgICAgICAgICAqXFwvXG5cdCAgICAgICAgfSlcblx0ICAgIFxuXHQgICAgKirnm7jlhbPpmIXor7sqKlxuXHQgICAgKiBbQ3JlYXRpbmcgbXVsdGlsaW5lIHN0cmluZ3MgaW4gSmF2YVNjcmlwdF0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84MDUxMDcvY3JlYXRpbmctbXVsdGlsaW5lLXN0cmluZ3MtaW4tamF2YXNjcmlwdCnjgIFcblx0Ki9cblx0VXRpbC5oZXJlZG9jID0gZnVuY3Rpb24gaGVyZWRvYyhmbikge1xuXHQgICAgLy8gMS4g56e76Zmk6LW35aeL55qEIGZ1bmN0aW9uKCl7IC8qIVxuXHQgICAgLy8gMi4g56e76Zmk5pyr5bC+55qEICovIH1cblx0ICAgIC8vIDMuIOenu+mZpOi1t+Wni+WSjOacq+WwvueahOepuuagvFxuXHQgICAgcmV0dXJuIGZuLnRvU3RyaW5nKClcblx0ICAgICAgICAucmVwbGFjZSgvXlteXFwvXStcXC9cXCohPy8sICcnKVxuXHQgICAgICAgIC5yZXBsYWNlKC9cXCpcXC9bXlxcL10rJC8sICcnKVxuXHQgICAgICAgIC5yZXBsYWNlKC9eW1xcc1xceEEwXSsvLCAnJykucmVwbGFjZSgvW1xcc1xceEEwXSskLywgJycpIC8vIC50cmltKClcblx0fVxuXG5cdFV0aWwubm9vcCA9IGZ1bmN0aW9uKCkge31cblxuXHRtb2R1bGUuZXhwb3J0cyA9IFV0aWxcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0XHQjIyBQYXJzZXJcblxuXHRcdOino+aekOaVsOaNruaooeadv++8iOWxnuaAp+WQjemDqOWIhu+8ieOAglxuXG5cdFx0KiBQYXJzZXIucGFyc2UoIG5hbWUgKVxuXHRcdFx0XG5cdFx0XHRgYGBqc29uXG5cdFx0XHR7XG5cdFx0XHRcdHBhcmFtZXRlcnM6IFsgbmFtZSwgaW5jLCByYW5nZSwgZGVjaW1hbCBdLFxuXHRcdFx0XHRybmFnZTogWyBtaW4gLCBtYXggXSxcblxuXHRcdFx0XHRtaW46IG1pbixcblx0XHRcdFx0bWF4OiBtYXgsXG5cdFx0XHRcdGNvdW50IDogY291bnQsXG5cblx0XHRcdFx0ZGVjaW1hbDogZGVjaW1hbCxcblx0XHRcdFx0ZG1pbjogZG1pbixcblx0XHRcdFx0ZG1heDogZG1heCxcblx0XHRcdFx0ZGNvdW50OiBkY291bnRcblx0XHRcdH1cblx0XHRcdGBgYFxuXHQgKi9cblxuXHR2YXIgQ29uc3RhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cblx0LyoganNoaW50IC1XMDQxICovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdHBhcnNlOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRuYW1lID0gbmFtZSA9PSB1bmRlZmluZWQgPyAnJyA6IChuYW1lICsgJycpXG5cblx0XHRcdHZhciBwYXJhbWV0ZXJzID0gKG5hbWUgfHwgJycpLm1hdGNoKENvbnN0YW50LlJFX0tFWSlcblxuXHRcdFx0dmFyIHJhbmdlID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzWzNdICYmIHBhcmFtZXRlcnNbM10ubWF0Y2goQ29uc3RhbnQuUkVfUkFOR0UpXG5cdFx0XHR2YXIgbWluID0gcmFuZ2UgJiYgcmFuZ2VbMV0gJiYgcGFyc2VJbnQocmFuZ2VbMV0sIDEwKSAvLyB8fCAxXG5cdFx0XHR2YXIgbWF4ID0gcmFuZ2UgJiYgcmFuZ2VbMl0gJiYgcGFyc2VJbnQocmFuZ2VbMl0sIDEwKSAvLyB8fCAxXG5cdFx0XHRcdC8vIHJlcGVhdCB8fCBtaW4tbWF4IHx8IDFcblx0XHRcdFx0Ly8gdmFyIGNvdW50ID0gcmFuZ2UgPyAhcmFuZ2VbMl0gJiYgcGFyc2VJbnQocmFuZ2VbMV0sIDEwKSB8fCBSYW5kb20uaW50ZWdlcihtaW4sIG1heCkgOiAxXG5cdFx0XHR2YXIgY291bnQgPSByYW5nZSA/ICFyYW5nZVsyXSA/IHBhcnNlSW50KHJhbmdlWzFdLCAxMCkgOiBSYW5kb20uaW50ZWdlcihtaW4sIG1heCkgOiB1bmRlZmluZWRcblxuXHRcdFx0dmFyIGRlY2ltYWwgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnNbNF0gJiYgcGFyYW1ldGVyc1s0XS5tYXRjaChDb25zdGFudC5SRV9SQU5HRSlcblx0XHRcdHZhciBkbWluID0gZGVjaW1hbCAmJiBkZWNpbWFsWzFdICYmIHBhcnNlSW50KGRlY2ltYWxbMV0sIDEwKSAvLyB8fCAwLFxuXHRcdFx0dmFyIGRtYXggPSBkZWNpbWFsICYmIGRlY2ltYWxbMl0gJiYgcGFyc2VJbnQoZGVjaW1hbFsyXSwgMTApIC8vIHx8IDAsXG5cdFx0XHRcdC8vIGludCB8fCBkbWluLWRtYXggfHwgMFxuXHRcdFx0dmFyIGRjb3VudCA9IGRlY2ltYWwgPyAhZGVjaW1hbFsyXSAmJiBwYXJzZUludChkZWNpbWFsWzFdLCAxMCkgfHwgUmFuZG9tLmludGVnZXIoZG1pbiwgZG1heCkgOiB1bmRlZmluZWRcblxuXHRcdFx0dmFyIHJlc3VsdCA9IHtcblx0XHRcdFx0Ly8gMSBuYW1lLCAyIGluYywgMyByYW5nZSwgNCBkZWNpbWFsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG5cdFx0XHRcdC8vIDEgbWluLCAyIG1heFxuXHRcdFx0XHRyYW5nZTogcmFuZ2UsXG5cdFx0XHRcdG1pbjogbWluLFxuXHRcdFx0XHRtYXg6IG1heCxcblx0XHRcdFx0Ly8gbWluLW1heFxuXHRcdFx0XHRjb3VudDogY291bnQsXG5cdFx0XHRcdC8vIOaYr+WQpuaciSBkZWNpbWFsXG5cdFx0XHRcdGRlY2ltYWw6IGRlY2ltYWwsXG5cdFx0XHRcdGRtaW46IGRtaW4sXG5cdFx0XHRcdGRtYXg6IGRtYXgsXG5cdFx0XHRcdC8vIGRtaW4tZGltYXhcblx0XHRcdFx0ZGNvdW50OiBkY291bnRcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgciBpbiByZXN1bHQpIHtcblx0XHRcdFx0aWYgKHJlc3VsdFtyXSAhPSB1bmRlZmluZWQpIHJldHVybiByZXN1bHRcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHt9XG5cdFx0fVxuXHR9XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qXG5cdCAgICAjIyBNb2NrLlJhbmRvbVxuXHQgICAgXG5cdCAgICDlt6XlhbfnsbvvvIznlKjkuo7nlJ/miJDlkITnp43pmo/mnLrmlbDmja7jgIJcblx0Ki9cblxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblxuXHR2YXIgUmFuZG9tID0ge1xuXHQgICAgZXh0ZW5kOiBVdGlsLmV4dGVuZFxuXHR9XG5cblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKVxuXHRSYW5kb20uZXh0ZW5kKF9fd2VicGFja19yZXF1aXJlX18oNykpXG5cdFJhbmRvbS5leHRlbmQoX193ZWJwYWNrX3JlcXVpcmVfXyg4KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSlcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKlxuXHQgICAgIyMgQmFzaWNzXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5biD5bCU5YC844CCXG5cdCAgICBib29sZWFuOiBmdW5jdGlvbihtaW4sIG1heCwgY3VyKSB7XG5cdCAgICAgICAgaWYgKGN1ciAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgIG1pbiA9IHR5cGVvZiBtaW4gIT09ICd1bmRlZmluZWQnICYmICFpc05hTihtaW4pID8gcGFyc2VJbnQobWluLCAxMCkgOiAxXG5cdCAgICAgICAgICAgIG1heCA9IHR5cGVvZiBtYXggIT09ICd1bmRlZmluZWQnICYmICFpc05hTihtYXgpID8gcGFyc2VJbnQobWF4LCAxMCkgOiAxXG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpID4gMS4wIC8gKG1pbiArIG1heCkgKiBtaW4gPyAhY3VyIDogY3VyXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgPj0gMC41XG5cdCAgICB9LFxuXHQgICAgYm9vbDogZnVuY3Rpb24obWluLCBtYXgsIGN1cikge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmJvb2xlYW4obWluLCBtYXgsIGN1cilcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrpmo/mnLrnmoToh6rnhLbmlbDvvIjlpKfkuo7nrYnkuo4gMCDnmoTmlbTmlbDvvInjgIJcblx0ICAgIG5hdHVyYWw6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgbWluID0gdHlwZW9mIG1pbiAhPT0gJ3VuZGVmaW5lZCcgPyBwYXJzZUludChtaW4sIDEwKSA6IDBcblx0ICAgICAgICBtYXggPSB0eXBlb2YgbWF4ICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1heCwgMTApIDogOTAwNzE5OTI1NDc0MDk5MiAvLyAyXjUzXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pblxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOaVtOaVsOOAglxuXHQgICAgaW50ZWdlcjogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICBtaW4gPSB0eXBlb2YgbWluICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1pbiwgMTApIDogLTkwMDcxOTkyNTQ3NDA5OTJcblx0ICAgICAgICBtYXggPSB0eXBlb2YgbWF4ICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1heCwgMTApIDogOTAwNzE5OTI1NDc0MDk5MiAvLyAyXjUzXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pblxuXHQgICAgfSxcblx0ICAgIGludDogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5pbnRlZ2VyKG1pbiwgbWF4KVxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOa1rueCueaVsOOAglxuXHQgICAgZmxvYXQ6IGZ1bmN0aW9uKG1pbiwgbWF4LCBkbWluLCBkbWF4KSB7XG5cdCAgICAgICAgZG1pbiA9IGRtaW4gPT09IHVuZGVmaW5lZCA/IDAgOiBkbWluXG5cdCAgICAgICAgZG1pbiA9IE1hdGgubWF4KE1hdGgubWluKGRtaW4sIDE3KSwgMClcblx0ICAgICAgICBkbWF4ID0gZG1heCA9PT0gdW5kZWZpbmVkID8gMTcgOiBkbWF4XG5cdCAgICAgICAgZG1heCA9IE1hdGgubWF4KE1hdGgubWluKGRtYXgsIDE3KSwgMClcblx0ICAgICAgICB2YXIgcmV0ID0gdGhpcy5pbnRlZ2VyKG1pbiwgbWF4KSArICcuJztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgZGNvdW50ID0gdGhpcy5uYXR1cmFsKGRtaW4sIGRtYXgpOyBpIDwgZGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgcmV0ICs9IChcblx0ICAgICAgICAgICAgICAgIC8vIOacgOWQjuS4gOS9jeS4jeiDveS4uiAw77ya5aaC5p6c5pyA5ZCO5LiA5L2N5Li6IDDvvIzkvJrooqsgSlMg5byV5pOO5b+955Wl5o6J44CCXG5cdCAgICAgICAgICAgICAgICAoaSA8IGRjb3VudCAtIDEpID8gdGhpcy5jaGFyYWN0ZXIoJ251bWJlcicpIDogdGhpcy5jaGFyYWN0ZXIoJzEyMzQ1Njc4OScpXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmV0LCAxMClcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrpmo/mnLrlrZfnrKbjgIJcblx0ICAgIGNoYXJhY3RlcjogZnVuY3Rpb24ocG9vbCkge1xuXHQgICAgICAgIHZhciBwb29scyA9IHtcblx0ICAgICAgICAgICAgbG93ZXI6ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdCAgICAgICAgICAgIHVwcGVyOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxuXHQgICAgICAgICAgICBudW1iZXI6ICcwMTIzNDU2Nzg5Jyxcblx0ICAgICAgICAgICAgc3ltYm9sOiAnIUAjJCVeJiooKVtdJ1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwb29scy5hbHBoYSA9IHBvb2xzLmxvd2VyICsgcG9vbHMudXBwZXJcblx0ICAgICAgICBwb29sc1sndW5kZWZpbmVkJ10gPSBwb29scy5sb3dlciArIHBvb2xzLnVwcGVyICsgcG9vbHMubnVtYmVyICsgcG9vbHMuc3ltYm9sXG5cblx0ICAgICAgICBwb29sID0gcG9vbHNbKCcnICsgcG9vbCkudG9Mb3dlckNhc2UoKV0gfHwgcG9vbFxuXHQgICAgICAgIHJldHVybiBwb29sLmNoYXJBdCh0aGlzLm5hdHVyYWwoMCwgcG9vbC5sZW5ndGggLSAxKSlcblx0ICAgIH0sXG5cdCAgICBjaGFyOiBmdW5jdGlvbihwb29sKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyKHBvb2wpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py65a2X56ym5Liy44CCXG5cdCAgICBzdHJpbmc6IGZ1bmN0aW9uKHBvb2wsIG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlblxuXHQgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBjYXNlIDA6IC8vICgpXG5cdCAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLm5hdHVyYWwoMywgNylcblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgMTogLy8gKCBsZW5ndGggKVxuXHQgICAgICAgICAgICAgICAgbGVuID0gcG9vbFxuXHQgICAgICAgICAgICAgICAgcG9vbCA9IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAyOlxuXHQgICAgICAgICAgICAgICAgLy8gKCBwb29sLCBsZW5ndGggKVxuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gbWluXG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vICggbWluLCBtYXggKVxuXHQgICAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMubmF0dXJhbChwb29sLCBtaW4pXG5cdCAgICAgICAgICAgICAgICAgICAgcG9vbCA9IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAzOlxuXHQgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKG1pbiwgbWF4KVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgdGV4dCA9ICcnXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB0ZXh0ICs9IHRoaXMuY2hhcmFjdGVyKHBvb2wpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHRleHRcblx0ICAgIH0sXG5cdCAgICBzdHI6IGZ1bmN0aW9uKCAvKnBvb2wsIG1pbiwgbWF4Ki8gKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrmlbTlnovmlbDnu4TjgIJcblx0ICAgIHJhbmdlOiBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuXHQgICAgICAgIC8vIHJhbmdlKCBzdG9wIClcblx0ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAxKSB7XG5cdCAgICAgICAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICBzdGFydCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIHJhbmdlKCBzdGFydCwgc3RvcCApXG5cdCAgICAgICAgc3RlcCA9IGFyZ3VtZW50c1syXSB8fCAxO1xuXG5cdCAgICAgICAgc3RhcnQgPSArc3RhcnRcblx0ICAgICAgICBzdG9wID0gK3N0b3Bcblx0ICAgICAgICBzdGVwID0gK3N0ZXBcblxuXHQgICAgICAgIHZhciBsZW4gPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG5cdCAgICAgICAgdmFyIGlkeCA9IDA7XG5cdCAgICAgICAgdmFyIHJhbmdlID0gbmV3IEFycmF5KGxlbik7XG5cblx0ICAgICAgICB3aGlsZSAoaWR4IDwgbGVuKSB7XG5cdCAgICAgICAgICAgIHJhbmdlW2lkeCsrXSA9IHN0YXJ0O1xuXHQgICAgICAgICAgICBzdGFydCArPSBzdGVwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiByYW5nZTtcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKlxuXHQgICAgIyMgRGF0ZVxuXHQqL1xuXHR2YXIgcGF0dGVybkxldHRlcnMgPSB7XG5cdCAgICB5eXl5OiAnZ2V0RnVsbFllYXInLFxuXHQgICAgeXk6IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICByZXR1cm4gKCcnICsgZGF0ZS5nZXRGdWxsWWVhcigpKS5zbGljZSgyKVxuXHQgICAgfSxcblx0ICAgIHk6ICd5eScsXG5cblx0ICAgIE1NOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIG0gPSBkYXRlLmdldE1vbnRoKCkgKyAxXG5cdCAgICAgICAgcmV0dXJuIG0gPCAxMCA/ICcwJyArIG0gOiBtXG5cdCAgICB9LFxuXHQgICAgTTogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxXG5cdCAgICB9LFxuXG5cdCAgICBkZDogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHZhciBkID0gZGF0ZS5nZXREYXRlKClcblx0ICAgICAgICByZXR1cm4gZCA8IDEwID8gJzAnICsgZCA6IGRcblx0ICAgIH0sXG5cdCAgICBkOiAnZ2V0RGF0ZScsXG5cblx0ICAgIEhIOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKClcblx0ICAgICAgICByZXR1cm4gaCA8IDEwID8gJzAnICsgaCA6IGhcblx0ICAgIH0sXG5cdCAgICBIOiAnZ2V0SG91cnMnLFxuXHQgICAgaGg6IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICB2YXIgaCA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyXG5cdCAgICAgICAgcmV0dXJuIGggPCAxMCA/ICcwJyArIGggOiBoXG5cdCAgICB9LFxuXHQgICAgaDogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCkgJSAxMlxuXHQgICAgfSxcblxuXHQgICAgbW06IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICB2YXIgbSA9IGRhdGUuZ2V0TWludXRlcygpXG5cdCAgICAgICAgcmV0dXJuIG0gPCAxMCA/ICcwJyArIG0gOiBtXG5cdCAgICB9LFxuXHQgICAgbTogJ2dldE1pbnV0ZXMnLFxuXG5cdCAgICBzczogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKClcblx0ICAgICAgICByZXR1cm4gcyA8IDEwID8gJzAnICsgcyA6IHNcblx0ICAgIH0sXG5cdCAgICBzOiAnZ2V0U2Vjb25kcycsXG5cblx0ICAgIFNTOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIG1zID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuXHQgICAgICAgIHJldHVybiBtcyA8IDEwICYmICcwMCcgKyBtcyB8fCBtcyA8IDEwMCAmJiAnMCcgKyBtcyB8fCBtc1xuXHQgICAgfSxcblx0ICAgIFM6ICdnZXRNaWxsaXNlY29uZHMnLFxuXG5cdCAgICBBOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ0FNJyA6ICdQTSdcblx0ICAgIH0sXG5cdCAgICBhOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbSdcblx0ICAgIH0sXG5cdCAgICBUOiAnZ2V0VGltZSdcblx0fVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIOaXpeacn+WNoOS9jeespumbhuWQiOOAglxuXHQgICAgX3BhdHRlcm5MZXR0ZXJzOiBwYXR0ZXJuTGV0dGVycyxcblx0ICAgIC8vIOaXpeacn+WNoOS9jeespuato+WImeOAglxuXHQgICAgX3Jmb3JtYXQ6IG5ldyBSZWdFeHAoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciByZSA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSBpbiBwYXR0ZXJuTGV0dGVycykgcmUucHVzaChpKVxuXHQgICAgICAgIHJldHVybiAnKCcgKyByZS5qb2luKCd8JykgKyAnKSdcblx0ICAgIH0pKCksICdnJyksXG5cdCAgICAvLyDmoLzlvI/ljJbml6XmnJ/jgIJcblx0ICAgIF9mb3JtYXREYXRlOiBmdW5jdGlvbihkYXRlLCBmb3JtYXQpIHtcblx0ICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UodGhpcy5fcmZvcm1hdCwgZnVuY3Rpb24gY3JlYXROZXdTdWJTdHJpbmcoJDAsIGZsYWcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXR0ZXJuTGV0dGVyc1tmbGFnXSA9PT0gJ2Z1bmN0aW9uJyA/IHBhdHRlcm5MZXR0ZXJzW2ZsYWddKGRhdGUpIDpcblx0ICAgICAgICAgICAgICAgIHBhdHRlcm5MZXR0ZXJzW2ZsYWddIGluIHBhdHRlcm5MZXR0ZXJzID8gY3JlYXROZXdTdWJTdHJpbmcoJDAsIHBhdHRlcm5MZXR0ZXJzW2ZsYWddKSA6XG5cdCAgICAgICAgICAgICAgICBkYXRlW3BhdHRlcm5MZXR0ZXJzW2ZsYWddXSgpXG5cdCAgICAgICAgfSlcblx0ICAgIH0sXG5cdCAgICAvLyDnlJ/miJDkuIDkuKrpmo/mnLrnmoQgRGF0ZSDlr7nosaHjgIJcblx0ICAgIF9yYW5kb21EYXRlOiBmdW5jdGlvbihtaW4sIG1heCkgeyAvLyBtaW4sIG1heFxuXHQgICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUoMCkgOiBtaW5cblx0ICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBtYXhcblx0ICAgICAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yYW5kb20oKSAqIChtYXguZ2V0VGltZSgpIC0gbWluLmdldFRpbWUoKSkpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5pel5pyf5a2X56ym5Liy44CCXG5cdCAgICBkYXRlOiBmdW5jdGlvbihmb3JtYXQpIHtcblx0ICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ3l5eXktTU0tZGQnXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdERhdGUodGhpcy5fcmFuZG9tRGF0ZSgpLCBmb3JtYXQpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5pe26Ze05a2X56ym5Liy44CCXG5cdCAgICB0aW1lOiBmdW5jdGlvbihmb3JtYXQpIHtcblx0ICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ0hIOm1tOnNzJ1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXREYXRlKHRoaXMuX3JhbmRvbURhdGUoKSwgZm9ybWF0KVxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOaXpeacn+WSjOaXtumXtOWtl+espuS4suOAglxuXHQgICAgZGF0ZXRpbWU6IGZ1bmN0aW9uKGZvcm1hdCkge1xuXHQgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAneXl5eS1NTS1kZCBISDptbTpzcydcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0RGF0ZSh0aGlzLl9yYW5kb21EYXRlKCksIGZvcm1hdClcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57lvZPliY3nmoTml6XmnJ/lkozml7bpl7TlrZfnrKbkuLLjgIJcblx0ICAgIG5vdzogZnVuY3Rpb24odW5pdCwgZm9ybWF0KSB7XG5cdCAgICAgICAgLy8gbm93KHVuaXQpIG5vdyhmb3JtYXQpXG5cdCAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy8gbm93KGZvcm1hdClcblx0ICAgICAgICAgICAgaWYgKCEveWVhcnxtb250aHxkYXl8aG91cnxtaW51dGV8c2Vjb25kfHdlZWsvLnRlc3QodW5pdCkpIHtcblx0ICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuaXRcblx0ICAgICAgICAgICAgICAgIHVuaXQgPSAnJ1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHVuaXQgPSAodW5pdCB8fCAnJykudG9Mb3dlckNhc2UoKVxuXHQgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAneXl5eS1NTS1kZCBISDptbTpzcydcblxuXHQgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKVxuXG5cdCAgICAgICAgLyoganNoaW50IC1XMDg2ICovXG5cdCAgICAgICAgLy8g5Y+C6ICD6IeqIGh0dHA6Ly9tb21lbnRqcy5jbi9kb2NzLyMvbWFuaXB1bGF0aW5nL3N0YXJ0LW9mL1xuXHQgICAgICAgIHN3aXRjaCAodW5pdCkge1xuXHQgICAgICAgICAgICBjYXNlICd5ZWFyJzpcblx0ICAgICAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMClcblx0ICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpXG5cdCAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuXHQgICAgICAgICAgICBjYXNlICdkYXknOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwKVxuXHQgICAgICAgICAgICBjYXNlICdob3VyJzpcblx0ICAgICAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcygwKVxuXHQgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKDApXG5cdCAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG5cdCAgICAgICAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuXHQgICAgICAgIH1cblx0ICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcblx0ICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG5cdCAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXREYXRlKGRhdGUsIGZvcm1hdClcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogZ2xvYmFsIGRvY3VtZW50ICAqL1xuXHQvKlxuXHQgICAgIyMgSW1hZ2Vcblx0Ki9cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgICAvLyDluLjop4HnmoTlub/lkYrlrr3pq5hcblx0ICAgIF9hZFNpemU6IFtcblx0ICAgICAgICAnMzAweDI1MCcsICcyNTB4MjUwJywgJzI0MHg0MDAnLCAnMzM2eDI4MCcsICcxODB4MTUwJyxcblx0ICAgICAgICAnNzIweDMwMCcsICc0Njh4NjAnLCAnMjM0eDYwJywgJzg4eDMxJywgJzEyMHg5MCcsXG5cdCAgICAgICAgJzEyMHg2MCcsICcxMjB4MjQwJywgJzEyNXgxMjUnLCAnNzI4eDkwJywgJzE2MHg2MDAnLFxuXHQgICAgICAgICcxMjB4NjAwJywgJzMwMHg2MDAnXG5cdCAgICBdLFxuXHQgICAgLy8g5bi46KeB55qE5bGP5bmV5a696auYXG5cdCAgICBfc2NyZWVuU2l6ZTogW1xuXHQgICAgICAgICczMjB4MjAwJywgJzMyMHgyNDAnLCAnNjQweDQ4MCcsICc4MDB4NDgwJywgJzgwMHg0ODAnLFxuXHQgICAgICAgICcxMDI0eDYwMCcsICcxMDI0eDc2OCcsICcxMjgweDgwMCcsICcxNDQweDkwMCcsICcxOTIweDEyMDAnLFxuXHQgICAgICAgICcyNTYweDE2MDAnXG5cdCAgICBdLFxuXHQgICAgLy8g5bi46KeB55qE6KeG6aKR5a696auYXG5cdCAgICBfdmlkZW9TaXplOiBbJzcyMHg0ODAnLCAnNzY4eDU3NicsICcxMjgweDcyMCcsICcxOTIweDEwODAnXSxcblx0ICAgIC8qXG5cdCAgICAgICAg55Sf5oiQ5LiA5Liq6ZqP5py655qE5Zu+54mH5Zyw5Z2A44CCXG5cblx0ICAgICAgICDmm7/ku6Plm77niYfmupBcblx0ICAgICAgICAgICAgaHR0cDovL2Zwb2ltZy5jb20vXG5cdCAgICAgICAg5Y+C6ICD6IeqIFxuXHQgICAgICAgICAgICBodHRwOi8vcmVuc2FubmluZy5pdGV5ZS5jb20vYmxvZy8xOTMzMzEwXG5cdCAgICAgICAgICAgIGh0dHA6Ly9jb2RlLnR1dHNwbHVzLmNvbS9hcnRpY2xlcy90aGUtdG9wLTgtcGxhY2Vob2xkZXJzLWZvci13ZWItZGVzaWduZXJzLS1uZXQtMTk0ODVcblx0ICAgICovXG5cdCAgICBpbWFnZTogZnVuY3Rpb24oc2l6ZSwgYmFja2dyb3VuZCwgZm9yZWdyb3VuZCwgZm9ybWF0LCB0ZXh0KSB7XG5cdCAgICAgICAgLy8gUmFuZG9tLmltYWdlKCBzaXplLCBiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kLCB0ZXh0IClcblx0ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkge1xuXHQgICAgICAgICAgICB0ZXh0ID0gZm9ybWF0XG5cdCAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZFxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBSYW5kb20uaW1hZ2UoIHNpemUsIGJhY2tncm91bmQsIHRleHQgKVxuXHQgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG5cdCAgICAgICAgICAgIHRleHQgPSBmb3JlZ3JvdW5kXG5cdCAgICAgICAgICAgIGZvcmVncm91bmQgPSB1bmRlZmluZWRcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gUmFuZG9tLmltYWdlKClcblx0ICAgICAgICBpZiAoIXNpemUpIHNpemUgPSB0aGlzLnBpY2sodGhpcy5fYWRTaXplKVxuXG5cdCAgICAgICAgaWYgKGJhY2tncm91bmQgJiYgfmJhY2tncm91bmQuaW5kZXhPZignIycpKSBiYWNrZ3JvdW5kID0gYmFja2dyb3VuZC5zbGljZSgxKVxuXHQgICAgICAgIGlmIChmb3JlZ3JvdW5kICYmIH5mb3JlZ3JvdW5kLmluZGV4T2YoJyMnKSkgZm9yZWdyb3VuZCA9IGZvcmVncm91bmQuc2xpY2UoMSlcblxuXHQgICAgICAgIC8vIGh0dHA6Ly9kdW1teWltYWdlLmNvbS82MDB4NDAwL2NjMDBjYy80NzAwNDcucG5nJnRleHQ9aGVsbG9cblx0ICAgICAgICByZXR1cm4gJ2h0dHA6Ly9kdW1teWltYWdlLmNvbS8nICsgc2l6ZSArXG5cdCAgICAgICAgICAgIChiYWNrZ3JvdW5kID8gJy8nICsgYmFja2dyb3VuZCA6ICcnKSArXG5cdCAgICAgICAgICAgIChmb3JlZ3JvdW5kID8gJy8nICsgZm9yZWdyb3VuZCA6ICcnKSArXG5cdCAgICAgICAgICAgIChmb3JtYXQgPyAnLicgKyBmb3JtYXQgOiAnJykgK1xuXHQgICAgICAgICAgICAodGV4dCA/ICcmdGV4dD0nICsgdGV4dCA6ICcnKVxuXHQgICAgfSxcblx0ICAgIGltZzogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHQgICAgfSxcblxuXHQgICAgLypcblx0ICAgICAgICBCcmFuZENvbG9yc1xuXHQgICAgICAgIGh0dHA6Ly9icmFuZGNvbG9ycy5uZXQvXG5cdCAgICAgICAgQSBjb2xsZWN0aW9uIG9mIG1ham9yIGJyYW5kIGNvbG9yIGNvZGVzIGN1cmF0ZWQgYnkgR2FsZW4gR2lkbWFuLlxuXHQgICAgICAgIOWkp+eJjOWFrOWPuOeahOminOiJsumbhuWQiFxuXG5cdCAgICAgICAgLy8g6I635Y+W5ZOB54mM5ZKM6aKc6ImyXG5cdCAgICAgICAgJCgnaDInKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBpdGVtKXtcblx0ICAgICAgICAgICAgaXRlbSA9ICQoaXRlbSlcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJ1xcJycgKyBpdGVtLnRleHQoKSArICdcXCcnLCAnOicsICdcXCcnICsgaXRlbS5uZXh0KCkudGV4dCgpICsgJ1xcJycsICcsJylcblx0ICAgICAgICB9KVxuXHQgICAgKi9cblx0ICAgIF9icmFuZENvbG9yczoge1xuXHQgICAgICAgICc0b3JtYXQnOiAnI2ZiMGEyYScsXG5cdCAgICAgICAgJzUwMHB4JzogJyMwMmFkZWEnLFxuXHQgICAgICAgICdBYm91dC5tZSAoYmx1ZSknOiAnIzAwNDA1ZCcsXG5cdCAgICAgICAgJ0Fib3V0Lm1lICh5ZWxsb3cpJzogJyNmZmNjMzMnLFxuXHQgICAgICAgICdBZGR2b2NhdGUnOiAnI2ZmNjEzOCcsXG5cdCAgICAgICAgJ0Fkb2JlJzogJyNmZjAwMDAnLFxuXHQgICAgICAgICdBaW0nOiAnI2ZjZDIwYicsXG5cdCAgICAgICAgJ0FtYXpvbic6ICcjZTQ3OTExJyxcblx0ICAgICAgICAnQW5kcm9pZCc6ICcjYTRjNjM5Jyxcblx0ICAgICAgICAnQW5naWVcXCdzIExpc3QnOiAnIzdmYmIwMCcsXG5cdCAgICAgICAgJ0FPTCc6ICcjMDA2MGEzJyxcblx0ICAgICAgICAnQXRsYXNzaWFuJzogJyMwMDMzNjYnLFxuXHQgICAgICAgICdCZWhhbmNlJzogJyMwNTNlZmYnLFxuXHQgICAgICAgICdCaWcgQ2FydGVsJzogJyM5N2I1MzgnLFxuXHQgICAgICAgICdiaXRseSc6ICcjZWU2MTIzJyxcblx0ICAgICAgICAnQmxvZ2dlcic6ICcjZmM0ZjA4Jyxcblx0ICAgICAgICAnQm9laW5nJzogJyMwMDM5YTYnLFxuXHQgICAgICAgICdCb29raW5nLmNvbSc6ICcjMDAzNTgwJyxcblx0ICAgICAgICAnQ2FyYm9ubWFkZSc6ICcjNjEzODU0Jyxcblx0ICAgICAgICAnQ2hlZGRhcic6ICcjZmY3MjQzJyxcblx0ICAgICAgICAnQ29kZSBTY2hvb2wnOiAnIzNkNDk0NCcsXG5cdCAgICAgICAgJ0RlbGljaW91cyc6ICcjMjA1Y2MwJyxcblx0ICAgICAgICAnRGVsbCc6ICcjMzI4N2MxJyxcblx0ICAgICAgICAnRGVzaWdubW9vJzogJyNlNTRhNGYnLFxuXHQgICAgICAgICdEZXZpYW50YXJ0JzogJyM0ZTYyNTInLFxuXHQgICAgICAgICdEZXNpZ25lciBOZXdzJzogJyMyZDcyZGEnLFxuXHQgICAgICAgICdEZXZvdXInOiAnI2ZkMDAwMScsXG5cdCAgICAgICAgJ0RFV0FMVCc6ICcjZmViZDE3Jyxcblx0ICAgICAgICAnRGlzcXVzIChibHVlKSc6ICcjNTlhM2ZjJyxcblx0ICAgICAgICAnRGlzcXVzIChvcmFuZ2UpJzogJyNkYjcxMzInLFxuXHQgICAgICAgICdEcmliYmJsZSc6ICcjZWE0Yzg5Jyxcblx0ICAgICAgICAnRHJvcGJveCc6ICcjM2Q5YWU4Jyxcblx0ICAgICAgICAnRHJ1cGFsJzogJyMwYzc2YWInLFxuXHQgICAgICAgICdEdW5rZWQnOiAnIzJhMzIzYScsXG5cdCAgICAgICAgJ2VCYXknOiAnIzg5YzUwNycsXG5cdCAgICAgICAgJ0VtYmVyJzogJyNmMDVlMWInLFxuXHQgICAgICAgICdFbmdhZGdldCc6ICcjMDBiZGY2Jyxcblx0ICAgICAgICAnRW52YXRvJzogJyM1MjgwMzYnLFxuXHQgICAgICAgICdFdHN5JzogJyNlYjZkMjAnLFxuXHQgICAgICAgICdFdmVybm90ZSc6ICcjNWJhNTI1Jyxcblx0ICAgICAgICAnRmFiLmNvbSc6ICcjZGQwMDE3Jyxcblx0ICAgICAgICAnRmFjZWJvb2snOiAnIzNiNTk5OCcsXG5cdCAgICAgICAgJ0ZpcmVmb3gnOiAnI2U2NjAwMCcsXG5cdCAgICAgICAgJ0ZsaWNrciAoYmx1ZSknOiAnIzAwNjNkYycsXG5cdCAgICAgICAgJ0ZsaWNrciAocGluayknOiAnI2ZmMDA4NCcsXG5cdCAgICAgICAgJ0ZvcnJzdCc6ICcjNWI5YTY4Jyxcblx0ICAgICAgICAnRm91cnNxdWFyZSc6ICcjMjVhMGNhJyxcblx0ICAgICAgICAnR2FybWluJzogJyMwMDdjYzMnLFxuXHQgICAgICAgICdHZXRHbHVlJzogJyMyZDc1YTInLFxuXHQgICAgICAgICdHaW1tZWJhcic6ICcjZjcwMDc4Jyxcblx0ICAgICAgICAnR2l0SHViJzogJyMxNzE1MTUnLFxuXHQgICAgICAgICdHb29nbGUgQmx1ZSc6ICcjMDE0MGNhJyxcblx0ICAgICAgICAnR29vZ2xlIEdyZWVuJzogJyMxNmE2MWUnLFxuXHQgICAgICAgICdHb29nbGUgUmVkJzogJyNkZDE4MTInLFxuXHQgICAgICAgICdHb29nbGUgWWVsbG93JzogJyNmY2NhMDMnLFxuXHQgICAgICAgICdHb29nbGUrJzogJyNkZDRiMzknLFxuXHQgICAgICAgICdHcm9vdmVzaGFyayc6ICcjZjc3ZjAwJyxcblx0ICAgICAgICAnR3JvdXBvbic6ICcjODJiNTQ4Jyxcblx0ICAgICAgICAnSGFja2VyIE5ld3MnOiAnI2ZmNjYwMCcsXG5cdCAgICAgICAgJ0hlbGxvV2FsbGV0JzogJyMwMDg1Y2EnLFxuXHQgICAgICAgICdIZXJva3UgKGxpZ2h0KSc6ICcjYzdjNWU2Jyxcblx0ICAgICAgICAnSGVyb2t1IChkYXJrKSc6ICcjNjU2N2E1Jyxcblx0ICAgICAgICAnSG9vdFN1aXRlJzogJyMwMDMzNjYnLFxuXHQgICAgICAgICdIb3V6eic6ICcjNzNiYTM3Jyxcblx0ICAgICAgICAnSFRNTDUnOiAnI2VjNjIzMScsXG5cdCAgICAgICAgJ0lLRUEnOiAnI2ZmY2MzMycsXG5cdCAgICAgICAgJ0lNRGInOiAnI2YzY2UxMycsXG5cdCAgICAgICAgJ0luc3RhZ3JhbSc6ICcjM2Y3MjliJyxcblx0ICAgICAgICAnSW50ZWwnOiAnIzAwNzFjNScsXG5cdCAgICAgICAgJ0ludHVpdCc6ICcjMzY1ZWJmJyxcblx0ICAgICAgICAnS2lja3N0YXJ0ZXInOiAnIzc2Y2MxZScsXG5cdCAgICAgICAgJ2tpcHB0JzogJyNlMDM1MDAnLFxuXHQgICAgICAgICdLb2RlcnknOiAnIzAwYWY4MScsXG5cdCAgICAgICAgJ0xhc3RGTSc6ICcjYzMwMDBkJyxcblx0ICAgICAgICAnTGlua2VkSW4nOiAnIzBlNzZhOCcsXG5cdCAgICAgICAgJ0xpdmVzdHJlYW0nOiAnI2NmMDAwNScsXG5cdCAgICAgICAgJ0x1bW8nOiAnIzU3NjM5NicsXG5cdCAgICAgICAgJ01peHBhbmVsJzogJyNhMDg2ZDMnLFxuXHQgICAgICAgICdNZWV0dXAnOiAnI2U1MTkzNycsXG5cdCAgICAgICAgJ05va2lhJzogJyMxODM2OTMnLFxuXHQgICAgICAgICdOVklESUEnOiAnIzc2YjkwMCcsXG5cdCAgICAgICAgJ09wZXJhJzogJyNjYzBmMTYnLFxuXHQgICAgICAgICdQYXRoJzogJyNlNDFmMTEnLFxuXHQgICAgICAgICdQYXlQYWwgKGRhcmspJzogJyMxZTQ3N2EnLFxuXHQgICAgICAgICdQYXlQYWwgKGxpZ2h0KSc6ICcjM2I3YmJmJyxcblx0ICAgICAgICAnUGluYm9hcmQnOiAnIzAwMDBlNicsXG5cdCAgICAgICAgJ1BpbnRlcmVzdCc6ICcjYzgyMzJjJyxcblx0ICAgICAgICAnUGxheVN0YXRpb24nOiAnIzY2NWNiZScsXG5cdCAgICAgICAgJ1BvY2tldCc6ICcjZWU0MDU2Jyxcblx0ICAgICAgICAnUHJlemknOiAnIzMxOGJmZicsXG5cdCAgICAgICAgJ1B1c2hhJzogJyMwZjcxYjQnLFxuXHQgICAgICAgICdRdW9yYSc6ICcjYTgyNDAwJyxcblx0ICAgICAgICAnUVVPVEUuZm0nOiAnIzY2Y2VmZicsXG5cdCAgICAgICAgJ1JkaW8nOiAnIzAwOGZkNScsXG5cdCAgICAgICAgJ1JlYWRhYmlsaXR5JzogJyM5YzAwMDAnLFxuXHQgICAgICAgICdSZWQgSGF0JzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdSZXNvdXJjZSc6ICcjN2ViNDAwJyxcblx0ICAgICAgICAnUm9ja3BhY2snOiAnIzBiYTZhYicsXG5cdCAgICAgICAgJ1Jvb24nOiAnIzYyYjBkOScsXG5cdCAgICAgICAgJ1JTUyc6ICcjZWU4MDJmJyxcblx0ICAgICAgICAnU2FsZXNmb3JjZSc6ICcjMTc5OGMxJyxcblx0ICAgICAgICAnU2Ftc3VuZyc6ICcjMGM0ZGEyJyxcblx0ICAgICAgICAnU2hvcGlmeSc6ICcjOTZiZjQ4Jyxcblx0ICAgICAgICAnU2t5cGUnOiAnIzAwYWZmMCcsXG5cdCAgICAgICAgJ1NuYWdham9iJzogJyNmNDdhMjAnLFxuXHQgICAgICAgICdTb2Z0b25pYyc6ICcjMDA4YWNlJyxcblx0ICAgICAgICAnU291bmRDbG91ZCc6ICcjZmY3NzAwJyxcblx0ICAgICAgICAnU3BhY2UgQm94JzogJyNmODY5NjAnLFxuXHQgICAgICAgICdTcG90aWZ5JzogJyM4MWI3MWEnLFxuXHQgICAgICAgICdTcHJpbnQnOiAnI2ZlZTEwMCcsXG5cdCAgICAgICAgJ1NxdWFyZXNwYWNlJzogJyMxMjEyMTInLFxuXHQgICAgICAgICdTdGFja092ZXJmbG93JzogJyNlZjgyMzYnLFxuXHQgICAgICAgICdTdGFwbGVzJzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdTdGF0dXMgQ2hhcnQnOiAnI2Q3NTg0ZicsXG5cdCAgICAgICAgJ1N0cmlwZSc6ICcjMDA4Y2RkJyxcblx0ICAgICAgICAnU3R1ZHlCbHVlJzogJyMwMGFmZTEnLFxuXHQgICAgICAgICdTdHVtYmxlVXBvbic6ICcjZjc0NDI1Jyxcblx0ICAgICAgICAnVC1Nb2JpbGUnOiAnI2VhMGE4ZScsXG5cdCAgICAgICAgJ1RlY2hub3JhdGknOiAnIzQwYTgwMCcsXG5cdCAgICAgICAgJ1RoZSBOZXh0IFdlYic6ICcjZWY0NDIzJyxcblx0ICAgICAgICAnVHJlZWhvdXNlJzogJyM1Y2I4NjgnLFxuXHQgICAgICAgICdUcnVsaWEnOiAnIzVlYWIxZicsXG5cdCAgICAgICAgJ1R1bWJscic6ICcjMzQ1MjZmJyxcblx0ICAgICAgICAnVHdpdGNoLnR2JzogJyM2NDQxYTUnLFxuXHQgICAgICAgICdUd2l0dGVyJzogJyMwMGFjZWUnLFxuXHQgICAgICAgICdUWVBPMyc6ICcjZmY4NzAwJyxcblx0ICAgICAgICAnVWJ1bnR1JzogJyNkZDQ4MTQnLFxuXHQgICAgICAgICdVc3RyZWFtJzogJyMzMzg4ZmYnLFxuXHQgICAgICAgICdWZXJpem9uJzogJyNlZjFkMWQnLFxuXHQgICAgICAgICdWaW1lbyc6ICcjODZjOWVmJyxcblx0ICAgICAgICAnVmluZSc6ICcjMDBhNDc4Jyxcblx0ICAgICAgICAnVmlyYic6ICcjMDZhZmQ4Jyxcblx0ICAgICAgICAnVmlyZ2luIE1lZGlhJzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdXb29nYSc6ICcjNWIwMDljJyxcblx0ICAgICAgICAnV29yZFByZXNzIChibHVlKSc6ICcjMjE3NTliJyxcblx0ICAgICAgICAnV29yZFByZXNzIChvcmFuZ2UpJzogJyNkNTRlMjEnLFxuXHQgICAgICAgICdXb3JkUHJlc3MgKGdyZXkpJzogJyM0NjQ2NDYnLFxuXHQgICAgICAgICdXdW5kZXJsaXN0JzogJyMyYjg4ZDknLFxuXHQgICAgICAgICdYQk9YJzogJyM5YmM4NDgnLFxuXHQgICAgICAgICdYSU5HJzogJyMxMjY1NjcnLFxuXHQgICAgICAgICdZYWhvbyEnOiAnIzcyMGU5ZScsXG5cdCAgICAgICAgJ1lhbmRleCc6ICcjZmZjYzAwJyxcblx0ICAgICAgICAnWWVscCc6ICcjYzQxMjAwJyxcblx0ICAgICAgICAnWW91VHViZSc6ICcjYzQzMDJiJyxcblx0ICAgICAgICAnWmFsb25nbyc6ICcjNTQ5OGRjJyxcblx0ICAgICAgICAnWmVuZGVzayc6ICcjNzhhMzAwJyxcblx0ICAgICAgICAnWmVycGx5JzogJyM5ZGNjN2EnLFxuXHQgICAgICAgICdab290b29sJzogJyM1ZThiMWQnXG5cdCAgICB9LFxuXHQgICAgX2JyYW5kTmFtZXM6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBicmFuZHMgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBiIGluIHRoaXMuX2JyYW5kQ29sb3JzKSB7XG5cdCAgICAgICAgICAgIGJyYW5kcy5wdXNoKGIpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBicmFuZHNcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIOeUn+aIkOS4gOautemaj+acuueahCBCYXNlNjQg5Zu+54mH57yW56CB44CCXG5cblx0ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vaW1za3kvaG9sZGVyXG5cdCAgICAgICAgSG9sZGVyIHJlbmRlcnMgaW1hZ2UgcGxhY2Vob2xkZXJzIGVudGlyZWx5IG9uIHRoZSBjbGllbnQgc2lkZS5cblxuXHQgICAgICAgIGRhdGFJbWFnZUhvbGRlcjogZnVuY3Rpb24oc2l6ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ2hvbGRlci5qcy8nICsgc2l6ZVxuXHQgICAgICAgIH0sXG5cdCAgICAqL1xuXHQgICAgZGF0YUltYWdlOiBmdW5jdGlvbihzaXplLCB0ZXh0KSB7XG5cdCAgICAgICAgdmFyIGNhbnZhc1xuXHQgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLypcblx0ICAgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9BdXRvbWF0dGljL25vZGUtY2FudmFzXG5cdCAgICAgICAgICAgICAgICAgICAgbnBtIGluc3RhbGwgY2FudmFzIC0tc2F2ZVxuXHQgICAgICAgICAgICAgICAg5a6J6KOF6Zeu6aKY77yaXG5cdCAgICAgICAgICAgICAgICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI5NTMyMDYvZ3VscC1pc3N1ZXMtd2l0aC1jYXJpby1pbnN0YWxsLWNvbW1hbmQtbm90LWZvdW5kLXdoZW4tdHJ5aW5nLXRvLWluc3RhbGxpbmctY2FudmFcblx0ICAgICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvbm9kZS1jYW52YXMvaXNzdWVzLzQxNVxuXHQgICAgICAgICAgICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vQXV0b21hdHRpYy9ub2RlLWNhbnZhcy93aWtpL19wYWdlc1xuXG5cdCAgICAgICAgICAgICAgICBQU++8mm5vZGUtY2FudmFzIOeahOWuieijhei/h+eoi+WunuWcqOaYr+Wkque5geeQkOS6hu+8jOaJgOS7peS4jeaUvuWFpSBwYWNrYWdlLmpzb24g55qEIGRlcGVuZGVuY2llc+OAglxuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgdmFyIENhbnZhcyA9IG1vZHVsZS5yZXF1aXJlKCdjYW52YXMnKVxuXHQgICAgICAgICAgICBjYW52YXMgPSBuZXcgQ2FudmFzKClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgY3R4ID0gY2FudmFzICYmIGNhbnZhcy5nZXRDb250ZXh0ICYmIGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcblx0ICAgICAgICBpZiAoIWNhbnZhcyB8fCAhY3R4KSByZXR1cm4gJydcblxuXHQgICAgICAgIGlmICghc2l6ZSkgc2l6ZSA9IHRoaXMucGljayh0aGlzLl9hZFNpemUpXG5cdCAgICAgICAgdGV4dCA9IHRleHQgIT09IHVuZGVmaW5lZCA/IHRleHQgOiBzaXplXG5cblx0ICAgICAgICBzaXplID0gc2l6ZS5zcGxpdCgneCcpXG5cblx0ICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludChzaXplWzBdLCAxMCksXG5cdCAgICAgICAgICAgIGhlaWdodCA9IHBhcnNlSW50KHNpemVbMV0sIDEwKSxcblx0ICAgICAgICAgICAgYmFja2dyb3VuZCA9IHRoaXMuX2JyYW5kQ29sb3JzW3RoaXMucGljayh0aGlzLl9icmFuZE5hbWVzKCkpXSxcblx0ICAgICAgICAgICAgZm9yZWdyb3VuZCA9ICcjRkZGJyxcblx0ICAgICAgICAgICAgdGV4dF9oZWlnaHQgPSAxNCxcblx0ICAgICAgICAgICAgZm9udCA9ICdzYW5zLXNlcmlmJztcblxuXHQgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoXG5cdCAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodFxuXHQgICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJ1xuXHQgICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJ1xuXHQgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kXG5cdCAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpXG5cdCAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZvcmVncm91bmRcblx0ICAgICAgICBjdHguZm9udCA9ICdib2xkICcgKyB0ZXh0X2hlaWdodCArICdweCAnICsgZm9udFxuXHQgICAgICAgIGN0eC5maWxsVGV4dCh0ZXh0LCAod2lkdGggLyAyKSwgKGhlaWdodCAvIDIpLCB3aWR0aClcblx0ICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJylcblx0ICAgIH1cblx0fVxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg5KShtb2R1bGUpKSlcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRcdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtb2R1bGU7XHJcblx0fVxyXG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qXG5cdCAgICAjIyBDb2xvclxuXG5cdCAgICBodHRwOi8vbGxsbGxsLmxpL3JhbmRvbUNvbG9yL1xuXHQgICAgICAgIEEgY29sb3IgZ2VuZXJhdG9yIGZvciBKYXZhU2NyaXB0LlxuXHQgICAgICAgIHJhbmRvbUNvbG9yIGdlbmVyYXRlcyBhdHRyYWN0aXZlIGNvbG9ycyBieSBkZWZhdWx0LiBNb3JlIHNwZWNpZmljYWxseSwgcmFuZG9tQ29sb3IgcHJvZHVjZXMgYnJpZ2h0IGNvbG9ycyB3aXRoIGEgcmVhc29uYWJseSBoaWdoIHNhdHVyYXRpb24uIFRoaXMgbWFrZXMgcmFuZG9tQ29sb3IgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgZGF0YSB2aXN1YWxpemF0aW9ucyBhbmQgZ2VuZXJhdGl2ZSBhcnQuXG5cblx0ICAgIGh0dHA6Ly9yYW5kb21jb2xvdXIuY29tL1xuXHQgICAgICAgIHZhciBiZ19jb2xvdXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNSkudG9TdHJpbmcoMTYpO1xuXHQgICAgICAgIGJnX2NvbG91ciA9IFwiI1wiICsgKFwiMDAwMDAwXCIgKyBiZ19jb2xvdXIpLnNsaWNlKC02KTtcblx0ICAgICAgICBkb2N1bWVudC5iZ0NvbG9yID0gYmdfY29sb3VyO1xuXHQgICAgXG5cdCAgICBodHRwOi8vbWFydGluLmFua2VybC5jb20vMjAwOS8xMi8wOS9ob3ctdG8tY3JlYXRlLXJhbmRvbS1jb2xvcnMtcHJvZ3JhbW1hdGljYWxseS9cblx0ICAgICAgICBDcmVhdGluZyByYW5kb20gY29sb3JzIGlzIGFjdHVhbGx5IG1vcmUgZGlmZmljdWx0IHRoYW4gaXQgc2VlbXMuIFRoZSByYW5kb21uZXNzIGl0c2VsZiBpcyBlYXN5LCBidXQgYWVzdGhldGljYWxseSBwbGVhc2luZyByYW5kb21uZXNzIGlzIG1vcmUgZGlmZmljdWx0LlxuXHQgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZvbmdvdmV0dC9jb2xvci1nZW5lcmF0b3JcblxuXHQgICAgaHR0cDovL3d3dy5wYXVsaXJpc2guY29tLzIwMDkvcmFuZG9tLWhleC1jb2xvci1jb2RlLXNuaXBwZXRzL1xuXHQgICAgICAgIFJhbmRvbSBIZXggQ29sb3IgQ29kZSBHZW5lcmF0b3IgaW4gSmF2YVNjcmlwdFxuXG5cdCAgICBodHRwOi8vY2hhbmNlanMuY29tLyNjb2xvclxuXHQgICAgICAgIGNoYW5jZS5jb2xvcigpXG5cdCAgICAgICAgLy8gPT4gJyM3OWMxNTcnXG5cdCAgICAgICAgY2hhbmNlLmNvbG9yKHtmb3JtYXQ6ICdoZXgnfSlcblx0ICAgICAgICAvLyA9PiAnI2Q2NzExOCdcblx0ICAgICAgICBjaGFuY2UuY29sb3Ioe2Zvcm1hdDogJ3Nob3J0aGV4J30pXG5cdCAgICAgICAgLy8gPT4gJyM2MGYnXG5cdCAgICAgICAgY2hhbmNlLmNvbG9yKHtmb3JtYXQ6ICdyZ2InfSlcblx0ICAgICAgICAvLyA9PiAncmdiKDExMCw1MiwxNjQpJ1xuXG5cdCAgICBodHRwOi8vdG9vbC5jN3NreS5jb20vd2ViY29sb3Jcblx0ICAgICAgICDnvZHpobXorr7orqHluLjnlKjoibLlvanmkK3phY3ooahcblx0ICAgIFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL09uZS1jb20vb25lLWNvbG9yXG5cdCAgICAgICAgQW4gT08tYmFzZWQgSmF2YVNjcmlwdCBjb2xvciBwYXJzZXIvY29tcHV0YXRpb24gdG9vbGtpdCB3aXRoIHN1cHBvcnQgZm9yIFJHQiwgSFNWLCBIU0wsIENNWUssIGFuZCBhbHBoYSBjaGFubmVscy5cblx0ICAgICAgICBBUEkg5b6I6LWeXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJ0aHVyL2NvbG9yXG5cdCAgICAgICAgSmF2YVNjcmlwdCBjb2xvciBjb252ZXJzaW9uIGFuZCBtYW5pcHVsYXRpb24gbGlicmFyeVxuXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vbGVhdmVyb3UvY3NzLWNvbG9yc1xuXHQgICAgICAgIFNoYXJlICYgY29udmVydCBDU1MgY29sb3JzXG5cdCAgICBodHRwOi8vbGVhdmVyb3UuZ2l0aHViLmlvL2Nzcy1jb2xvcnMvI3NsYXRlZ3JheVxuXHQgICAgICAgIFR5cGUgYSBDU1MgY29sb3Iga2V5d29yZCwgI2hleCwgaHNsKCksIHJnYmEoKSwgd2hhdGV2ZXI6XG5cblx0ICAgIOiJsuiwgyBodWVcblx0ICAgICAgICBodHRwOi8vYmFpa2UuYmFpZHUuY29tL3ZpZXcvMjMzNjguaHRtXG5cdCAgICAgICAg6Imy6LCD5oyH55qE5piv5LiA5bmF55S75Lit55S76Z2i6Imy5b2p55qE5oC75L2T5YC+5ZCR77yM5piv5aSn55qE6Imy5b2p5pWI5p6c44CCXG5cdCAgICDppbHlkozluqYgc2F0dXJhdGlvblxuXHQgICAgICAgIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8xODk2NDQuaHRtXG5cdCAgICAgICAg6aWx5ZKM5bqm5piv5oyH6Imy5b2p55qE6bKc6Imz56iL5bqm77yM5Lmf56ew6Imy5b2p55qE57qv5bqm44CC6aWx5ZKM5bqm5Y+W5Yaz5LqO6K+l6Imy5Lit5ZCr6Imy5oiQ5YiG5ZKM5raI6Imy5oiQ5YiG77yI54Gw6Imy77yJ55qE5q+U5L6L44CC5ZCr6Imy5oiQ5YiG6LaK5aSn77yM6aWx5ZKM5bqm6LaK5aSn77yb5raI6Imy5oiQ5YiG6LaK5aSn77yM6aWx5ZKM5bqm6LaK5bCP44CCXG5cdCAgICDkuq7luqYgYnJpZ2h0bmVzc1xuXHQgICAgICAgIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8zNDc3My5odG1cblx0ICAgICAgICDkuq7luqbmmK/mjIflj5HlhYnkvZPvvIjlj43lhYnkvZPvvInooajpnaLlj5HlhYnvvIjlj43lhYnvvInlvLrlvLHnmoTniannkIbph4/jgIJcblx0ICAgIOeFp+W6piBsdW1pbm9zaXR5XG5cdCAgICAgICAg54mp5L2T6KKr54Wn5Lqu55qE56iL5bqmLOmHh+eUqOWNleS9jemdouenr+aJgOaOpeWPl+eahOWFiemAmumHj+adpeihqOekuizooajnpLrljZXkvY3kuLrli5Jb5YWL5pavXShMdXgsbHgpICzljbMgMW0gLyBtMiDjgIJcblxuXHQgICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDg0NTA2L3JhbmRvbS1jb2xvci1nZW5lcmF0b3ItaW4tamF2YXNjcmlwdFxuXHQgICAgICAgIHZhciBsZXR0ZXJzID0gJzAxMjM0NTY3ODlBQkNERUYnLnNwbGl0KCcnKVxuXHQgICAgICAgIHZhciBjb2xvciA9ICcjJ1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvbG9yICs9IGxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpXVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gY29sb3Jcblx0ICAgIFxuXHQgICAgICAgIC8vIOmaj+acuueUn+aIkOS4gOS4quaXoOiEkeeahOminOiJsu+8jOagvOW8j+S4uiAnI1JSR0dCQifjgIJcblx0ICAgICAgICAvLyBfYnJhaW5sZXNzQ29sb3IoKVxuXHQgICAgICAgIHZhciBjb2xvciA9IE1hdGguZmxvb3IoXG5cdCAgICAgICAgICAgIE1hdGgucmFuZG9tKCkgKlxuXHQgICAgICAgICAgICAoMTYgKiAxNiAqIDE2ICogMTYgKiAxNiAqIDE2IC0gMSlcblx0ICAgICAgICApLnRvU3RyaW5nKDE2KVxuXHQgICAgICAgIGNvbG9yID0gXCIjXCIgKyAoXCIwMDAwMDBcIiArIGNvbG9yKS5zbGljZSgtNilcblx0ICAgICAgICByZXR1cm4gY29sb3IudG9VcHBlckNhc2UoKVxuXHQqL1xuXG5cdHZhciBDb252ZXJ0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0dmFyIERJQ1QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVxuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5pyJ5ZC45byV5Yqb55qE6aKc6Imy77yM5qC85byP5Li6ICcjUlJHR0JCJ+OAglxuXHQgICAgY29sb3I6IGZ1bmN0aW9uKG5hbWUpIHtcblx0ICAgICAgICBpZiAobmFtZSB8fCBESUNUW25hbWVdKSByZXR1cm4gRElDVFtuYW1lXS5uaWNlclxuXHQgICAgICAgIHJldHVybiB0aGlzLmhleCgpXG5cdCAgICB9LFxuXHQgICAgLy8gI0RBQzBERVxuXHQgICAgaGV4OiBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgaHN2ID0gdGhpcy5fZ29sZGVuUmF0aW9Db2xvcigpXG5cdCAgICAgICAgdmFyIHJnYiA9IENvbnZlcnQuaHN2MnJnYihoc3YpXG5cdCAgICAgICAgdmFyIGhleCA9IENvbnZlcnQucmdiMmhleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKVxuXHQgICAgICAgIHJldHVybiBoZXhcblx0ICAgIH0sXG5cdCAgICAvLyByZ2IoMTI4LDI1NSwyNTUpXG5cdCAgICByZ2I6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBoc3YgPSB0aGlzLl9nb2xkZW5SYXRpb0NvbG9yKClcblx0ICAgICAgICB2YXIgcmdiID0gQ29udmVydC5oc3YycmdiKGhzdilcblx0ICAgICAgICByZXR1cm4gJ3JnYignICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzBdLCAxMCkgKyAnLCAnICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzFdLCAxMCkgKyAnLCAnICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzJdLCAxMCkgKyAnKSdcblx0ICAgIH0sXG5cdCAgICAvLyByZ2JhKDEyOCwyNTUsMjU1LDAuMylcblx0ICAgIHJnYmE6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBoc3YgPSB0aGlzLl9nb2xkZW5SYXRpb0NvbG9yKClcblx0ICAgICAgICB2YXIgcmdiID0gQ29udmVydC5oc3YycmdiKGhzdilcblx0ICAgICAgICByZXR1cm4gJ3JnYmEoJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlswXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlsxXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlsyXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcpJ1xuXHQgICAgfSxcblx0ICAgIC8vIGhzbCgzMDAsODAlLDkwJSlcblx0ICAgIGhzbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIGhzdiA9IHRoaXMuX2dvbGRlblJhdGlvQ29sb3IoKVxuXHQgICAgICAgIHZhciBoc2wgPSBDb252ZXJ0LmhzdjJoc2woaHN2KVxuXHQgICAgICAgIHJldHVybiAnaHNsKCcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMF0sIDEwKSArICcsICcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMV0sIDEwKSArICcsICcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMl0sIDEwKSArICcpJ1xuXHQgICAgfSxcblx0ICAgIC8vIGh0dHA6Ly9tYXJ0aW4uYW5rZXJsLmNvbS8yMDA5LzEyLzA5L2hvdy10by1jcmVhdGUtcmFuZG9tLWNvbG9ycy1wcm9ncmFtbWF0aWNhbGx5L1xuXHQgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rldm9uZ292ZXR0L2NvbG9yLWdlbmVyYXRvci9ibG9iL21hc3Rlci9pbmRleC5qc1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5pyJ5ZC45byV5Yqb55qE6aKc6Imy44CCXG5cdCAgICBfZ29sZGVuUmF0aW9Db2xvcjogZnVuY3Rpb24oc2F0dXJhdGlvbiwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9nb2xkZW5SYXRpbyA9IDAuNjE4MDMzOTg4NzQ5ODk1XG5cdCAgICAgICAgdGhpcy5faHVlID0gdGhpcy5faHVlIHx8IE1hdGgucmFuZG9tKClcblx0ICAgICAgICB0aGlzLl9odWUgKz0gdGhpcy5fZ29sZGVuUmF0aW9cblx0ICAgICAgICB0aGlzLl9odWUgJT0gMVxuXG5cdCAgICAgICAgaWYgKHR5cGVvZiBzYXR1cmF0aW9uICE9PSBcIm51bWJlclwiKSBzYXR1cmF0aW9uID0gMC41O1xuXHQgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHZhbHVlID0gMC45NTtcblxuXHQgICAgICAgIHJldHVybiBbXG5cdCAgICAgICAgICAgIHRoaXMuX2h1ZSAqIDM2MCxcblx0ICAgICAgICAgICAgc2F0dXJhdGlvbiAqIDEwMCxcblx0ICAgICAgICAgICAgdmFsdWUgKiAxMDBcblx0ICAgICAgICBdXG5cdCAgICB9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBDb2xvciBDb252ZXJ0XG5cblx0ICAgIGh0dHA6Ly9ibG9nLmNzZG4ubmV0L2lkZmF5YS9hcnRpY2xlL2RldGFpbHMvNjc3MDQxNFxuXHQgICAgICAgIOminOiJsuepuumXtFJHQuS4jkhTVihIU0wp55qE6L2s5o2iXG5cdCovXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJ0aHVyL2NvbG9yLWNvbnZlcnQvYmxvYi9tYXN0ZXIvY29udmVyc2lvbnMuanNcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdFx0cmdiMmhzbDogZnVuY3Rpb24gcmdiMmhzbChyZ2IpIHtcblx0XHRcdHZhciByID0gcmdiWzBdIC8gMjU1LFxuXHRcdFx0XHRnID0gcmdiWzFdIC8gMjU1LFxuXHRcdFx0XHRiID0gcmdiWzJdIC8gMjU1LFxuXHRcdFx0XHRtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcblx0XHRcdFx0bWF4ID0gTWF0aC5tYXgociwgZywgYiksXG5cdFx0XHRcdGRlbHRhID0gbWF4IC0gbWluLFxuXHRcdFx0XHRoLCBzLCBsO1xuXG5cdFx0XHRpZiAobWF4ID09IG1pbilcblx0XHRcdFx0aCA9IDA7XG5cdFx0XHRlbHNlIGlmIChyID09IG1heClcblx0XHRcdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0XHRcdGVsc2UgaWYgKGcgPT0gbWF4KVxuXHRcdFx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0XHRcdGVsc2UgaWYgKGIgPT0gbWF4KVxuXHRcdFx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblxuXHRcdFx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRcdFx0aWYgKGggPCAwKVxuXHRcdFx0XHRoICs9IDM2MDtcblxuXHRcdFx0bCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRcdFx0aWYgKG1heCA9PSBtaW4pXG5cdFx0XHRcdHMgPSAwO1xuXHRcdFx0ZWxzZSBpZiAobCA8PSAwLjUpXG5cdFx0XHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cblx0XHRcdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG5cdFx0fSxcblx0XHRyZ2IyaHN2OiBmdW5jdGlvbiByZ2IyaHN2KHJnYikge1xuXHRcdFx0dmFyIHIgPSByZ2JbMF0sXG5cdFx0XHRcdGcgPSByZ2JbMV0sXG5cdFx0XHRcdGIgPSByZ2JbMl0sXG5cdFx0XHRcdG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuXHRcdFx0XHRtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcblx0XHRcdFx0ZGVsdGEgPSBtYXggLSBtaW4sXG5cdFx0XHRcdGgsIHMsIHY7XG5cblx0XHRcdGlmIChtYXggPT09IDApXG5cdFx0XHRcdHMgPSAwO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzID0gKGRlbHRhIC8gbWF4ICogMTAwMCkgLyAxMDtcblxuXHRcdFx0aWYgKG1heCA9PSBtaW4pXG5cdFx0XHRcdGggPSAwO1xuXHRcdFx0ZWxzZSBpZiAociA9PSBtYXgpXG5cdFx0XHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdFx0XHRlbHNlIGlmIChnID09IG1heClcblx0XHRcdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdFx0XHRlbHNlIGlmIChiID09IG1heClcblx0XHRcdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cblx0XHRcdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0XHRcdGlmIChoIDwgMClcblx0XHRcdFx0aCArPSAzNjA7XG5cblx0XHRcdHYgPSAoKG1heCAvIDI1NSkgKiAxMDAwKSAvIDEwO1xuXG5cdFx0XHRyZXR1cm4gW2gsIHMsIHZdO1xuXHRcdH0sXG5cdFx0aHNsMnJnYjogZnVuY3Rpb24gaHNsMnJnYihoc2wpIHtcblx0XHRcdHZhciBoID0gaHNsWzBdIC8gMzYwLFxuXHRcdFx0XHRzID0gaHNsWzFdIC8gMTAwLFxuXHRcdFx0XHRsID0gaHNsWzJdIC8gMTAwLFxuXHRcdFx0XHR0MSwgdDIsIHQzLCByZ2IsIHZhbDtcblxuXHRcdFx0aWYgKHMgPT09IDApIHtcblx0XHRcdFx0dmFsID0gbCAqIDI1NTtcblx0XHRcdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGwgPCAwLjUpXG5cdFx0XHRcdHQyID0gbCAqICgxICsgcyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHQyID0gbCArIHMgLSBsICogcztcblx0XHRcdHQxID0gMiAqIGwgLSB0MjtcblxuXHRcdFx0cmdiID0gWzAsIDAsIDBdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRcdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRcdFx0aWYgKHQzIDwgMCkgdDMrKztcblx0XHRcdFx0aWYgKHQzID4gMSkgdDMtLTtcblxuXHRcdFx0XHRpZiAoNiAqIHQzIDwgMSlcblx0XHRcdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHRcdFx0ZWxzZSBpZiAoMiAqIHQzIDwgMSlcblx0XHRcdFx0XHR2YWwgPSB0Mjtcblx0XHRcdFx0ZWxzZSBpZiAoMyAqIHQzIDwgMilcblx0XHRcdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWwgPSB0MTtcblxuXHRcdFx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZ2I7XG5cdFx0fSxcblx0XHRoc2wyaHN2OiBmdW5jdGlvbiBoc2wyaHN2KGhzbCkge1xuXHRcdFx0dmFyIGggPSBoc2xbMF0sXG5cdFx0XHRcdHMgPSBoc2xbMV0gLyAxMDAsXG5cdFx0XHRcdGwgPSBoc2xbMl0gLyAxMDAsXG5cdFx0XHRcdHN2LCB2O1xuXHRcdFx0bCAqPSAyO1xuXHRcdFx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0XHRcdHYgPSAobCArIHMpIC8gMjtcblx0XHRcdHN2ID0gKDIgKiBzKSAvIChsICsgcyk7XG5cdFx0XHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcblx0XHR9LFxuXHRcdGhzdjJyZ2I6IGZ1bmN0aW9uIGhzdjJyZ2IoaHN2KSB7XG5cdFx0XHR2YXIgaCA9IGhzdlswXSAvIDYwXG5cdFx0XHR2YXIgcyA9IGhzdlsxXSAvIDEwMFxuXHRcdFx0dmFyIHYgPSBoc3ZbMl0gLyAxMDBcblx0XHRcdHZhciBoaSA9IE1hdGguZmxvb3IoaCkgJSA2XG5cblx0XHRcdHZhciBmID0gaCAtIE1hdGguZmxvb3IoaClcblx0XHRcdHZhciBwID0gMjU1ICogdiAqICgxIC0gcylcblx0XHRcdHZhciBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSlcblx0XHRcdHZhciB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSlcblxuXHRcdFx0diA9IDI1NSAqIHZcblxuXHRcdFx0c3dpdGNoIChoaSkge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0cmV0dXJuIFt2LCB0LCBwXVxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0cmV0dXJuIFtxLCB2LCBwXVxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0cmV0dXJuIFtwLCB2LCB0XVxuXHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0cmV0dXJuIFtwLCBxLCB2XVxuXHRcdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdFx0cmV0dXJuIFt0LCBwLCB2XVxuXHRcdFx0XHRjYXNlIDU6XG5cdFx0XHRcdFx0cmV0dXJuIFt2LCBwLCBxXVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aHN2MmhzbDogZnVuY3Rpb24gaHN2MmhzbChoc3YpIHtcblx0XHRcdHZhciBoID0gaHN2WzBdLFxuXHRcdFx0XHRzID0gaHN2WzFdIC8gMTAwLFxuXHRcdFx0XHR2ID0gaHN2WzJdIC8gMTAwLFxuXHRcdFx0XHRzbCwgbDtcblxuXHRcdFx0bCA9ICgyIC0gcykgKiB2O1xuXHRcdFx0c2wgPSBzICogdjtcblx0XHRcdHNsIC89IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRcdFx0bCAvPSAyO1xuXHRcdFx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG5cdFx0fSxcblx0XHQvLyBodHRwOi8vd3d3LjE0MGJ5dC5lcy9rZXl3b3Jkcy9jb2xvclxuXHRcdHJnYjJoZXg6IGZ1bmN0aW9uKFxuXHRcdFx0YSwgLy8gcmVkLCBhcyBhIG51bWJlciBmcm9tIDAgdG8gMjU1XG5cdFx0XHRiLCAvLyBncmVlbiwgYXMgYSBudW1iZXIgZnJvbSAwIHRvIDI1NVxuXHRcdFx0YyAvLyBibHVlLCBhcyBhIG51bWJlciBmcm9tIDAgdG8gMjU1XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gXCIjXCIgKyAoKDI1NiArIGEgPDwgOCB8IGIpIDw8IDggfCBjKS50b1N0cmluZygxNikuc2xpY2UoMSlcblx0XHR9LFxuXHRcdGhleDJyZ2I6IGZ1bmN0aW9uKFxuXHRcdFx0YSAvLyB0YWtlIGEgXCIjeHh4eHh4XCIgaGV4IHN0cmluZyxcblx0XHQpIHtcblx0XHRcdGEgPSAnMHgnICsgYS5zbGljZSgxKS5yZXBsYWNlKGEubGVuZ3RoID4gNCA/IGEgOiAvLi9nLCAnJCYkJicpIHwgMDtcblx0XHRcdHJldHVybiBbYSA+PiAxNiwgYSA+PiA4ICYgMjU1LCBhICYgMjU1XVxuXHRcdH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIENvbG9yIOWtl+WFuOaVsOaNrlxuXG5cdCAgICDlrZflhbjmlbDmja7mnaXmupAgW0EgbmljZXIgY29sb3IgcGFsZXR0ZSBmb3IgdGhlIHdlYl0oaHR0cDovL2NscnMuY2MvKVxuXHQqL1xuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIG5hbWUgdmFsdWUgbmljZXJcblx0ICAgIG5hdnk6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDAwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzAwMUYzRidcblx0ICAgIH0sXG5cdCAgICBibHVlOiB7XG5cdCAgICAgICAgdmFsdWU6ICcjMDAwMGZmJyxcblx0ICAgICAgICBuaWNlcjogJyMwMDc0RDknXG5cdCAgICB9LFxuXHQgICAgYXF1YToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwZmZmZicsXG5cdCAgICAgICAgbmljZXI6ICcjN0ZEQkZGJ1xuXHQgICAgfSxcblx0ICAgIHRlYWw6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDgwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzM5Q0NDQydcblx0ICAgIH0sXG5cdCAgICBvbGl2ZToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwODAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjM0Q5OTcwJ1xuXHQgICAgfSxcblx0ICAgIGdyZWVuOiB7XG5cdCAgICAgICAgdmFsdWU6ICcjMDA4MDAwJyxcblx0ICAgICAgICBuaWNlcjogJyMyRUNDNDAnXG5cdCAgICB9LFxuXHQgICAgbGltZToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwZmYwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjMDFGRjcwJ1xuXHQgICAgfSxcblx0ICAgIHllbGxvdzoge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmZmYwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkZEQzAwJ1xuXHQgICAgfSxcblx0ICAgIG9yYW5nZToge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmYTUwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkY4NTFCJ1xuXHQgICAgfSxcblx0ICAgIHJlZDoge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmMDAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkY0MTM2J1xuXHQgICAgfSxcblx0ICAgIG1hcm9vbjoge1xuXHQgICAgICAgIHZhbHVlOiAnIzgwMDAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjODUxNDRCJ1xuXHQgICAgfSxcblx0ICAgIGZ1Y2hzaWE6IHtcblx0ICAgICAgICB2YWx1ZTogJyNmZjAwZmYnLFxuXHQgICAgICAgIG5pY2VyOiAnI0YwMTJCRSdcblx0ICAgIH0sXG5cdCAgICBwdXJwbGU6IHtcblx0ICAgICAgICB2YWx1ZTogJyM4MDAwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnI0IxMERDOSdcblx0ICAgIH0sXG5cdCAgICBzaWx2ZXI6IHtcblx0ICAgICAgICB2YWx1ZTogJyNjMGMwYzAnLFxuXHQgICAgICAgIG5pY2VyOiAnI0RERERERCdcblx0ICAgIH0sXG5cdCAgICBncmF5OiB7XG5cdCAgICAgICAgdmFsdWU6ICcjODA4MDgwJyxcblx0ICAgICAgICBuaWNlcjogJyNBQUFBQUEnXG5cdCAgICB9LFxuXHQgICAgYmxhY2s6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDAwMDAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzExMTExMSdcblx0ICAgIH0sXG5cdCAgICB3aGl0ZToge1xuXHQgICAgICAgIHZhbHVlOiAnI0ZGRkZGRicsXG5cdCAgICAgICAgbmljZXI6ICcjRkZGRkZGJ1xuXHQgICAgfVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgVGV4dFxuXG5cdCAgICBodHRwOi8vd3d3LmxpcHN1bS5jb20vXG5cdCovXG5cdHZhciBCYXNpYyA9IF9fd2VicGFja19yZXF1aXJlX18oNilcblx0dmFyIEhlbHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cblx0ZnVuY3Rpb24gcmFuZ2UoZGVmYXVsdE1pbiwgZGVmYXVsdE1heCwgbWluLCBtYXgpIHtcblx0ICAgIHJldHVybiBtaW4gPT09IHVuZGVmaW5lZCA/IEJhc2ljLm5hdHVyYWwoZGVmYXVsdE1pbiwgZGVmYXVsdE1heCkgOiAvLyAoKVxuXHQgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkID8gbWluIDogLy8gKCBsZW4gKVxuXHQgICAgICAgIEJhc2ljLm5hdHVyYWwocGFyc2VJbnQobWluLCAxMCksIHBhcnNlSW50KG1heCwgMTApKSAvLyAoIG1pbiwgbWF4IClcblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5q615paH5pys44CCXG5cdCAgICBwYXJhZ3JhcGg6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDcsIG1pbiwgbWF4KVxuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5zZW50ZW5jZSgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKVxuXHQgICAgfSxcblx0ICAgIC8vIFxuXHQgICAgY3BhcmFncmFwaDogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMywgNywgbWluLCBtYXgpXG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNzZW50ZW5jZSgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5Y+l5a2Q77yM56ys5LiA5Liq5Y2V6K+N55qE6aaW5a2X5q+N5aSn5YaZ44CCXG5cdCAgICBzZW50ZW5jZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMTIsIDE4LCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gW11cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMud29yZCgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gSGVscGVyLmNhcGl0YWxpemUocmVzdWx0LmpvaW4oJyAnKSkgKyAnLidcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrkuK3mloflj6XlrZDjgIJcblx0ICAgIGNzZW50ZW5jZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMTIsIDE4LCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gW11cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3dvcmQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpICsgJ+OAgidcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrljZXor43jgIJcblx0ICAgIHdvcmQ6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDEwLCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQgKz0gQmFzaWMuY2hhcmFjdGVyKCdsb3dlcicpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrmiJblpJrkuKrmsYnlrZfjgIJcblx0ICAgIGN3b3JkOiBmdW5jdGlvbihwb29sLCBtaW4sIG1heCkge1xuXHQgICAgICAgIC8vIOacgOW4uOeUqOeahCA1MDAg5Liq5rGJ5a2XIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy81Njg0MzYuaHRtXG5cdCAgICAgICAgdmFyIERJQ1RfS0FOWkkgPSAn55qE5LiA5piv5Zyo5LiN5LqG5pyJ5ZKM5Lq66L+Z5Lit5aSn5Li65LiK5Liq5Zu95oiR5Lul6KaB5LuW5pe25p2l55So5Lus55Sf5Yiw5L2c5Zyw5LqO5Ye65bCx5YiG5a+55oiQ5Lya5Y+v5Li75Y+R5bm05Yqo5ZCM5bel5Lmf6IO95LiL6L+H5a2Q6K+05Lqn56eN6Z2i6ICM5pa55ZCO5aSa5a6a6KGM5a2m5rOV5omA5rCR5b6X57uP5Y2B5LiJ5LmL6L+b552A562J6YOo5bqm5a6255S15Yqb6YeM5aaC5rC05YyW6auY6Ieq5LqM55CG6LW35bCP54mp546w5a6e5Yqg6YeP6YO95Lik5L2T5Yi25py65b2T5L2/54K55LuO5Lia5pys5Y675oqK5oCn5aW95bqU5byA5a6D5ZCI6L+Y5Zug55Sx5YW25Lqb54S25YmN5aSW5aSp5pS/5Zub5pel6YKj56S+5LmJ5LqL5bmz5b2i55u45YWo6KGo6Ze05qC35LiO5YWz5ZCE6YeN5paw57q/5YaF5pWw5q2j5b+D5Y+N5L2g5piO55yL5Y6f5Y+I5LmI5Yip5q+U5oiW5L2G6LSo5rCU56ys5ZCR6YGT5ZG95q2k5Y+Y5p2h5Y+q5rKh57uT6Kej6Zeu5oSP5bu65pyI5YWs5peg57O75Yab5b6I5oOF6ICF5pyA56uL5Luj5oOz5bey6YCa5bm25o+Q55u06aKY5YWa56iL5bGV5LqU5p6c5paZ6LGh5ZGY6Z2p5L2N5YWl5bi45paH5oC75qyh5ZOB5byP5rS76K6+5Y+K566h54m55Lu26ZW/5rGC6ICB5aS05Z+66LWE6L655rWB6Lev57qn5bCR5Zu+5bGx57uf5o6l55+l6L6D5bCG57uE6KeB6K6h5Yir5aW55omL6KeS5pyf5qC56K666L+Q5Yac5oyH5Yeg5Lmd5Yy65by65pS+5Yaz6KW/6KKr5bmy5YGa5b+F5oiY5YWI5Zue5YiZ5Lu75Y+W5o2u5aSE6Zif5Y2X57uZ6Imy5YWJ6Zeo5Y2z5L+d5rK75YyX6YCg55m+6KeE54Ot6aKG5LiD5rW35Y+j5Lic5a+85Zmo5Y6L5b+X5LiW6YeR5aKe5LqJ5rWO6Zi25rK55oCd5pyv5p6B5Lqk5Y+X6IGU5LuA6K6k5YWt5YWx5p2D5pS26K+B5pS55riF5bex576O5YaN6YeH6L2s5pu05Y2V6aOO5YiH5omT55m95pWZ6YCf6Iqx5bim5a6J5Zy66Lqr6L2m5L6L55yf5Yqh5YW35LiH5q+P55uu6Iez6L6+6LWw56ev56S66K6u5aOw5oql5paX5a6M57G75YWr56a75Y2O5ZCN56Gu5omN56eR5byg5L+h6ams6IqC6K+d57Gz5pW056m65YWD5Ya15LuK6ZuG5rip5Lyg5Zyf6K645q2l576k5bm/55+z6K6w6ZyA5q6156CU55WM5ouJ5p6X5b6L5Y+r5LiU56m26KeC6LaK57uH6KOF5b2x566X5L2O5oyB6Z+z5LyX5Lmm5biD5aSN5a655YS/6aG76ZmF5ZWG6Z2e6aqM6L+e5pat5rex6Zq+6L+R55+/5Y2D5ZGo5aeU57Sg5oqA5aSH5Y2K5Yqe6Z2S55yB5YiX5Lmg5ZON57qm5pSv6Iis5Y+y5oSf5Yqz5L6/5Zui5b6A6YW45Y6G5biC5YWL5L2V6Zmk5raI5p6E5bqc56ew5aSq5YeG57K+5YC85Y+3546H5peP57u05YiS6YCJ5qCH5YaZ5a2Y5YCZ5q+b5Lqy5b+r5pWI5pav6Zmi5p+l5rGf5Z6L55y8546L5oyJ5qC85YW75piT572u5rS+5bGC54mH5aeL5Y205LiT54q26IKy5Y6C5Lqs6K+G6YCC5bGe5ZyG5YyF54Gr5L2P6LCD5ruh5Y6/5bGA54Wn5Y+C57qi57uG5byV5ZCs6K+l6ZOB5Lu35Lil6b6Z6aOeJ1xuXG5cdCAgICAgICAgdmFyIGxlblxuXHQgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBjYXNlIDA6IC8vICgpXG5cdCAgICAgICAgICAgICAgICBwb29sID0gRElDVF9LQU5aSVxuXHQgICAgICAgICAgICAgICAgbGVuID0gMVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAxOiAvLyAoIHBvb2wgKVxuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gMVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAoIGxlbmd0aCApXG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gcG9vbFxuXHQgICAgICAgICAgICAgICAgICAgIHBvb2wgPSBESUNUX0tBTlpJXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlIDI6XG5cdCAgICAgICAgICAgICAgICAvLyAoIHBvb2wsIGxlbmd0aCApXG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICBsZW4gPSBtaW5cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gKCBtaW4sIG1heCApXG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKHBvb2wsIG1pbilcblx0ICAgICAgICAgICAgICAgICAgICBwb29sID0gRElDVF9LQU5aSVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAzOlxuXHQgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKG1pbiwgbWF4KVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJydcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdCArPSBwb29sLmNoYXJBdCh0aGlzLm5hdHVyYWwoMCwgcG9vbC5sZW5ndGggLSAxKSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOWPpeagh+mimO+8jOWFtuS4reavj+S4quWNleivjeeahOmmluWtl+avjeWkp+WGmeOAglxuXHQgICAgdGl0bGU6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDcsIG1pbiwgbWF4KVxuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jYXBpdGFsaXplKHRoaXMud29yZCgpKSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJylcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDlj6XkuK3mlofmoIfpopjjgIJcblx0ICAgIGN0aXRsZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMywgNywgbWluLCBtYXgpXG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmN3b3JkKCkpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHQuam9pbignJylcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIEhlbHBlcnNcblx0Ki9cblxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHQvLyDmiorlrZfnrKbkuLLnmoTnrKzkuIDkuKrlrZfmr43ovazmjaLkuLrlpKflhpnjgIJcblx0XHRjYXBpdGFsaXplOiBmdW5jdGlvbih3b3JkKSB7XG5cdFx0XHRyZXR1cm4gKHdvcmQgKyAnJykuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyAod29yZCArICcnKS5zdWJzdHIoMSlcblx0XHR9LFxuXHRcdC8vIOaKiuWtl+espuS4sui9rOaNouS4uuWkp+WGmeOAglxuXHRcdHVwcGVyOiBmdW5jdGlvbihzdHIpIHtcblx0XHRcdHJldHVybiAoc3RyICsgJycpLnRvVXBwZXJDYXNlKClcblx0XHR9LFxuXHRcdC8vIOaKiuWtl+espuS4sui9rOaNouS4uuWwj+WGmeOAglxuXHRcdGxvd2VyOiBmdW5jdGlvbihzdHIpIHtcblx0XHRcdHJldHVybiAoc3RyICsgJycpLnRvTG93ZXJDYXNlKClcblx0XHR9LFxuXHRcdC8vIOS7juaVsOe7hOS4remaj+acuumAieWPluS4gOS4quWFg+e0oO+8jOW5tui/lOWbnuOAglxuXHRcdHBpY2s6IGZ1bmN0aW9uIHBpY2soYXJyLCBtaW4sIG1heCkge1xuXHRcdFx0Ly8gcGljayggaXRlbTEsIGl0ZW0yIC4uLiApXG5cdFx0XHRpZiAoIVV0aWwuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdGFyciA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuXHRcdFx0XHRtaW4gPSAxXG5cdFx0XHRcdG1heCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHBpY2soIFsgaXRlbTEsIGl0ZW0yIC4uLiBdIClcblx0XHRcdFx0aWYgKG1pbiA9PT0gdW5kZWZpbmVkKSBtaW4gPSAxXG5cblx0XHRcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIGNvdW50IClcblx0XHRcdFx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSBtYXggPSBtaW5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG1pbiA9PT0gMSAmJiBtYXggPT09IDEpIHJldHVybiBhcnJbdGhpcy5uYXR1cmFsKDAsIGFyci5sZW5ndGggLSAxKV1cblxuXHRcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIG1pbiwgbWF4IClcblx0XHRcdHJldHVybiB0aGlzLnNodWZmbGUoYXJyLCBtaW4sIG1heClcblxuXHRcdFx0Ly8g6YCa6L+H5Y+C5pWw5Liq5pWw5Yik5pat5pa55rOV562+5ZCN77yM5omp5bGV5oCn5aSq5beu77yBIzkwXG5cdFx0XHQvLyBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdC8vIFx0Y2FzZSAxOlxuXHRcdFx0Ly8gXHRcdC8vIHBpY2soIFsgaXRlbTEsIGl0ZW0yIC4uLiBdIClcblx0XHRcdC8vIFx0XHRyZXR1cm4gYXJyW3RoaXMubmF0dXJhbCgwLCBhcnIubGVuZ3RoIC0gMSldXG5cdFx0XHQvLyBcdGNhc2UgMjpcblx0XHRcdC8vIFx0XHQvLyBwaWNrKCBbIGl0ZW0xLCBpdGVtMiAuLi4gXSwgY291bnQgKVxuXHRcdFx0Ly8gXHRcdG1heCA9IG1pblxuXHRcdFx0Ly8gXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Ly8gXHRjYXNlIDM6XG5cdFx0XHQvLyBcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIG1pbiwgbWF4IClcblx0XHRcdC8vIFx0XHRyZXR1cm4gdGhpcy5zaHVmZmxlKGFyciwgbWluLCBtYXgpXG5cdFx0XHQvLyB9XG5cdFx0fSxcblx0XHQvKlxuXHRcdCAgICDmiZPkubHmlbDnu4TkuK3lhYPntKDnmoTpobrluo/vvIzlubbov5Tlm57jgIJcblx0XHQgICAgR2l2ZW4gYW4gYXJyYXksIHNjcmFtYmxlIHRoZSBvcmRlciBhbmQgcmV0dXJuIGl0LlxuXG5cdFx0ICAgIOWFtuS7lueahOWunueOsOaAnei3r++8mlxuXHRcdCAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9qc2xpYnMvd2lraS9KYXZhc2NyaXB0VGlwc1xuXHRcdCAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNvcnQoZnVuY3Rpb24oKSB7XG5cdFx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjVcblx0XHQgICAgICAgIH0pXG5cdFx0Ki9cblx0XHRzaHVmZmxlOiBmdW5jdGlvbiBzaHVmZmxlKGFyciwgbWluLCBtYXgpIHtcblx0XHRcdGFyciA9IGFyciB8fCBbXVxuXHRcdFx0dmFyIG9sZCA9IGFyci5zbGljZSgwKSxcblx0XHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gb2xkLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aW5kZXggPSB0aGlzLm5hdHVyYWwoMCwgb2xkLmxlbmd0aCAtIDEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG9sZFtpbmRleF0pXG5cdFx0XHRcdG9sZC5zcGxpY2UoaW5kZXgsIDEpXG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0bWF4ID0gbWluXG5cdFx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgMzpcblx0XHRcdFx0XHRtaW4gPSBwYXJzZUludChtaW4sIDEwKVxuXHRcdFx0XHRcdG1heCA9IHBhcnNlSW50KG1heCwgMTApXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5zbGljZSgwLCB0aGlzLm5hdHVyYWwobWluLCBtYXgpKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAgKiBSYW5kb20ub3JkZXIoaXRlbSwgaXRlbSlcblx0XHQgICAgKiBSYW5kb20ub3JkZXIoW2l0ZW0sIGl0ZW0gLi4uXSlcblxuXHRcdCAgICDpobrluo/ojrflj5bmlbDnu4TkuK3nmoTlhYPntKBcblxuXHRcdCAgICBbSlNPTuWvvOWFpeaVsOe7hOaUr+aMgeaVsOe7hOaVsOaNruW9leWFpV0oaHR0cHM6Ly9naXRodWIuY29tL3RoeC9SQVAvaXNzdWVzLzIyKVxuXG5cdFx0ICAgIOS4jeaUr+aMgeWNleeLrOiwg+eUqO+8gVxuXHRcdCovXG5cdFx0b3JkZXI6IGZ1bmN0aW9uIG9yZGVyKGFycmF5KSB7XG5cdFx0XHRvcmRlci5jYWNoZSA9IG9yZGVyLmNhY2hlIHx8IHt9XG5cblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJyYXkgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMClcblxuXHRcdFx0Ly8gb3B0aW9ucy5jb250ZXh0LnBhdGgvdGVtcGxhdGVQYXRoXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG9yZGVyLm9wdGlvbnNcblx0XHRcdHZhciB0ZW1wbGF0ZVBhdGggPSBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLmpvaW4oJy4nKVxuXG5cdFx0XHR2YXIgY2FjaGUgPSAoXG5cdFx0XHRcdG9yZGVyLmNhY2hlW3RlbXBsYXRlUGF0aF0gPSBvcmRlci5jYWNoZVt0ZW1wbGF0ZVBhdGhdIHx8IHtcblx0XHRcdFx0XHRpbmRleDogMCxcblx0XHRcdFx0XHRhcnJheTogYXJyYXlcblx0XHRcdFx0fVxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4gY2FjaGUuYXJyYXlbY2FjaGUuaW5kZXgrKyAlIGNhY2hlLmFycmF5Lmxlbmd0aF1cblx0XHR9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBOYW1lXG5cblx0ICAgIFtCZXlvbmQgdGhlIFRvcCAxMDAwIE5hbWVzXShodHRwOi8vd3d3LnNzYS5nb3Yvb2FjdC9iYWJ5bmFtZXMvbGltaXRzLmh0bWwpXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdC8vIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOiLseaWh+WQjeOAglxuXHRcdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuYW1lcyA9IFtcblx0XHRcdFx0Ly8gbWFsZVxuXHRcdFx0XHRcIkphbWVzXCIsIFwiSm9oblwiLCBcIlJvYmVydFwiLCBcIk1pY2hhZWxcIiwgXCJXaWxsaWFtXCIsXG5cdFx0XHRcdFwiRGF2aWRcIiwgXCJSaWNoYXJkXCIsIFwiQ2hhcmxlc1wiLCBcIkpvc2VwaFwiLCBcIlRob21hc1wiLFxuXHRcdFx0XHRcIkNocmlzdG9waGVyXCIsIFwiRGFuaWVsXCIsIFwiUGF1bFwiLCBcIk1hcmtcIiwgXCJEb25hbGRcIixcblx0XHRcdFx0XCJHZW9yZ2VcIiwgXCJLZW5uZXRoXCIsIFwiU3RldmVuXCIsIFwiRWR3YXJkXCIsIFwiQnJpYW5cIixcblx0XHRcdFx0XCJSb25hbGRcIiwgXCJBbnRob255XCIsIFwiS2V2aW5cIiwgXCJKYXNvblwiLCBcIk1hdHRoZXdcIixcblx0XHRcdFx0XCJHYXJ5XCIsIFwiVGltb3RoeVwiLCBcIkpvc2VcIiwgXCJMYXJyeVwiLCBcIkplZmZyZXlcIixcblx0XHRcdFx0XCJGcmFua1wiLCBcIlNjb3R0XCIsIFwiRXJpY1wiXG5cdFx0XHRdLmNvbmNhdChbXG5cdFx0XHRcdC8vIGZlbWFsZVxuXHRcdFx0XHRcIk1hcnlcIiwgXCJQYXRyaWNpYVwiLCBcIkxpbmRhXCIsIFwiQmFyYmFyYVwiLCBcIkVsaXphYmV0aFwiLFxuXHRcdFx0XHRcIkplbm5pZmVyXCIsIFwiTWFyaWFcIiwgXCJTdXNhblwiLCBcIk1hcmdhcmV0XCIsIFwiRG9yb3RoeVwiLFxuXHRcdFx0XHRcIkxpc2FcIiwgXCJOYW5jeVwiLCBcIkthcmVuXCIsIFwiQmV0dHlcIiwgXCJIZWxlblwiLFxuXHRcdFx0XHRcIlNhbmRyYVwiLCBcIkRvbm5hXCIsIFwiQ2Fyb2xcIiwgXCJSdXRoXCIsIFwiU2hhcm9uXCIsXG5cdFx0XHRcdFwiTWljaGVsbGVcIiwgXCJMYXVyYVwiLCBcIlNhcmFoXCIsIFwiS2ltYmVybHlcIiwgXCJEZWJvcmFoXCIsXG5cdFx0XHRcdFwiSmVzc2ljYVwiLCBcIlNoaXJsZXlcIiwgXCJDeW50aGlhXCIsIFwiQW5nZWxhXCIsIFwiTWVsaXNzYVwiLFxuXHRcdFx0XHRcIkJyZW5kYVwiLCBcIkFteVwiLCBcIkFubmFcIlxuXHRcdFx0XSlcblx0XHRcdHJldHVybiB0aGlzLnBpY2sobmFtZXMpXG5cdFx0XHRcdC8vIG9yIHRoaXMuY2FwaXRhbGl6ZSh0aGlzLndvcmQoKSlcblx0XHR9LFxuXHRcdC8vIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOiLseaWh+Wnk+OAglxuXHRcdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5hbWVzID0gW1xuXHRcdFx0XHRcIlNtaXRoXCIsIFwiSm9obnNvblwiLCBcIldpbGxpYW1zXCIsIFwiQnJvd25cIiwgXCJKb25lc1wiLFxuXHRcdFx0XHRcIk1pbGxlclwiLCBcIkRhdmlzXCIsIFwiR2FyY2lhXCIsIFwiUm9kcmlndWV6XCIsIFwiV2lsc29uXCIsXG5cdFx0XHRcdFwiTWFydGluZXpcIiwgXCJBbmRlcnNvblwiLCBcIlRheWxvclwiLCBcIlRob21hc1wiLCBcIkhlcm5hbmRlelwiLFxuXHRcdFx0XHRcIk1vb3JlXCIsIFwiTWFydGluXCIsIFwiSmFja3NvblwiLCBcIlRob21wc29uXCIsIFwiV2hpdGVcIixcblx0XHRcdFx0XCJMb3BlelwiLCBcIkxlZVwiLCBcIkdvbnphbGV6XCIsIFwiSGFycmlzXCIsIFwiQ2xhcmtcIixcblx0XHRcdFx0XCJMZXdpc1wiLCBcIlJvYmluc29uXCIsIFwiV2Fsa2VyXCIsIFwiUGVyZXpcIiwgXCJIYWxsXCIsXG5cdFx0XHRcdFwiWW91bmdcIiwgXCJBbGxlblwiXG5cdFx0XHRdXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdFx0XHQvLyBvciB0aGlzLmNhcGl0YWxpemUodGhpcy53b3JkKCkpXG5cdFx0fSxcblx0XHQvLyDpmo/mnLrnlJ/miJDkuIDkuKrluLjop4HnmoToi7Hmloflp5PlkI3jgIJcblx0XHRuYW1lOiBmdW5jdGlvbihtaWRkbGUpIHtcblx0XHRcdHJldHVybiB0aGlzLmZpcnN0KCkgKyAnICcgK1xuXHRcdFx0XHQobWlkZGxlID8gdGhpcy5maXJzdCgpICsgJyAnIDogJycpICtcblx0XHRcdFx0dGhpcy5sYXN0KClcblx0XHR9LFxuXHRcdC8qXG5cdFx0ICAgIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOS4reaWh+Wnk+OAglxuXHRcdCAgICBb5LiW55WM5bi455So5aeT5rCP5o6S6KGMXShodHRwOi8vYmFpa2UuYmFpZHUuY29tL3ZpZXcvMTcxOTExNS5odG0pXG5cdFx0ICAgIFvnjoTmtL7nvZEgLSDnvZHnu5zlsI/or7TliJvkvZzovoXliqnlubPlj7BdKGh0dHA6Ly94dWFucGFpLnNpbmFhcHAuY29tLylcblx0XHQgKi9cblx0XHRjZmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5hbWVzID0gKFxuXHRcdFx0XHQn546LIOadjiDlvKAg5YiYIOmZiCDmnagg6LW1IOm7hCDlkagg5ZC0ICcgK1xuXHRcdFx0XHQn5b6QIOWtmSDog6Eg5pyxIOmrmCDmnpcg5L2VIOmDrSDpqawg572XICcgK1xuXHRcdFx0XHQn5qKBIOWuiyDpg5Eg6LCiIOmfqSDllJAg5YavIOS6jiDokaMg6JCnICcgK1xuXHRcdFx0XHQn56iLIOabuSDoooEg6YKTIOiuuCDlgoUg5rKIIOabviDlva0g5ZCVICcgK1xuXHRcdFx0XHQn6IuPIOWNoiDokosg6JShIOi0viDkuIEg6a2PIOiWmyDlj7Yg6ZiOICcgK1xuXHRcdFx0XHQn5L2ZIOa9mCDmnZwg5oi0IOWkjyDplLog5rGqIOeUsCDku7sg5aecICcgK1xuXHRcdFx0XHQn6IyDIOaWuSDnn7Mg5aeaIOiwrSDlu5Yg6YK5IOeGiiDph5Eg6ZmGICcgK1xuXHRcdFx0XHQn6YOdIOWtlCDnmb0g5bSUIOW6tyDmr5sg6YKxIOenpiDmsZ8g5Y+yICcgK1xuXHRcdFx0XHQn6aG+IOS+ryDpgrUg5a2fIOm+mSDkuIcg5q61IOmbtyDpkrEg5rGkICcgK1xuXHRcdFx0XHQn5bC5IOm7jiDmmJMg5bi4IOatpiDkuZQg6LS6IOi1liDpvpog5paHJ1xuXHRcdFx0KS5zcGxpdCgnICcpXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAg6ZqP5py655Sf5oiQ5LiA5Liq5bi46KeB55qE5Lit5paH5ZCN44CCXG5cdFx0ICAgIFvkuK3lm73mnIDluLjop4HlkI3lrZfliY01MOWQjV/kuInkuZ3nrpflkb3nvZFdKGh0dHA6Ly93d3cubmFtZTk5OS5uZXQveGluZ21pbmcveGluZ3NoaS8yMDEzMTAwNC80OC5odG1sKVxuXHRcdCAqL1xuXHRcdGNsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuYW1lcyA9IChcblx0XHRcdFx0J+S8nyDoirMg5aicIOengOiLsSDmlY8g6Z2ZIOS4vSDlvLog56OKIOWGmyAnICtcblx0XHRcdFx0J+a0iyDli4cg6ImzIOadsCDlqJ8g5rabIOaYjiDotoUg56eA5YWwIOmcniAnICtcblx0XHRcdFx0J+W5syDliJog5qGC6IuxJ1xuXHRcdFx0KS5zcGxpdCgnICcpXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdH0sXG5cdFx0Ly8g6ZqP5py655Sf5oiQ5LiA5Liq5bi46KeB55qE5Lit5paH5aeT5ZCN44CCXG5cdFx0Y25hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY2ZpcnN0KCkgKyB0aGlzLmNsYXN0KClcblx0XHR9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBXZWJcblx0Ki9cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgICAvKlxuXHQgICAgICAgIOmaj+acuueUn+aIkOS4gOS4qiBVUkzjgIJcblxuXHQgICAgICAgIFtVUkwg6KeE6IyDXShodHRwOi8vd3d3LnczLm9yZy9BZGRyZXNzaW5nL1VSTC91cmwtc3BlYy50eHQpXG5cdCAgICAgICAgICAgIGh0dHAgICAgICAgICAgICAgICAgICAgIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCBcblx0ICAgICAgICAgICAgZnRwICAgICAgICAgICAgICAgICAgICAgRmlsZSBUcmFuc2ZlciBwcm90b2NvbCBcblx0ICAgICAgICAgICAgZ29waGVyICAgICAgICAgICAgICAgICAgVGhlIEdvcGhlciBwcm90b2NvbCBcblx0ICAgICAgICAgICAgbWFpbHRvICAgICAgICAgICAgICAgICAgRWxlY3Ryb25pYyBtYWlsIGFkZHJlc3MgXG5cdCAgICAgICAgICAgIG1pZCAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgaWRlbnRpZmllcnMgZm9yIGVsZWN0cm9uaWMgbWFpbCBcblx0ICAgICAgICAgICAgY2lkICAgICAgICAgICAgICAgICAgICAgQ29udGVudCBpZGVudGlmaWVycyBmb3IgTUlNRSBib2R5IHBhcnQgXG5cdCAgICAgICAgICAgIG5ld3MgICAgICAgICAgICAgICAgICAgIFVzZW5ldCBuZXdzIFxuXHQgICAgICAgICAgICBubnRwICAgICAgICAgICAgICAgICAgICBVc2VuZXQgbmV3cyBmb3IgbG9jYWwgTk5UUCBhY2Nlc3Mgb25seSBcblx0ICAgICAgICAgICAgcHJvc3Blcm8gICAgICAgICAgICAgICAgQWNjZXNzIHVzaW5nIHRoZSBwcm9zcGVybyBwcm90b2NvbHMgXG5cdCAgICAgICAgICAgIHRlbG5ldCBybG9naW4gdG4zMjcwICAgIFJlZmVyZW5jZSB0byBpbnRlcmFjdGl2ZSBzZXNzaW9uc1xuXHQgICAgICAgICAgICB3YWlzICAgICAgICAgICAgICAgICAgICBXaWRlIEFyZWEgSW5mb3JtYXRpb24gU2VydmVycyBcblx0ICAgICovXG5cdCAgICB1cmw6IGZ1bmN0aW9uKHByb3RvY29sLCBob3N0KSB7XG5cdCAgICAgICAgcmV0dXJuIChwcm90b2NvbCB8fCB0aGlzLnByb3RvY29sKCkpICsgJzovLycgKyAvLyBwcm90b2NvbD9cblx0ICAgICAgICAgICAgKGhvc3QgfHwgdGhpcy5kb21haW4oKSkgKyAvLyBob3N0P1xuXHQgICAgICAgICAgICAnLycgKyB0aGlzLndvcmQoKVxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4qiBVUkwg5Y2P6K6u44CCXG5cdCAgICBwcm90b2NvbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGljayhcblx0ICAgICAgICAgICAgLy8g5Y2P6K6u57CHXG5cdCAgICAgICAgICAgICdodHRwIGZ0cCBnb3BoZXIgbWFpbHRvIG1pZCBjaWQgbmV3cyBubnRwIHByb3NwZXJvIHRlbG5ldCBybG9naW4gdG4zMjcwIHdhaXMnLnNwbGl0KCcgJylcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5Z+f5ZCN44CCXG5cdCAgICBkb21haW46IGZ1bmN0aW9uKHRsZCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLndvcmQoKSArICcuJyArICh0bGQgfHwgdGhpcy50bGQoKSlcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIOmaj+acuueUn+aIkOS4gOS4qumhtue6p+Wfn+WQjeOAglxuXHQgICAgICAgIOWbvemZhemhtue6p+Wfn+WQjSBpbnRlcm5hdGlvbmFsIHRvcC1sZXZlbCBkb21haW4tbmFtZXMsIGlUTERzXG5cdCAgICAgICAg5Zu95a626aG257qn5Z+f5ZCNIG5hdGlvbmFsIHRvcC1sZXZlbCBkb21haW5uYW1lcywgblRMRHNcblx0ICAgICAgICBb5Z+f5ZCN5ZCO57yA5aSn5YWoXShodHRwOi8vd3d3LjE2M25zLmNvbS96aXh1bi9wb3N0LzQ0MTcuaHRtbClcblx0ICAgICovXG5cdCAgICB0bGQ6IGZ1bmN0aW9uKCkgeyAvLyBUb3AgTGV2ZWwgRG9tYWluXG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGljayhcblx0ICAgICAgICAgICAgKFxuXHQgICAgICAgICAgICAgICAgLy8g5Z+f5ZCN5ZCO57yAXG5cdCAgICAgICAgICAgICAgICAnY29tIG5ldCBvcmcgZWR1IGdvdiBpbnQgbWlsIGNuICcgK1xuXHQgICAgICAgICAgICAgICAgLy8g5Zu95YaF5Z+f5ZCNXG5cdCAgICAgICAgICAgICAgICAnY29tLmNuIG5ldC5jbiBnb3YuY24gb3JnLmNuICcgK1xuXHQgICAgICAgICAgICAgICAgLy8g5Lit5paH5Zu95YaF5Z+f5ZCNXG5cdCAgICAgICAgICAgICAgICAn5Lit5Zu9IOS4reWbveS6kuiBlC7lhazlj7gg5Lit5Zu95LqS6IGULue9kee7nCAnICtcblx0ICAgICAgICAgICAgICAgIC8vIOaWsOWbvemZheWfn+WQjVxuXHQgICAgICAgICAgICAgICAgJ3RlbCBiaXogY2MgdHYgaW5mbyBuYW1lIGhrIG1vYmkgYXNpYSBjZCB0cmF2ZWwgcHJvIG11c2V1bSBjb29wIGFlcm8gJyArXG5cdCAgICAgICAgICAgICAgICAvLyDkuJbnlYzlkITlm73ln5/lkI3lkI7nvIBcblx0ICAgICAgICAgICAgICAgICdhZCBhZSBhZiBhZyBhaSBhbCBhbSBhbiBhbyBhcSBhciBhcyBhdCBhdSBhdyBheiBiYSBiYiBiZCBiZSBiZiBiZyBiaCBiaSBiaiBibSBibiBibyBiciBicyBidCBidiBidyBieSBieiBjYSBjYyBjZiBjZyBjaCBjaSBjayBjbCBjbSBjbiBjbyBjcSBjciBjdSBjdiBjeCBjeSBjeiBkZSBkaiBkayBkbSBkbyBkeiBlYyBlZSBlZyBlaCBlcyBldCBldiBmaSBmaiBmayBmbSBmbyBmciBnYSBnYiBnZCBnZSBnZiBnaCBnaSBnbCBnbSBnbiBncCBnciBndCBndSBndyBneSBoayBobSBobiBociBodCBodSBpZCBpZSBpbCBpbiBpbyBpcSBpciBpcyBpdCBqbSBqbyBqcCBrZSBrZyBraCBraSBrbSBrbiBrcCBrciBrdyBreSBreiBsYSBsYiBsYyBsaSBsayBsciBscyBsdCBsdSBsdiBseSBtYSBtYyBtZCBtZyBtaCBtbCBtbSBtbiBtbyBtcCBtcSBtciBtcyBtdCBtdiBtdyBteCBteSBteiBuYSBuYyBuZSBuZiBuZyBuaSBubCBubyBucCBuciBudCBudSBueiBvbSBxYSBwYSBwZSBwZiBwZyBwaCBwayBwbCBwbSBwbiBwciBwdCBwdyBweSByZSBybyBydSBydyBzYSBzYiBzYyBzZCBzZSBzZyBzaCBzaSBzaiBzayBzbCBzbSBzbiBzbyBzciBzdCBzdSBzeSBzeiB0YyB0ZCB0ZiB0ZyB0aCB0aiB0ayB0bSB0biB0byB0cCB0ciB0dCB0diB0dyB0eiB1YSB1ZyB1ayB1cyB1eSB2YSB2YyB2ZSB2ZyB2biB2dSB3ZiB3cyB5ZSB5dSB6YSB6bSB6ciB6dydcblx0ICAgICAgICAgICAgKS5zcGxpdCgnICcpXG5cdCAgICAgICAgKVxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4qumCruS7tuWcsOWdgOOAglxuXHQgICAgZW1haWw6IGZ1bmN0aW9uKGRvbWFpbikge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlcignbG93ZXInKSArICcuJyArIHRoaXMud29yZCgpICsgJ0AnICtcblx0ICAgICAgICAgICAgKFxuXHQgICAgICAgICAgICAgICAgZG9tYWluIHx8XG5cdCAgICAgICAgICAgICAgICAodGhpcy53b3JkKCkgKyAnLicgKyB0aGlzLnRsZCgpKVxuXHQgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLmNoYXJhY3RlcignbG93ZXInKSArICcuJyArIHRoaXMubGFzdCgpLnRvTG93ZXJDYXNlKCkgKyAnQCcgKyB0aGlzLmxhc3QoKS50b0xvd2VyQ2FzZSgpICsgJy4nICsgdGhpcy50bGQoKVxuXHQgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy53b3JkKCkgKyAnQCcgKyAoZG9tYWluIHx8IHRoaXMuZG9tYWluKCkpXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5LiqIElQIOWcsOWdgOOAglxuXHQgICAgaXA6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoMCwgMjU1KSArICcuJyArXG5cdCAgICAgICAgICAgIHRoaXMubmF0dXJhbCgwLCAyNTUpICsgJy4nICtcblx0ICAgICAgICAgICAgdGhpcy5uYXR1cmFsKDAsIDI1NSkgKyAnLicgK1xuXHQgICAgICAgICAgICB0aGlzLm5hdHVyYWwoMCwgMjU1KVxuXHQgICAgfVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgQWRkcmVzc1xuXHQqL1xuXG5cdHZhciBESUNUID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcblx0dmFyIFJFR0lPTiA9IFsn5Lic5YyXJywgJ+WNjuWMlycsICfljY7kuJwnLCAn5Y2O5LitJywgJ+WNjuWNlycsICfopb/ljZcnLCAn6KW/5YyXJ11cblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4quWkp+WMuuOAglxuXHQgICAgcmVnaW9uOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5waWNrKFJFR0lPTilcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInnnIHvvIjmiJbnm7TovpbluILjgIHoh6rmsrvljLrjgIHnibnliKvooYzmlL/ljLrvvInjgIJcblx0ICAgIHByb3ZpbmNlOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5waWNrKERJQ1QpLm5hbWVcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInluILjgIJcblx0ICAgIGNpdHk6IGZ1bmN0aW9uKHByZWZpeCkge1xuXHQgICAgICAgIHZhciBwcm92aW5jZSA9IHRoaXMucGljayhESUNUKVxuXHQgICAgICAgIHZhciBjaXR5ID0gdGhpcy5waWNrKHByb3ZpbmNlLmNoaWxkcmVuKVxuXHQgICAgICAgIHJldHVybiBwcmVmaXggPyBbcHJvdmluY2UubmFtZSwgY2l0eS5uYW1lXS5qb2luKCcgJykgOiBjaXR5Lm5hbWVcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInljr/jgIJcblx0ICAgIGNvdW50eTogZnVuY3Rpb24ocHJlZml4KSB7XG5cdCAgICAgICAgdmFyIHByb3ZpbmNlID0gdGhpcy5waWNrKERJQ1QpXG5cdCAgICAgICAgdmFyIGNpdHkgPSB0aGlzLnBpY2socHJvdmluY2UuY2hpbGRyZW4pXG5cdCAgICAgICAgdmFyIGNvdW50eSA9IHRoaXMucGljayhjaXR5LmNoaWxkcmVuKSB8fCB7XG5cdCAgICAgICAgICAgIG5hbWU6ICctJ1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcHJlZml4ID8gW3Byb3ZpbmNlLm5hbWUsIGNpdHkubmFtZSwgY291bnR5Lm5hbWVdLmpvaW4oJyAnKSA6IGNvdW50eS5uYW1lXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq6YKu5pS/57yW56CB77yI5YWt5L2N5pWw5a2X77yJ44CCXG5cdCAgICB6aXA6IGZ1bmN0aW9uKGxlbikge1xuXHQgICAgICAgIHZhciB6aXAgPSAnJ1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGxlbiB8fCA2KTsgaSsrKSB6aXAgKz0gdGhpcy5uYXR1cmFsKDAsIDkpXG5cdCAgICAgICAgcmV0dXJuIHppcFxuXHQgICAgfVxuXG5cdCAgICAvLyBhZGRyZXNzOiBmdW5jdGlvbigpIHt9LFxuXHQgICAgLy8gcGhvbmU6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBhcmVhY29kZTogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldDogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldF9zdWZmaXhlczogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldF9zdWZmaXg6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBzdGF0ZXM6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBzdGF0ZTogZnVuY3Rpb24oKSB7fSxcblx0fVxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIEFkZHJlc3Mg5a2X5YW45pWw5o2uXG5cblx0ICAgIOWtl+WFuOaVsOaNruadpea6kCBodHRwOi8vd3d3LmF0YXRlY2gub3JnL2FydGljbGVzLzMwMDI4P3JuZD0yNTQyNTk4NTZcblxuXHQgICAg5Zu95qCHIOecge+8iOW4gu+8iee6p+ihjOaUv+WMuuWIkueggeihqFxuXG5cdCAgICDljY7ljJcgICDljJfkuqzluIIg5aSp5rSl5biCIOays+WMl+ecgSDlsbHopb/nnIEg5YaF6JKZ5Y+k6Ieq5rK75Yy6XG5cdCAgICDkuJzljJcgICDovr3lroHnnIEg5ZCJ5p6X55yBIOm7kem+meaxn+ecgVxuXHQgICAg5Y2O5LicICAg5LiK5rW35biCIOaxn+iLj+ecgSDmtZnmsZ/nnIEg5a6J5b6955yBIOemj+W7uuecgSDmsZ/opb/nnIEg5bGx5Lic55yBXG5cdCAgICDljY7ljZcgICDlub/kuJznnIEg5bm/6KW/5aOu5peP6Ieq5rK75Yy6IOa1t+WNl+ecgVxuXHQgICAg5Y2O5LitICAg5rKz5Y2X55yBIOa5luWMl+ecgSDmuZbljZfnnIFcblx0ICAgIOilv+WNlyAgIOmHjeW6huW4giDlm5vlt53nnIEg6LS15bee55yBIOS6keWNl+ecgSDopb/ol4/oh6rmsrvljLpcblx0ICAgIOilv+WMlyAgIOmZleilv+ecgSDnlJjogoPnnIEg6Z2S5rW355yBIOWugeWkj+WbnuaXj+iHquayu+WMuiDmlrDnlobnu7TlkL7lsJToh6rmsrvljLpcblx0ICAgIOa4r+a+s+WPsCDpppnmuK/nibnliKvooYzmlL/ljLog5r6z6Zeo54m55Yir6KGM5pS/5Yy6IOWPsOa5vuecgVxuXHQgICAgXG5cdCAgICAqKuaOkuW6jyoqXG5cdCAgICBcblx0ICAgIGBgYGpzXG5cdCAgICB2YXIgbWFwID0ge31cblx0ICAgIF8uZWFjaChfLmtleXMoUkVHSU9OUyksZnVuY3Rpb24oaWQpe1xuXHQgICAgICBtYXBbaWRdID0gUkVHSU9OU1tJRF1cblx0ICAgIH0pXG5cdCAgICBKU09OLnN0cmluZ2lmeShtYXApXG5cdCAgICBgYGBcblx0Ki9cblx0dmFyIERJQ1QgPSB7XG5cdCAgICBcIjExMDAwMFwiOiBcIuWMl+S6rFwiLFxuXHQgICAgXCIxMTAxMDBcIjogXCLljJfkuqzluIJcIixcblx0ICAgIFwiMTEwMTAxXCI6IFwi5Lic5Z+O5Yy6XCIsXG5cdCAgICBcIjExMDEwMlwiOiBcIuilv+WfjuWMulwiLFxuXHQgICAgXCIxMTAxMDVcIjogXCLmnJ3pmLPljLpcIixcblx0ICAgIFwiMTEwMTA2XCI6IFwi5Liw5Y+w5Yy6XCIsXG5cdCAgICBcIjExMDEwN1wiOiBcIuefs+aZr+WxseWMulwiLFxuXHQgICAgXCIxMTAxMDhcIjogXCLmtbfmt4DljLpcIixcblx0ICAgIFwiMTEwMTA5XCI6IFwi6Zeo5aS05rKf5Yy6XCIsXG5cdCAgICBcIjExMDExMVwiOiBcIuaIv+WxseWMulwiLFxuXHQgICAgXCIxMTAxMTJcIjogXCLpgJrlt57ljLpcIixcblx0ICAgIFwiMTEwMTEzXCI6IFwi6aG65LmJ5Yy6XCIsXG5cdCAgICBcIjExMDExNFwiOiBcIuaYjOW5s+WMulwiLFxuXHQgICAgXCIxMTAxMTVcIjogXCLlpKflhbTljLpcIixcblx0ICAgIFwiMTEwMTE2XCI6IFwi5oCA5p+U5Yy6XCIsXG5cdCAgICBcIjExMDExN1wiOiBcIuW5s+iwt+WMulwiLFxuXHQgICAgXCIxMTAyMjhcIjogXCLlr4bkupHljr9cIixcblx0ICAgIFwiMTEwMjI5XCI6IFwi5bu25bqG5Y6/XCIsXG5cdCAgICBcIjExMDIzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMjAwMDBcIjogXCLlpKnmtKVcIixcblx0ICAgIFwiMTIwMTAwXCI6IFwi5aSp5rSl5biCXCIsXG5cdCAgICBcIjEyMDEwMVwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCIxMjAxMDJcIjogXCLmsrPkuJzljLpcIixcblx0ICAgIFwiMTIwMTAzXCI6IFwi5rKz6KW/5Yy6XCIsXG5cdCAgICBcIjEyMDEwNFwiOiBcIuWNl+W8gOWMulwiLFxuXHQgICAgXCIxMjAxMDVcIjogXCLmsrPljJfljLpcIixcblx0ICAgIFwiMTIwMTA2XCI6IFwi57qi5qGl5Yy6XCIsXG5cdCAgICBcIjEyMDExMFwiOiBcIuS4nOS4veWMulwiLFxuXHQgICAgXCIxMjAxMTFcIjogXCLopb/pnZLljLpcIixcblx0ICAgIFwiMTIwMTEyXCI6IFwi5rSl5Y2X5Yy6XCIsXG5cdCAgICBcIjEyMDExM1wiOiBcIuWMl+i+sOWMulwiLFxuXHQgICAgXCIxMjAxMTRcIjogXCLmrabmuIXljLpcIixcblx0ICAgIFwiMTIwMTE1XCI6IFwi5a6d5Z275Yy6XCIsXG5cdCAgICBcIjEyMDExNlwiOiBcIua7qOa1t+aWsOWMulwiLFxuXHQgICAgXCIxMjAyMjFcIjogXCLlroHmsrPljr9cIixcblx0ICAgIFwiMTIwMjIzXCI6IFwi6Z2Z5rW35Y6/XCIsXG5cdCAgICBcIjEyMDIyNVwiOiBcIuiTn+WOv1wiLFxuXHQgICAgXCIxMjAyMjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwMDAwXCI6IFwi5rKz5YyX55yBXCIsXG5cdCAgICBcIjEzMDEwMFwiOiBcIuefs+WutuW6hOW4glwiLFxuXHQgICAgXCIxMzAxMDJcIjogXCLplb/lronljLpcIixcblx0ICAgIFwiMTMwMTAzXCI6IFwi5qGl5Lic5Yy6XCIsXG5cdCAgICBcIjEzMDEwNFwiOiBcIuahpeilv+WMulwiLFxuXHQgICAgXCIxMzAxMDVcIjogXCLmlrDljY7ljLpcIixcblx0ICAgIFwiMTMwMTA3XCI6IFwi5LqV6ZmJ55+/5Yy6XCIsXG5cdCAgICBcIjEzMDEwOFwiOiBcIuijleWNjuWMulwiLFxuXHQgICAgXCIxMzAxMjFcIjogXCLkupXpmYnljr9cIixcblx0ICAgIFwiMTMwMTIzXCI6IFwi5q2j5a6a5Y6/XCIsXG5cdCAgICBcIjEzMDEyNFwiOiBcIuagvuWfjuWOv1wiLFxuXHQgICAgXCIxMzAxMjVcIjogXCLooYzllJDljr9cIixcblx0ICAgIFwiMTMwMTI2XCI6IFwi54G15a+/5Y6/XCIsXG5cdCAgICBcIjEzMDEyN1wiOiBcIumrmOmCkeWOv1wiLFxuXHQgICAgXCIxMzAxMjhcIjogXCLmt7Hms73ljr9cIixcblx0ICAgIFwiMTMwMTI5XCI6IFwi6LWe55qH5Y6/XCIsXG5cdCAgICBcIjEzMDEzMFwiOiBcIuaXoOaegeWOv1wiLFxuXHQgICAgXCIxMzAxMzFcIjogXCLlubPlsbHljr9cIixcblx0ICAgIFwiMTMwMTMyXCI6IFwi5YWD5rCP5Y6/XCIsXG5cdCAgICBcIjEzMDEzM1wiOiBcIui1teWOv1wiLFxuXHQgICAgXCIxMzAxODFcIjogXCLovpvpm4bluIJcIixcblx0ICAgIFwiMTMwMTgyXCI6IFwi6JeB5Z+O5biCXCIsXG5cdCAgICBcIjEzMDE4M1wiOiBcIuaZi+W3nuW4glwiLFxuXHQgICAgXCIxMzAxODRcIjogXCLmlrDkuZDluIJcIixcblx0ICAgIFwiMTMwMTg1XCI6IFwi6bm/5rOJ5biCXCIsXG5cdCAgICBcIjEzMDE4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzAyMDBcIjogXCLllJDlsbHluIJcIixcblx0ICAgIFwiMTMwMjAyXCI6IFwi6Lev5Y2X5Yy6XCIsXG5cdCAgICBcIjEzMDIwM1wiOiBcIui3r+WMl+WMulwiLFxuXHQgICAgXCIxMzAyMDRcIjogXCLlj6TlhrbljLpcIixcblx0ICAgIFwiMTMwMjA1XCI6IFwi5byA5bmz5Yy6XCIsXG5cdCAgICBcIjEzMDIwN1wiOiBcIuS4sOWNl+WMulwiLFxuXHQgICAgXCIxMzAyMDhcIjogXCLkuLDmtqbljLpcIixcblx0ICAgIFwiMTMwMjIzXCI6IFwi5rum5Y6/XCIsXG5cdCAgICBcIjEzMDIyNFwiOiBcIua7puWNl+WOv1wiLFxuXHQgICAgXCIxMzAyMjVcIjogXCLkuZDkuq3ljr9cIixcblx0ICAgIFwiMTMwMjI3XCI6IFwi6L+B6KW/5Y6/XCIsXG5cdCAgICBcIjEzMDIyOVwiOiBcIueOieeUsOWOv1wiLFxuXHQgICAgXCIxMzAyMzBcIjogXCLmm7nlpoPnlLjljLpcIixcblx0ICAgIFwiMTMwMjgxXCI6IFwi6YG15YyW5biCXCIsXG5cdCAgICBcIjEzMDI4M1wiOiBcIui/geWuieW4glwiLFxuXHQgICAgXCIxMzAyODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwMzAwXCI6IFwi56em55qH5bKb5biCXCIsXG5cdCAgICBcIjEzMDMwMlwiOiBcIua1t+a4r+WMulwiLFxuXHQgICAgXCIxMzAzMDNcIjogXCLlsbHmtbflhbPljLpcIixcblx0ICAgIFwiMTMwMzA0XCI6IFwi5YyX5oi05rKz5Yy6XCIsXG5cdCAgICBcIjEzMDMyMVwiOiBcIumdkum+mea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzAzMjJcIjogXCLmmIzpu47ljr9cIixcblx0ICAgIFwiMTMwMzIzXCI6IFwi5oqa5a6B5Y6/XCIsXG5cdCAgICBcIjEzMDMyNFwiOiBcIuWNoum+meWOv1wiLFxuXHQgICAgXCIxMzAzOThcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNDAwXCI6IFwi6YKv6YO45biCXCIsXG5cdCAgICBcIjEzMDQwMlwiOiBcIumCr+WxseWMulwiLFxuXHQgICAgXCIxMzA0MDNcIjogXCLkuJvlj7DljLpcIixcblx0ICAgIFwiMTMwNDA0XCI6IFwi5aSN5YW05Yy6XCIsXG5cdCAgICBcIjEzMDQwNlwiOiBcIuWzsOWzsOefv+WMulwiLFxuXHQgICAgXCIxMzA0MjFcIjogXCLpgq/pg7jljr9cIixcblx0ICAgIFwiMTMwNDIzXCI6IFwi5Li05ryz5Y6/XCIsXG5cdCAgICBcIjEzMDQyNFwiOiBcIuaIkOWuieWOv1wiLFxuXHQgICAgXCIxMzA0MjVcIjogXCLlpKflkI3ljr9cIixcblx0ICAgIFwiMTMwNDI2XCI6IFwi5raJ5Y6/XCIsXG5cdCAgICBcIjEzMDQyN1wiOiBcIuejgeWOv1wiLFxuXHQgICAgXCIxMzA0MjhcIjogXCLogqXkuaHljr9cIixcblx0ICAgIFwiMTMwNDI5XCI6IFwi5rC45bm05Y6/XCIsXG5cdCAgICBcIjEzMDQzMFwiOiBcIumCseWOv1wiLFxuXHQgICAgXCIxMzA0MzFcIjogXCLpuKHms73ljr9cIixcblx0ICAgIFwiMTMwNDMyXCI6IFwi5bm/5bmz5Y6/XCIsXG5cdCAgICBcIjEzMDQzM1wiOiBcIummhumZtuWOv1wiLFxuXHQgICAgXCIxMzA0MzRcIjogXCLprY/ljr9cIixcblx0ICAgIFwiMTMwNDM1XCI6IFwi5puy5ZGo5Y6/XCIsXG5cdCAgICBcIjEzMDQ4MVwiOiBcIuatpuWuieW4glwiLFxuXHQgICAgXCIxMzA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNTAwXCI6IFwi6YKi5Y+w5biCXCIsXG5cdCAgICBcIjEzMDUwMlwiOiBcIuahpeS4nOWMulwiLFxuXHQgICAgXCIxMzA1MDNcIjogXCLmoaXopb/ljLpcIixcblx0ICAgIFwiMTMwNTIxXCI6IFwi6YKi5Y+w5Y6/XCIsXG5cdCAgICBcIjEzMDUyMlwiOiBcIuS4tOWfjuWOv1wiLFxuXHQgICAgXCIxMzA1MjNcIjogXCLlhoXkuJjljr9cIixcblx0ICAgIFwiMTMwNTI0XCI6IFwi5p+P5Lmh5Y6/XCIsXG5cdCAgICBcIjEzMDUyNVwiOiBcIumahuWwp+WOv1wiLFxuXHQgICAgXCIxMzA1MjZcIjogXCLku7vljr9cIixcblx0ICAgIFwiMTMwNTI3XCI6IFwi5Y2X5ZKM5Y6/XCIsXG5cdCAgICBcIjEzMDUyOFwiOiBcIuWugeaZi+WOv1wiLFxuXHQgICAgXCIxMzA1MjlcIjogXCLlt6jpub/ljr9cIixcblx0ICAgIFwiMTMwNTMwXCI6IFwi5paw5rKz5Y6/XCIsXG5cdCAgICBcIjEzMDUzMVwiOiBcIuW5v+Wul+WOv1wiLFxuXHQgICAgXCIxMzA1MzJcIjogXCLlubPkuaHljr9cIixcblx0ICAgIFwiMTMwNTMzXCI6IFwi5aiB5Y6/XCIsXG5cdCAgICBcIjEzMDUzNFwiOiBcIua4heays+WOv1wiLFxuXHQgICAgXCIxMzA1MzVcIjogXCLkuLTopb/ljr9cIixcblx0ICAgIFwiMTMwNTgxXCI6IFwi5Y2X5a6r5biCXCIsXG5cdCAgICBcIjEzMDU4MlwiOiBcIuaymeays+W4glwiLFxuXHQgICAgXCIxMzA1ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNjAwXCI6IFwi5L+d5a6a5biCXCIsXG5cdCAgICBcIjEzMDYwMlwiOiBcIuaWsOW4guWMulwiLFxuXHQgICAgXCIxMzA2MDNcIjogXCLljJfluILljLpcIixcblx0ICAgIFwiMTMwNjA0XCI6IFwi5Y2X5biC5Yy6XCIsXG5cdCAgICBcIjEzMDYyMVwiOiBcIua7oeWfjuWOv1wiLFxuXHQgICAgXCIxMzA2MjJcIjogXCLmuIXoi5Hljr9cIixcblx0ICAgIFwiMTMwNjIzXCI6IFwi5rae5rC05Y6/XCIsXG5cdCAgICBcIjEzMDYyNFwiOiBcIumYnOW5s+WOv1wiLFxuXHQgICAgXCIxMzA2MjVcIjogXCLlvpDmsLTljr9cIixcblx0ICAgIFwiMTMwNjI2XCI6IFwi5a6a5YW05Y6/XCIsXG5cdCAgICBcIjEzMDYyN1wiOiBcIuWUkOWOv1wiLFxuXHQgICAgXCIxMzA2MjhcIjogXCLpq5jpmLPljr9cIixcblx0ICAgIFwiMTMwNjI5XCI6IFwi5a655Z+O5Y6/XCIsXG5cdCAgICBcIjEzMDYzMFwiOiBcIua2nua6kOWOv1wiLFxuXHQgICAgXCIxMzA2MzFcIjogXCLmnJvpg73ljr9cIixcblx0ICAgIFwiMTMwNjMyXCI6IFwi5a6J5paw5Y6/XCIsXG5cdCAgICBcIjEzMDYzM1wiOiBcIuaYk+WOv1wiLFxuXHQgICAgXCIxMzA2MzRcIjogXCLmm7LpmLPljr9cIixcblx0ICAgIFwiMTMwNjM1XCI6IFwi6KCh5Y6/XCIsXG5cdCAgICBcIjEzMDYzNlwiOiBcIumhuuW5s+WOv1wiLFxuXHQgICAgXCIxMzA2MzdcIjogXCLljZrph47ljr9cIixcblx0ICAgIFwiMTMwNjM4XCI6IFwi6ZuE5Y6/XCIsXG5cdCAgICBcIjEzMDY4MVwiOiBcIua2v+W3nuW4glwiLFxuXHQgICAgXCIxMzA2ODJcIjogXCLlrprlt57luIJcIixcblx0ICAgIFwiMTMwNjgzXCI6IFwi5a6J5Zu95biCXCIsXG5cdCAgICBcIjEzMDY4NFwiOiBcIumrmOeikeW6l+W4glwiLFxuXHQgICAgXCIxMzA2OTlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNzAwXCI6IFwi5byg5a625Y+j5biCXCIsXG5cdCAgICBcIjEzMDcwMlwiOiBcIuahpeS4nOWMulwiLFxuXHQgICAgXCIxMzA3MDNcIjogXCLmoaXopb/ljLpcIixcblx0ICAgIFwiMTMwNzA1XCI6IFwi5a6j5YyW5Yy6XCIsXG5cdCAgICBcIjEzMDcwNlwiOiBcIuS4i+iKseWbreWMulwiLFxuXHQgICAgXCIxMzA3MjFcIjogXCLlrqPljJbljr9cIixcblx0ICAgIFwiMTMwNzIyXCI6IFwi5byg5YyX5Y6/XCIsXG5cdCAgICBcIjEzMDcyM1wiOiBcIuW6t+S/neWOv1wiLFxuXHQgICAgXCIxMzA3MjRcIjogXCLmsr3mupDljr9cIixcblx0ICAgIFwiMTMwNzI1XCI6IFwi5bCa5LmJ5Y6/XCIsXG5cdCAgICBcIjEzMDcyNlwiOiBcIuiUmuWOv1wiLFxuXHQgICAgXCIxMzA3MjdcIjogXCLpmLPljp/ljr9cIixcblx0ICAgIFwiMTMwNzI4XCI6IFwi5oCA5a6J5Y6/XCIsXG5cdCAgICBcIjEzMDcyOVwiOiBcIuS4h+WFqOWOv1wiLFxuXHQgICAgXCIxMzA3MzBcIjogXCLmgIDmnaXljr9cIixcblx0ICAgIFwiMTMwNzMxXCI6IFwi5ra/6bm/5Y6/XCIsXG5cdCAgICBcIjEzMDczMlwiOiBcIui1pOWfjuWOv1wiLFxuXHQgICAgXCIxMzA3MzNcIjogXCLltIfnpLzljr9cIixcblx0ICAgIFwiMTMwNzM0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjEzMDgwMFwiOiBcIuaJv+W+t+W4glwiLFxuXHQgICAgXCIxMzA4MDJcIjogXCLlj4zmoaXljLpcIixcblx0ICAgIFwiMTMwODAzXCI6IFwi5Y+M5rum5Yy6XCIsXG5cdCAgICBcIjEzMDgwNFwiOiBcIum5sOaJi+iQpeWtkOefv+WMulwiLFxuXHQgICAgXCIxMzA4MjFcIjogXCLmib/lvrfljr9cIixcblx0ICAgIFwiMTMwODIyXCI6IFwi5YW06ZqG5Y6/XCIsXG5cdCAgICBcIjEzMDgyM1wiOiBcIuW5s+azieWOv1wiLFxuXHQgICAgXCIxMzA4MjRcIjogXCLmu6blubPljr9cIixcblx0ICAgIFwiMTMwODI1XCI6IFwi6ZqG5YyW5Y6/XCIsXG5cdCAgICBcIjEzMDgyNlwiOiBcIuS4sOWugea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzA4MjdcIjogXCLlrr3ln47mu6Hml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMTMwODI4XCI6IFwi5Zu05Zy65ruh5peP6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjEzMDgyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzA5MDBcIjogXCLmsqflt57luIJcIixcblx0ICAgIFwiMTMwOTAyXCI6IFwi5paw5Y2O5Yy6XCIsXG5cdCAgICBcIjEzMDkwM1wiOiBcIui/kOays+WMulwiLFxuXHQgICAgXCIxMzA5MjFcIjogXCLmsqfljr9cIixcblx0ICAgIFwiMTMwOTIyXCI6IFwi6Z2S5Y6/XCIsXG5cdCAgICBcIjEzMDkyM1wiOiBcIuS4nOWFieWOv1wiLFxuXHQgICAgXCIxMzA5MjRcIjogXCLmtbflhbTljr9cIixcblx0ICAgIFwiMTMwOTI1XCI6IFwi55uQ5bGx5Y6/XCIsXG5cdCAgICBcIjEzMDkyNlwiOiBcIuiCg+WugeWOv1wiLFxuXHQgICAgXCIxMzA5MjdcIjogXCLljZfnmq7ljr9cIixcblx0ICAgIFwiMTMwOTI4XCI6IFwi5ZC05qGl5Y6/XCIsXG5cdCAgICBcIjEzMDkyOVwiOiBcIueMruWOv1wiLFxuXHQgICAgXCIxMzA5MzBcIjogXCLlrZ/mnZHlm57ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMTMwOTgxXCI6IFwi5rOK5aS05biCXCIsXG5cdCAgICBcIjEzMDk4MlwiOiBcIuS7u+S4mOW4glwiLFxuXHQgICAgXCIxMzA5ODNcIjogXCLpu4TpqoXluIJcIixcblx0ICAgIFwiMTMwOTg0XCI6IFwi5rKz6Ze05biCXCIsXG5cdCAgICBcIjEzMDk4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzEwMDBcIjogXCLlu4rlnYrluIJcIixcblx0ICAgIFwiMTMxMDAyXCI6IFwi5a6J5qyh5Yy6XCIsXG5cdCAgICBcIjEzMTAwM1wiOiBcIuW5v+mYs+WMulwiLFxuXHQgICAgXCIxMzEwMjJcIjogXCLlm7rlronljr9cIixcblx0ICAgIFwiMTMxMDIzXCI6IFwi5rC45riF5Y6/XCIsXG5cdCAgICBcIjEzMTAyNFwiOiBcIummmeays+WOv1wiLFxuXHQgICAgXCIxMzEwMjVcIjogXCLlpKfln47ljr9cIixcblx0ICAgIFwiMTMxMDI2XCI6IFwi5paH5a6J5Y6/XCIsXG5cdCAgICBcIjEzMTAyOFwiOiBcIuWkp+WOguWbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzEwODFcIjogXCLpnLjlt57luIJcIixcblx0ICAgIFwiMTMxMDgyXCI6IFwi5LiJ5rKz5biCXCIsXG5cdCAgICBcIjEzMTA4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzExMDBcIjogXCLooaHmsLTluIJcIixcblx0ICAgIFwiMTMxMTAyXCI6IFwi5qGD5Z+O5Yy6XCIsXG5cdCAgICBcIjEzMTEyMVwiOiBcIuaeo+W8uuWOv1wiLFxuXHQgICAgXCIxMzExMjJcIjogXCLmrabpgpHljr9cIixcblx0ICAgIFwiMTMxMTIzXCI6IFwi5q2m5by65Y6/XCIsXG5cdCAgICBcIjEzMTEyNFwiOiBcIumltumYs+WOv1wiLFxuXHQgICAgXCIxMzExMjVcIjogXCLlronlubPljr9cIixcblx0ICAgIFwiMTMxMTI2XCI6IFwi5pWF5Z+O5Y6/XCIsXG5cdCAgICBcIjEzMTEyN1wiOiBcIuaZr+WOv1wiLFxuXHQgICAgXCIxMzExMjhcIjogXCLpmJzln47ljr9cIixcblx0ICAgIFwiMTMxMTgxXCI6IFwi5YaA5bee5biCXCIsXG5cdCAgICBcIjEzMTE4MlwiOiBcIua3seW3nuW4glwiLFxuXHQgICAgXCIxMzExODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwMDAwXCI6IFwi5bGx6KW/55yBXCIsXG5cdCAgICBcIjE0MDEwMFwiOiBcIuWkquWOn+W4glwiLFxuXHQgICAgXCIxNDAxMDVcIjogXCLlsI/lupfljLpcIixcblx0ICAgIFwiMTQwMTA2XCI6IFwi6L+O5rO95Yy6XCIsXG5cdCAgICBcIjE0MDEwN1wiOiBcIuadj+iKseWyreWMulwiLFxuXHQgICAgXCIxNDAxMDhcIjogXCLlsJbojYnlnarljLpcIixcblx0ICAgIFwiMTQwMTA5XCI6IFwi5LiH5p+P5p6X5Yy6XCIsXG5cdCAgICBcIjE0MDExMFwiOiBcIuaZi+a6kOWMulwiLFxuXHQgICAgXCIxNDAxMjFcIjogXCLmuIXlvpDljr9cIixcblx0ICAgIFwiMTQwMTIyXCI6IFwi6Ziz5puy5Y6/XCIsXG5cdCAgICBcIjE0MDEyM1wiOiBcIuWohOeDpuWOv1wiLFxuXHQgICAgXCIxNDAxODFcIjogXCLlj6TkuqTluIJcIixcblx0ICAgIFwiMTQwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MDIwMFwiOiBcIuWkp+WQjOW4glwiLFxuXHQgICAgXCIxNDAyMDJcIjogXCLln47ljLpcIixcblx0ICAgIFwiMTQwMjAzXCI6IFwi55+/5Yy6XCIsXG5cdCAgICBcIjE0MDIxMVwiOiBcIuWNl+mDiuWMulwiLFxuXHQgICAgXCIxNDAyMTJcIjogXCLmlrDojaPljLpcIixcblx0ICAgIFwiMTQwMjIxXCI6IFwi6Ziz6auY5Y6/XCIsXG5cdCAgICBcIjE0MDIyMlwiOiBcIuWkqemVh+WOv1wiLFxuXHQgICAgXCIxNDAyMjNcIjogXCLlub/ngbXljr9cIixcblx0ICAgIFwiMTQwMjI0XCI6IFwi54G15LiY5Y6/XCIsXG5cdCAgICBcIjE0MDIyNVwiOiBcIua1kea6kOWOv1wiLFxuXHQgICAgXCIxNDAyMjZcIjogXCLlt6bkupHljr9cIixcblx0ICAgIFwiMTQwMjI3XCI6IFwi5aSn5ZCM5Y6/XCIsXG5cdCAgICBcIjE0MDIyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDAzMDBcIjogXCLpmLPms4nluIJcIixcblx0ICAgIFwiMTQwMzAyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDMwM1wiOiBcIuefv+WMulwiLFxuXHQgICAgXCIxNDAzMTFcIjogXCLpg4rljLpcIixcblx0ICAgIFwiMTQwMzIxXCI6IFwi5bmz5a6a5Y6/XCIsXG5cdCAgICBcIjE0MDMyMlwiOiBcIuebguWOv1wiLFxuXHQgICAgXCIxNDAzMjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwNDAwXCI6IFwi6ZW/5rK75biCXCIsXG5cdCAgICBcIjE0MDQyMVwiOiBcIumVv+ayu+WOv1wiLFxuXHQgICAgXCIxNDA0MjNcIjogXCLopYTlnqPljr9cIixcblx0ICAgIFwiMTQwNDI0XCI6IFwi5bGv55WZ5Y6/XCIsXG5cdCAgICBcIjE0MDQyNVwiOiBcIuW5s+mhuuWOv1wiLFxuXHQgICAgXCIxNDA0MjZcIjogXCLpu47ln47ljr9cIixcblx0ICAgIFwiMTQwNDI3XCI6IFwi5aO25YWz5Y6/XCIsXG5cdCAgICBcIjE0MDQyOFwiOiBcIumVv+WtkOWOv1wiLFxuXHQgICAgXCIxNDA0MjlcIjogXCLmrabkuaHljr9cIixcblx0ICAgIFwiMTQwNDMwXCI6IFwi5rKB5Y6/XCIsXG5cdCAgICBcIjE0MDQzMVwiOiBcIuaygea6kOWOv1wiLFxuXHQgICAgXCIxNDA0ODFcIjogXCLmvZ7ln47luIJcIixcblx0ICAgIFwiMTQwNDgyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDQ4M1wiOiBcIumDiuWMulwiLFxuXHQgICAgXCIxNDA0ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwNTAwXCI6IFwi5pmL5Z+O5biCXCIsXG5cdCAgICBcIjE0MDUwMlwiOiBcIuWfjuWMulwiLFxuXHQgICAgXCIxNDA1MjFcIjogXCLmsoHmsLTljr9cIixcblx0ICAgIFwiMTQwNTIyXCI6IFwi6Ziz5Z+O5Y6/XCIsXG5cdCAgICBcIjE0MDUyNFwiOiBcIumZteW3neWOv1wiLFxuXHQgICAgXCIxNDA1MjVcIjogXCLms73lt57ljr9cIixcblx0ICAgIFwiMTQwNTgxXCI6IFwi6auY5bmz5biCXCIsXG5cdCAgICBcIjE0MDU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA2MDBcIjogXCLmnJTlt57luIJcIixcblx0ICAgIFwiMTQwNjAyXCI6IFwi5pyU5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDYwM1wiOiBcIuW5s+mygeWMulwiLFxuXHQgICAgXCIxNDA2MjFcIjogXCLlsbHpmLTljr9cIixcblx0ICAgIFwiMTQwNjIyXCI6IFwi5bqU5Y6/XCIsXG5cdCAgICBcIjE0MDYyM1wiOiBcIuWPs+eOieWOv1wiLFxuXHQgICAgXCIxNDA2MjRcIjogXCLmgIDku4Hljr9cIixcblx0ICAgIFwiMTQwNjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MDcwMFwiOiBcIuaZi+S4reW4glwiLFxuXHQgICAgXCIxNDA3MDJcIjogXCLmpobmrKHljLpcIixcblx0ICAgIFwiMTQwNzIxXCI6IFwi5qaG56S+5Y6/XCIsXG5cdCAgICBcIjE0MDcyMlwiOiBcIuW3puadg+WOv1wiLFxuXHQgICAgXCIxNDA3MjNcIjogXCLlkozpobrljr9cIixcblx0ICAgIFwiMTQwNzI0XCI6IFwi5piU6Ziz5Y6/XCIsXG5cdCAgICBcIjE0MDcyNVwiOiBcIuWvv+mYs+WOv1wiLFxuXHQgICAgXCIxNDA3MjZcIjogXCLlpKrosLfljr9cIixcblx0ICAgIFwiMTQwNzI3XCI6IFwi56WB5Y6/XCIsXG5cdCAgICBcIjE0MDcyOFwiOiBcIuW5s+mBpeWOv1wiLFxuXHQgICAgXCIxNDA3MjlcIjogXCLngbXnn7Pljr9cIixcblx0ICAgIFwiMTQwNzgxXCI6IFwi5LuL5LyR5biCXCIsXG5cdCAgICBcIjE0MDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA4MDBcIjogXCLov5Dln47luIJcIixcblx0ICAgIFwiMTQwODAyXCI6IFwi55uQ5rmW5Yy6XCIsXG5cdCAgICBcIjE0MDgyMVwiOiBcIuS4tOeMl+WOv1wiLFxuXHQgICAgXCIxNDA4MjJcIjogXCLkuIfojaPljr9cIixcblx0ICAgIFwiMTQwODIzXCI6IFwi6Ze75Zac5Y6/XCIsXG5cdCAgICBcIjE0MDgyNFwiOiBcIueot+WxseWOv1wiLFxuXHQgICAgXCIxNDA4MjVcIjogXCLmlrDnu5vljr9cIixcblx0ICAgIFwiMTQwODI2XCI6IFwi57ub5Y6/XCIsXG5cdCAgICBcIjE0MDgyN1wiOiBcIuWeo+absuWOv1wiLFxuXHQgICAgXCIxNDA4MjhcIjogXCLlpI/ljr9cIixcblx0ICAgIFwiMTQwODI5XCI6IFwi5bmz6ZmG5Y6/XCIsXG5cdCAgICBcIjE0MDgzMFwiOiBcIuiKruWfjuWOv1wiLFxuXHQgICAgXCIxNDA4ODFcIjogXCLmsLjmtY7luIJcIixcblx0ICAgIFwiMTQwODgyXCI6IFwi5rKz5rSl5biCXCIsXG5cdCAgICBcIjE0MDg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA5MDBcIjogXCLlv7vlt57luIJcIixcblx0ICAgIFwiMTQwOTAyXCI6IFwi5b+75bqc5Yy6XCIsXG5cdCAgICBcIjE0MDkyMVwiOiBcIuWumuilhOWOv1wiLFxuXHQgICAgXCIxNDA5MjJcIjogXCLkupTlj7Dljr9cIixcblx0ICAgIFwiMTQwOTIzXCI6IFwi5Luj5Y6/XCIsXG5cdCAgICBcIjE0MDkyNFwiOiBcIue5geWzmeWOv1wiLFxuXHQgICAgXCIxNDA5MjVcIjogXCLlroHmrabljr9cIixcblx0ICAgIFwiMTQwOTI2XCI6IFwi6Z2Z5LmQ5Y6/XCIsXG5cdCAgICBcIjE0MDkyN1wiOiBcIuelnuaxoOWOv1wiLFxuXHQgICAgXCIxNDA5MjhcIjogXCLkupTlr6jljr9cIixcblx0ICAgIFwiMTQwOTI5XCI6IFwi5bKi5bKa5Y6/XCIsXG5cdCAgICBcIjE0MDkzMFwiOiBcIuays+absuWOv1wiLFxuXHQgICAgXCIxNDA5MzFcIjogXCLkv53lvrfljr9cIixcblx0ICAgIFwiMTQwOTMyXCI6IFwi5YGP5YWz5Y6/XCIsXG5cdCAgICBcIjE0MDk4MVwiOiBcIuWOn+W5s+W4glwiLFxuXHQgICAgXCIxNDA5ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQxMDAwXCI6IFwi5Li05rG+5biCXCIsXG5cdCAgICBcIjE0MTAwMlwiOiBcIuWwp+mDveWMulwiLFxuXHQgICAgXCIxNDEwMjFcIjogXCLmm7LmsoPljr9cIixcblx0ICAgIFwiMTQxMDIyXCI6IFwi57+85Z+O5Y6/XCIsXG5cdCAgICBcIjE0MTAyM1wiOiBcIuilhOaxvuWOv1wiLFxuXHQgICAgXCIxNDEwMjRcIjogXCLmtKrmtJ7ljr9cIixcblx0ICAgIFwiMTQxMDI1XCI6IFwi5Y+k5Y6/XCIsXG5cdCAgICBcIjE0MTAyNlwiOiBcIuWuieazveWOv1wiLFxuXHQgICAgXCIxNDEwMjdcIjogXCLmta7lsbHljr9cIixcblx0ICAgIFwiMTQxMDI4XCI6IFwi5ZCJ5Y6/XCIsXG5cdCAgICBcIjE0MTAyOVwiOiBcIuS5oeWugeWOv1wiLFxuXHQgICAgXCIxNDEwMzBcIjogXCLlpKflroHljr9cIixcblx0ICAgIFwiMTQxMDMxXCI6IFwi6Zqw5Y6/XCIsXG5cdCAgICBcIjE0MTAzMlwiOiBcIuawuOWSjOWOv1wiLFxuXHQgICAgXCIxNDEwMzNcIjogXCLokrLljr9cIixcblx0ICAgIFwiMTQxMDM0XCI6IFwi5rG+6KW/5Y6/XCIsXG5cdCAgICBcIjE0MTA4MVwiOiBcIuS+r+mprOW4glwiLFxuXHQgICAgXCIxNDEwODJcIjogXCLpnI3lt57luIJcIixcblx0ICAgIFwiMTQxMDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MTEwMFwiOiBcIuWQleaigeW4glwiLFxuXHQgICAgXCIxNDExMDJcIjogXCLnprvnn7PljLpcIixcblx0ICAgIFwiMTQxMTIxXCI6IFwi5paH5rC05Y6/XCIsXG5cdCAgICBcIjE0MTEyMlwiOiBcIuS6pOWfjuWOv1wiLFxuXHQgICAgXCIxNDExMjNcIjogXCLlhbTljr9cIixcblx0ICAgIFwiMTQxMTI0XCI6IFwi5Li05Y6/XCIsXG5cdCAgICBcIjE0MTEyNVwiOiBcIuafs+ael+WOv1wiLFxuXHQgICAgXCIxNDExMjZcIjogXCLnn7Pmpbzljr9cIixcblx0ICAgIFwiMTQxMTI3XCI6IFwi5bKa5Y6/XCIsXG5cdCAgICBcIjE0MTEyOFwiOiBcIuaWueWxseWOv1wiLFxuXHQgICAgXCIxNDExMjlcIjogXCLkuK3pmLPljr9cIixcblx0ICAgIFwiMTQxMTMwXCI6IFwi5Lqk5Y+j5Y6/XCIsXG5cdCAgICBcIjE0MTE4MVwiOiBcIuWtneS5ieW4glwiLFxuXHQgICAgXCIxNDExODJcIjogXCLmsb7pmLPluIJcIixcblx0ICAgIFwiMTQxMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDAwMFwiOiBcIuWGheiSmeWPpOiHquayu+WMulwiLFxuXHQgICAgXCIxNTAxMDBcIjogXCLlkbzlkozmtannibnluIJcIixcblx0ICAgIFwiMTUwMTAyXCI6IFwi5paw5Z+O5Yy6XCIsXG5cdCAgICBcIjE1MDEwM1wiOiBcIuWbnuawkeWMulwiLFxuXHQgICAgXCIxNTAxMDRcIjogXCLnjonms4nljLpcIixcblx0ICAgIFwiMTUwMTA1XCI6IFwi6LWb572V5Yy6XCIsXG5cdCAgICBcIjE1MDEyMVwiOiBcIuWcn+m7mOeJueW3puaXl1wiLFxuXHQgICAgXCIxNTAxMjJcIjogXCLmiZjlhYvmiZjljr9cIixcblx0ICAgIFwiMTUwMTIzXCI6IFwi5ZKM5p6X5qC85bCU5Y6/XCIsXG5cdCAgICBcIjE1MDEyNFwiOiBcIua4heawtOays+WOv1wiLFxuXHQgICAgXCIxNTAxMjVcIjogXCLmrablt53ljr9cIixcblx0ICAgIFwiMTUwMTI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDIwMFwiOiBcIuWMheWktOW4glwiLFxuXHQgICAgXCIxNTAyMDJcIjogXCLkuJzmsrPljLpcIixcblx0ICAgIFwiMTUwMjAzXCI6IFwi5piG6YO95LuR5Yy6XCIsXG5cdCAgICBcIjE1MDIwNFwiOiBcIumdkuWxseWMulwiLFxuXHQgICAgXCIxNTAyMDVcIjogXCLnn7Pmi5DljLpcIixcblx0ICAgIFwiMTUwMjA2XCI6IFwi55m95LqR6YSC5Y2a55+/5Yy6XCIsXG5cdCAgICBcIjE1MDIwN1wiOiBcIuS5neWOn+WMulwiLFxuXHQgICAgXCIxNTAyMjFcIjogXCLlnJ/pu5jnibnlj7Pml5dcIixcblx0ICAgIFwiMTUwMjIyXCI6IFwi5Zu66Ziz5Y6/XCIsXG5cdCAgICBcIjE1MDIyM1wiOiBcIui+vuWwlOe9leiMguaYjuWuieiBlOWQiOaXl1wiLFxuXHQgICAgXCIxNTAyMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUwMzAwXCI6IFwi5LmM5rW35biCXCIsXG5cdCAgICBcIjE1MDMwMlwiOiBcIua1t+WLg+a5vuWMulwiLFxuXHQgICAgXCIxNTAzMDNcIjogXCLmtbfljZfljLpcIixcblx0ICAgIFwiMTUwMzA0XCI6IFwi5LmM6L6+5Yy6XCIsXG5cdCAgICBcIjE1MDMwNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTA0MDBcIjogXCLotaTls7DluIJcIixcblx0ICAgIFwiMTUwNDAyXCI6IFwi57qi5bGx5Yy6XCIsXG5cdCAgICBcIjE1MDQwM1wiOiBcIuWFg+WuneWxseWMulwiLFxuXHQgICAgXCIxNTA0MDRcIjogXCLmnb7lsbHljLpcIixcblx0ICAgIFwiMTUwNDIxXCI6IFwi6Zi/6bKB56eR5bCU5rKB5peXXCIsXG5cdCAgICBcIjE1MDQyMlwiOiBcIuW3tOael+W3puaXl1wiLFxuXHQgICAgXCIxNTA0MjNcIjogXCLlt7Tmnpflj7Pml5dcIixcblx0ICAgIFwiMTUwNDI0XCI6IFwi5p6X6KW/5Y6/XCIsXG5cdCAgICBcIjE1MDQyNVwiOiBcIuWFi+S7gOWFi+iFvuaXl1wiLFxuXHQgICAgXCIxNTA0MjZcIjogXCLnv4HniZvnibnml5dcIixcblx0ICAgIFwiMTUwNDI4XCI6IFwi5ZaA5ZaH5rKB5peXXCIsXG5cdCAgICBcIjE1MDQyOVwiOiBcIuWugeWfjuWOv1wiLFxuXHQgICAgXCIxNTA0MzBcIjogXCLmlZbmsYnml5dcIixcblx0ICAgIFwiMTUwNDMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDUwMFwiOiBcIumAmui+veW4glwiLFxuXHQgICAgXCIxNTA1MDJcIjogXCLnp5HlsJTmsoHljLpcIixcblx0ICAgIFwiMTUwNTIxXCI6IFwi56eR5bCU5rKB5bem57+85Lit5peXXCIsXG5cdCAgICBcIjE1MDUyMlwiOiBcIuenkeWwlOaygeW3pue/vOWQjuaXl1wiLFxuXHQgICAgXCIxNTA1MjNcIjogXCLlvIDpsoHljr9cIixcblx0ICAgIFwiMTUwNTI0XCI6IFwi5bqT5Lym5peXXCIsXG5cdCAgICBcIjE1MDUyNVwiOiBcIuWliOabvOaXl1wiLFxuXHQgICAgXCIxNTA1MjZcIjogXCLmiY7psoHnibnml5dcIixcblx0ICAgIFwiMTUwNTgxXCI6IFwi6ZyN5p6X6YOt5YuS5biCXCIsXG5cdCAgICBcIjE1MDU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTA2MDBcIjogXCLphILlsJTlpJrmlq/luIJcIixcblx0ICAgIFwiMTUwNjAyXCI6IFwi5Lic6IOc5Yy6XCIsXG5cdCAgICBcIjE1MDYyMVwiOiBcIui+vuaLieeJueaXl1wiLFxuXHQgICAgXCIxNTA2MjJcIjogXCLlh4bmoLzlsJTml5dcIixcblx0ICAgIFwiMTUwNjIzXCI6IFwi6YSC5omY5YWL5YmN5peXXCIsXG5cdCAgICBcIjE1MDYyNFwiOiBcIumEguaJmOWFi+aXl1wiLFxuXHQgICAgXCIxNTA2MjVcIjogXCLmna3plKbml5dcIixcblx0ICAgIFwiMTUwNjI2XCI6IFwi5LmM5a6h5peXXCIsXG5cdCAgICBcIjE1MDYyN1wiOiBcIuS8iumHkemcjea0m+aXl1wiLFxuXHQgICAgXCIxNTA2MjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUwNzAwXCI6IFwi5ZG85Lym6LSd5bCU5biCXCIsXG5cdCAgICBcIjE1MDcwMlwiOiBcIua1t+aLieWwlOWMulwiLFxuXHQgICAgXCIxNTA3MDNcIjogXCLmiY7otYnor7rlsJTljLpcIixcblx0ICAgIFwiMTUwNzIxXCI6IFwi6Zi/6I2j5peXXCIsXG5cdCAgICBcIjE1MDcyMlwiOiBcIuiOq+WKm+i+vueTpui+vuaWoeWwlOaXj+iHquayu+aXl1wiLFxuXHQgICAgXCIxNTA3MjNcIjogXCLphILkvKbmmKXoh6rmsrvml5dcIixcblx0ICAgIFwiMTUwNzI0XCI6IFwi6YSC5rip5YWL5peP6Ieq5rK75peXXCIsXG5cdCAgICBcIjE1MDcyNVwiOiBcIumZiOW3tOWwlOiZjuaXl1wiLFxuXHQgICAgXCIxNTA3MjZcIjogXCLmlrDlt7TlsJTomY7lt6bml5dcIixcblx0ICAgIFwiMTUwNzI3XCI6IFwi5paw5be05bCU6JmO5Y+z5peXXCIsXG5cdCAgICBcIjE1MDc4MVwiOiBcIua7oea0sumHjOW4glwiLFxuXHQgICAgXCIxNTA3ODJcIjogXCLniZnlhYvnn7PluIJcIixcblx0ICAgIFwiMTUwNzgzXCI6IFwi5omO5YWw5bGv5biCXCIsXG5cdCAgICBcIjE1MDc4NFwiOiBcIumineWwlOWPpOe6s+W4glwiLFxuXHQgICAgXCIxNTA3ODVcIjogXCLmoLnmsrPluIJcIixcblx0ICAgIFwiMTUwNzg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDgwMFwiOiBcIuW3tOW9pua3luWwlOW4glwiLFxuXHQgICAgXCIxNTA4MDJcIjogXCLkuLTmsrPljLpcIixcblx0ICAgIFwiMTUwODIxXCI6IFwi5LqU5Y6f5Y6/XCIsXG5cdCAgICBcIjE1MDgyMlwiOiBcIuejtOWPo+WOv1wiLFxuXHQgICAgXCIxNTA4MjNcIjogXCLkuYzmi4nnibnliY3ml5dcIixcblx0ICAgIFwiMTUwODI0XCI6IFwi5LmM5ouJ54m55Lit5peXXCIsXG5cdCAgICBcIjE1MDgyNVwiOiBcIuS5jOaLieeJueWQjuaXl1wiLFxuXHQgICAgXCIxNTA4MjZcIjogXCLmna3plKblkI7ml5dcIixcblx0ICAgIFwiMTUwODI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDkwMFwiOiBcIuS5jOWFsOWvn+W4g+W4glwiLFxuXHQgICAgXCIxNTA5MDJcIjogXCLpm4blroHljLpcIixcblx0ICAgIFwiMTUwOTIxXCI6IFwi5Y2T6LWE5Y6/XCIsXG5cdCAgICBcIjE1MDkyMlwiOiBcIuWMluW+t+WOv1wiLFxuXHQgICAgXCIxNTA5MjNcIjogXCLllYbpg73ljr9cIixcblx0ICAgIFwiMTUwOTI0XCI6IFwi5YW05ZKM5Y6/XCIsXG5cdCAgICBcIjE1MDkyNVwiOiBcIuWHieWfjuWOv1wiLFxuXHQgICAgXCIxNTA5MjZcIjogXCLlr5/lk4jlsJTlj7Pnv7zliY3ml5dcIixcblx0ICAgIFwiMTUwOTI3XCI6IFwi5a+f5ZOI5bCU5Y+z57+85Lit5peXXCIsXG5cdCAgICBcIjE1MDkyOFwiOiBcIuWvn+WTiOWwlOWPs+e/vOWQjuaXl1wiLFxuXHQgICAgXCIxNTA5MjlcIjogXCLlm5vlrZDnjovml5dcIixcblx0ICAgIFwiMTUwOTgxXCI6IFwi5Liw6ZWH5biCXCIsXG5cdCAgICBcIjE1MDk4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTIyMDBcIjogXCLlhbTlronnm59cIixcblx0ICAgIFwiMTUyMjAxXCI6IFwi5LmM5YWw5rWp54m55biCXCIsXG5cdCAgICBcIjE1MjIwMlwiOiBcIumYv+WwlOWxseW4glwiLFxuXHQgICAgXCIxNTIyMjFcIjogXCLnp5HlsJTmsoHlj7Pnv7zliY3ml5dcIixcblx0ICAgIFwiMTUyMjIyXCI6IFwi56eR5bCU5rKB5Y+z57+85Lit5peXXCIsXG5cdCAgICBcIjE1MjIyM1wiOiBcIuaJjui1ieeJueaXl1wiLFxuXHQgICAgXCIxNTIyMjRcIjogXCLnqoHms4nljr9cIixcblx0ICAgIFwiMTUyMjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MjUwMFwiOiBcIumUoeael+mDreWLkuebn1wiLFxuXHQgICAgXCIxNTI1MDFcIjogXCLkuozov57mtannibnluIJcIixcblx0ICAgIFwiMTUyNTAyXCI6IFwi6ZSh5p6X5rWp54m55biCXCIsXG5cdCAgICBcIjE1MjUyMlwiOiBcIumYv+W3tOWYjuaXl1wiLFxuXHQgICAgXCIxNTI1MjNcIjogXCLoi4/lsLznibnlt6bml5dcIixcblx0ICAgIFwiMTUyNTI0XCI6IFwi6IuP5bC854m55Y+z5peXXCIsXG5cdCAgICBcIjE1MjUyNVwiOiBcIuS4nOS5jOePoOephuaygeaXl1wiLFxuXHQgICAgXCIxNTI1MjZcIjogXCLopb/kuYznj6DnqYbmsoHml5dcIixcblx0ICAgIFwiMTUyNTI3XCI6IFwi5aSq5LuG5a+65peXXCIsXG5cdCAgICBcIjE1MjUyOFwiOiBcIumVtum7hOaXl1wiLFxuXHQgICAgXCIxNTI1MjlcIjogXCLmraPplbbnmb3ml5dcIixcblx0ICAgIFwiMTUyNTMwXCI6IFwi5q2j6JOd5peXXCIsXG5cdCAgICBcIjE1MjUzMVwiOiBcIuWkmuS8puWOv1wiLFxuXHQgICAgXCIxNTI1MzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUyOTAwXCI6IFwi6Zi/5ouJ5ZaE55ufXCIsXG5cdCAgICBcIjE1MjkyMVwiOiBcIumYv+aLieWWhOW3puaXl1wiLFxuXHQgICAgXCIxNTI5MjJcIjogXCLpmL/mi4nlloTlj7Pml5dcIixcblx0ICAgIFwiMTUyOTIzXCI6IFwi6aKd5rWO57qz5peXXCIsXG5cdCAgICBcIjE1MjkyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTAwMDBcIjogXCLovr3lroHnnIFcIixcblx0ICAgIFwiMjEwMTAwXCI6IFwi5rKI6Ziz5biCXCIsXG5cdCAgICBcIjIxMDEwMlwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCIyMTAxMDNcIjogXCLmsojmsrPljLpcIixcblx0ICAgIFwiMjEwMTA0XCI6IFwi5aSn5Lic5Yy6XCIsXG5cdCAgICBcIjIxMDEwNVwiOiBcIueah+WnkeWMulwiLFxuXHQgICAgXCIyMTAxMDZcIjogXCLpk4Hopb/ljLpcIixcblx0ICAgIFwiMjEwMTExXCI6IFwi6IuP5a625bGv5Yy6XCIsXG5cdCAgICBcIjIxMDExMlwiOiBcIuS4nOmZteWMulwiLFxuXHQgICAgXCIyMTAxMTNcIjogXCLmlrDln47lrZDljLpcIixcblx0ICAgIFwiMjEwMTE0XCI6IFwi5LqO5rSq5Yy6XCIsXG5cdCAgICBcIjIxMDEyMlwiOiBcIui+veS4reWOv1wiLFxuXHQgICAgXCIyMTAxMjNcIjogXCLlurflubPljr9cIixcblx0ICAgIFwiMjEwMTI0XCI6IFwi5rOV5bqT5Y6/XCIsXG5cdCAgICBcIjIxMDE4MVwiOiBcIuaWsOawkeW4glwiLFxuXHQgICAgXCIyMTAxODRcIjogXCLmsojljJfmlrDljLpcIixcblx0ICAgIFwiMjEwMTg1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDIwMFwiOiBcIuWkp+i/nuW4glwiLFxuXHQgICAgXCIyMTAyMDJcIjogXCLkuK3lsbHljLpcIixcblx0ICAgIFwiMjEwMjAzXCI6IFwi6KW/5bKX5Yy6XCIsXG5cdCAgICBcIjIxMDIwNFwiOiBcIuaymeays+WPo+WMulwiLFxuXHQgICAgXCIyMTAyMTFcIjogXCLnlJjkupXlrZDljLpcIixcblx0ICAgIFwiMjEwMjEyXCI6IFwi5peF6aG65Y+j5Yy6XCIsXG5cdCAgICBcIjIxMDIxM1wiOiBcIumHkeW3nuWMulwiLFxuXHQgICAgXCIyMTAyMjRcIjogXCLplb/mtbfljr9cIixcblx0ICAgIFwiMjEwMjgxXCI6IFwi55Om5oi/5bqX5biCXCIsXG5cdCAgICBcIjIxMDI4MlwiOiBcIuaZruWFsOW6l+W4glwiLFxuXHQgICAgXCIyMTAyODNcIjogXCLluoTmsrPluIJcIixcblx0ICAgIFwiMjEwMjk4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDMwMFwiOiBcIumejeWxseW4glwiLFxuXHQgICAgXCIyMTAzMDJcIjogXCLpk4HkuJzljLpcIixcblx0ICAgIFwiMjEwMzAzXCI6IFwi6ZOB6KW/5Yy6XCIsXG5cdCAgICBcIjIxMDMwNFwiOiBcIueri+WxseWMulwiLFxuXHQgICAgXCIyMTAzMTFcIjogXCLljYPlsbHljLpcIixcblx0ICAgIFwiMjEwMzIxXCI6IFwi5Y+w5a6J5Y6/XCIsXG5cdCAgICBcIjIxMDMyM1wiOiBcIuWyq+Wyqea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTAzODFcIjogXCLmtbfln47luIJcIixcblx0ICAgIFwiMjEwMzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDQwMFwiOiBcIuaKmumhuuW4glwiLFxuXHQgICAgXCIyMTA0MDJcIjogXCLmlrDmiprljLpcIixcblx0ICAgIFwiMjEwNDAzXCI6IFwi5Lic5rSy5Yy6XCIsXG5cdCAgICBcIjIxMDQwNFwiOiBcIuacm+iKseWMulwiLFxuXHQgICAgXCIyMTA0MTFcIjogXCLpobrln47ljLpcIixcblx0ICAgIFwiMjEwNDIxXCI6IFwi5oqa6aG65Y6/XCIsXG5cdCAgICBcIjIxMDQyMlwiOiBcIuaWsOWuvua7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA0MjNcIjogXCLmuIXljp/mu6Hml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMjEwNDI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDUwMFwiOiBcIuacrOa6quW4glwiLFxuXHQgICAgXCIyMTA1MDJcIjogXCLlubPlsbHljLpcIixcblx0ICAgIFwiMjEwNTAzXCI6IFwi5rqq5rmW5Yy6XCIsXG5cdCAgICBcIjIxMDUwNFwiOiBcIuaYjuWxseWMulwiLFxuXHQgICAgXCIyMTA1MDVcIjogXCLljZfoiqzljLpcIixcblx0ICAgIFwiMjEwNTIxXCI6IFwi5pys5rqq5ruh5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIxMDUyMlwiOiBcIuahk+S7gea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA1MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjEwNjAwXCI6IFwi5Li55Lic5biCXCIsXG5cdCAgICBcIjIxMDYwMlwiOiBcIuWFg+WuneWMulwiLFxuXHQgICAgXCIyMTA2MDNcIjogXCLmjK/lhbTljLpcIixcblx0ICAgIFwiMjEwNjA0XCI6IFwi5oyv5a6J5Yy6XCIsXG5cdCAgICBcIjIxMDYyNFwiOiBcIuWuveeUuOa7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA2ODFcIjogXCLkuJzmuK/luIJcIixcblx0ICAgIFwiMjEwNjgyXCI6IFwi5Yek5Z+O5biCXCIsXG5cdCAgICBcIjIxMDY4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTA3MDBcIjogXCLplKblt57luIJcIixcblx0ICAgIFwiMjEwNzAyXCI6IFwi5Y+k5aGU5Yy6XCIsXG5cdCAgICBcIjIxMDcwM1wiOiBcIuWHjOays+WMulwiLFxuXHQgICAgXCIyMTA3MTFcIjogXCLlpKrlkozljLpcIixcblx0ICAgIFwiMjEwNzI2XCI6IFwi6buR5bGx5Y6/XCIsXG5cdCAgICBcIjIxMDcyN1wiOiBcIuS5ieWOv1wiLFxuXHQgICAgXCIyMTA3ODFcIjogXCLlh4zmtbfluIJcIixcblx0ICAgIFwiMjEwNzgyXCI6IFwi5YyX6ZWH5biCXCIsXG5cdCAgICBcIjIxMDc4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTA4MDBcIjogXCLokKXlj6PluIJcIixcblx0ICAgIFwiMjEwODAyXCI6IFwi56uZ5YmN5Yy6XCIsXG5cdCAgICBcIjIxMDgwM1wiOiBcIuilv+W4guWMulwiLFxuXHQgICAgXCIyMTA4MDRcIjogXCLpsoXpsbzlnIjljLpcIixcblx0ICAgIFwiMjEwODExXCI6IFwi6ICB6L655Yy6XCIsXG5cdCAgICBcIjIxMDg4MVwiOiBcIuebluW3nuW4glwiLFxuXHQgICAgXCIyMTA4ODJcIjogXCLlpKfnn7PmoaXluIJcIixcblx0ICAgIFwiMjEwODgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDkwMFwiOiBcIumYnOaWsOW4glwiLFxuXHQgICAgXCIyMTA5MDJcIjogXCLmtbflt57ljLpcIixcblx0ICAgIFwiMjEwOTAzXCI6IFwi5paw6YKx5Yy6XCIsXG5cdCAgICBcIjIxMDkwNFwiOiBcIuWkquW5s+WMulwiLFxuXHQgICAgXCIyMTA5MDVcIjogXCLmuIXmsrPpl6jljLpcIixcblx0ICAgIFwiMjEwOTExXCI6IFwi57uG5rKz5Yy6XCIsXG5cdCAgICBcIjIxMDkyMVwiOiBcIumYnOaWsOiSmeWPpOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA5MjJcIjogXCLlvbDmrabljr9cIixcblx0ICAgIFwiMjEwOTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTAwMFwiOiBcIui+vemYs+W4glwiLFxuXHQgICAgXCIyMTEwMDJcIjogXCLnmb3loZTljLpcIixcblx0ICAgIFwiMjExMDAzXCI6IFwi5paH5Zyj5Yy6XCIsXG5cdCAgICBcIjIxMTAwNFwiOiBcIuWuj+S8n+WMulwiLFxuXHQgICAgXCIyMTEwMDVcIjogXCLlvJPplb/lsq3ljLpcIixcblx0ICAgIFwiMjExMDExXCI6IFwi5aSq5a2Q5rKz5Yy6XCIsXG5cdCAgICBcIjIxMTAyMVwiOiBcIui+vemYs+WOv1wiLFxuXHQgICAgXCIyMTEwODFcIjogXCLnga/loZTluIJcIixcblx0ICAgIFwiMjExMDgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTEwMFwiOiBcIuebmOmUpuW4glwiLFxuXHQgICAgXCIyMTExMDJcIjogXCLlj4zlj7DlrZDljLpcIixcblx0ICAgIFwiMjExMTAzXCI6IFwi5YW06ZqG5Y+w5Yy6XCIsXG5cdCAgICBcIjIxMTEyMVwiOiBcIuWkp+a0vOWOv1wiLFxuXHQgICAgXCIyMTExMjJcIjogXCLnm5jlsbHljr9cIixcblx0ICAgIFwiMjExMTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTIwMFwiOiBcIumTgeWyreW4glwiLFxuXHQgICAgXCIyMTEyMDJcIjogXCLpk7blt57ljLpcIixcblx0ICAgIFwiMjExMjA0XCI6IFwi5riF5rKz5Yy6XCIsXG5cdCAgICBcIjIxMTIyMVwiOiBcIumTgeWyreWOv1wiLFxuXHQgICAgXCIyMTEyMjNcIjogXCLopb/kuLDljr9cIixcblx0ICAgIFwiMjExMjI0XCI6IFwi5piM5Zu+5Y6/XCIsXG5cdCAgICBcIjIxMTI4MVwiOiBcIuiwg+WFteWxseW4glwiLFxuXHQgICAgXCIyMTEyODJcIjogXCLlvIDljp/luIJcIixcblx0ICAgIFwiMjExMjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTMwMFwiOiBcIuacnemYs+W4glwiLFxuXHQgICAgXCIyMTEzMDJcIjogXCLlj4zloZTljLpcIixcblx0ICAgIFwiMjExMzAzXCI6IFwi6b6Z5Z+O5Yy6XCIsXG5cdCAgICBcIjIxMTMyMVwiOiBcIuacnemYs+WOv1wiLFxuXHQgICAgXCIyMTEzMjJcIjogXCLlu7rlubPljr9cIixcblx0ICAgIFwiMjExMzI0XCI6IFwi5ZaA5ZaH5rKB5bem57+86JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIxMTM4MVwiOiBcIuWMl+elqOW4glwiLFxuXHQgICAgXCIyMTEzODJcIjogXCLlh4zmupDluIJcIixcblx0ICAgIFwiMjExMzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTQwMFwiOiBcIuiRq+iKpuWym+W4glwiLFxuXHQgICAgXCIyMTE0MDJcIjogXCLov57lsbHljLpcIixcblx0ICAgIFwiMjExNDAzXCI6IFwi6b6Z5riv5Yy6XCIsXG5cdCAgICBcIjIxMTQwNFwiOiBcIuWNl+elqOWMulwiLFxuXHQgICAgXCIyMTE0MjFcIjogXCLnu6XkuK3ljr9cIixcblx0ICAgIFwiMjExNDIyXCI6IFwi5bu65piM5Y6/XCIsXG5cdCAgICBcIjIxMTQ4MVwiOiBcIuWFtOWfjuW4glwiLFxuXHQgICAgXCIyMTE0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIwMDAwXCI6IFwi5ZCJ5p6X55yBXCIsXG5cdCAgICBcIjIyMDEwMFwiOiBcIumVv+aYpeW4glwiLFxuXHQgICAgXCIyMjAxMDJcIjogXCLljZflhbPljLpcIixcblx0ICAgIFwiMjIwMTAzXCI6IFwi5a695Z+O5Yy6XCIsXG5cdCAgICBcIjIyMDEwNFwiOiBcIuacnemYs+WMulwiLFxuXHQgICAgXCIyMjAxMDVcIjogXCLkuozpgZPljLpcIixcblx0ICAgIFwiMjIwMTA2XCI6IFwi57u/5Zut5Yy6XCIsXG5cdCAgICBcIjIyMDExMlwiOiBcIuWPjOmYs+WMulwiLFxuXHQgICAgXCIyMjAxMjJcIjogXCLlhpzlronljr9cIixcblx0ICAgIFwiMjIwMTgxXCI6IFwi5Lmd5Y+w5biCXCIsXG5cdCAgICBcIjIyMDE4MlwiOiBcIuamhuagkeW4glwiLFxuXHQgICAgXCIyMjAxODNcIjogXCLlvrfmg6DluIJcIixcblx0ICAgIFwiMjIwMTg4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIyMDIwMFwiOiBcIuWQieael+W4glwiLFxuXHQgICAgXCIyMjAyMDJcIjogXCLmmIzpgpHljLpcIixcblx0ICAgIFwiMjIwMjAzXCI6IFwi6b6Z5r2t5Yy6XCIsXG5cdCAgICBcIjIyMDIwNFwiOiBcIuiIueiQpeWMulwiLFxuXHQgICAgXCIyMjAyMTFcIjogXCLkuLDmu6HljLpcIixcblx0ICAgIFwiMjIwMjIxXCI6IFwi5rC45ZCJ5Y6/XCIsXG5cdCAgICBcIjIyMDI4MVwiOiBcIuibn+ays+W4glwiLFxuXHQgICAgXCIyMjAyODJcIjogXCLmoabnlLjluIJcIixcblx0ICAgIFwiMjIwMjgzXCI6IFwi6IiS5YWw5biCXCIsXG5cdCAgICBcIjIyMDI4NFwiOiBcIuejkOefs+W4glwiLFxuXHQgICAgXCIyMjAyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIwMzAwXCI6IFwi5Zub5bmz5biCXCIsXG5cdCAgICBcIjIyMDMwMlwiOiBcIumTgeilv+WMulwiLFxuXHQgICAgXCIyMjAzMDNcIjogXCLpk4HkuJzljLpcIixcblx0ICAgIFwiMjIwMzIyXCI6IFwi5qKo5qCR5Y6/XCIsXG5cdCAgICBcIjIyMDMyM1wiOiBcIuS8iumAmua7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMjAzODFcIjogXCLlhazkuLvlsq3luIJcIixcblx0ICAgIFwiMjIwMzgyXCI6IFwi5Y+M6L695biCXCIsXG5cdCAgICBcIjIyMDM4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA0MDBcIjogXCLovr3mupDluIJcIixcblx0ICAgIFwiMjIwNDAyXCI6IFwi6b6Z5bGx5Yy6XCIsXG5cdCAgICBcIjIyMDQwM1wiOiBcIuilv+WuieWMulwiLFxuXHQgICAgXCIyMjA0MjFcIjogXCLkuJzkuLDljr9cIixcblx0ICAgIFwiMjIwNDIyXCI6IFwi5Lic6L695Y6/XCIsXG5cdCAgICBcIjIyMDQyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA1MDBcIjogXCLpgJrljJbluIJcIixcblx0ICAgIFwiMjIwNTAyXCI6IFwi5Lic5piM5Yy6XCIsXG5cdCAgICBcIjIyMDUwM1wiOiBcIuS6jOmBk+axn+WMulwiLFxuXHQgICAgXCIyMjA1MjFcIjogXCLpgJrljJbljr9cIixcblx0ICAgIFwiMjIwNTIzXCI6IFwi6L6J5Y2X5Y6/XCIsXG5cdCAgICBcIjIyMDUyNFwiOiBcIuafs+ays+WOv1wiLFxuXHQgICAgXCIyMjA1ODFcIjogXCLmooXmsrPlj6PluIJcIixcblx0ICAgIFwiMjIwNTgyXCI6IFwi6ZuG5a6J5biCXCIsXG5cdCAgICBcIjIyMDU4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA2MDBcIjogXCLnmb3lsbHluIJcIixcblx0ICAgIFwiMjIwNjAyXCI6IFwi5rWR5rGf5Yy6XCIsXG5cdCAgICBcIjIyMDYyMVwiOiBcIuaKmuadvuWOv1wiLFxuXHQgICAgXCIyMjA2MjJcIjogXCLpnZblrofljr9cIixcblx0ICAgIFwiMjIwNjIzXCI6IFwi6ZW/55m95pyd6bKc5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIyMDYyNVwiOiBcIuaxn+a6kOWMulwiLFxuXHQgICAgXCIyMjA2ODFcIjogXCLkuLTmsZ/luIJcIixcblx0ICAgIFwiMjIwNjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIyMDcwMFwiOiBcIuadvuWOn+W4glwiLFxuXHQgICAgXCIyMjA3MDJcIjogXCLlroHmsZ/ljLpcIixcblx0ICAgIFwiMjIwNzIxXCI6IFwi5YmN6YOt5bCU572X5pav6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIyMDcyMlwiOiBcIumVv+WyreWOv1wiLFxuXHQgICAgXCIyMjA3MjNcIjogXCLkub7lronljr9cIixcblx0ICAgIFwiMjIwNzI0XCI6IFwi5om25L2Z5biCXCIsXG5cdCAgICBcIjIyMDcyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA4MDBcIjogXCLnmb3ln47luIJcIixcblx0ICAgIFwiMjIwODAyXCI6IFwi5rSu5YyX5Yy6XCIsXG5cdCAgICBcIjIyMDgyMVwiOiBcIumVh+i1ieWOv1wiLFxuXHQgICAgXCIyMjA4MjJcIjogXCLpgJrmpobljr9cIixcblx0ICAgIFwiMjIwODgxXCI6IFwi5rSu5Y2X5biCXCIsXG5cdCAgICBcIjIyMDg4MlwiOiBcIuWkp+WuieW4glwiLFxuXHQgICAgXCIyMjA4ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIyNDAwXCI6IFwi5bu26L655pyd6bKc5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjIyMjQwMVwiOiBcIuW7tuWQieW4glwiLFxuXHQgICAgXCIyMjI0MDJcIjogXCLlm77ku6zluIJcIixcblx0ICAgIFwiMjIyNDAzXCI6IFwi5pWm5YyW5biCXCIsXG5cdCAgICBcIjIyMjQwNFwiOiBcIuePsuaYpeW4glwiLFxuXHQgICAgXCIyMjI0MDVcIjogXCLpvpnkupXluIJcIixcblx0ICAgIFwiMjIyNDA2XCI6IFwi5ZKM6b6Z5biCXCIsXG5cdCAgICBcIjIyMjQyNFwiOiBcIuaxqua4heWOv1wiLFxuXHQgICAgXCIyMjI0MjZcIjogXCLlronlm77ljr9cIixcblx0ICAgIFwiMjIyNDI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDAwMFwiOiBcIum7kem+meaxn+ecgVwiLFxuXHQgICAgXCIyMzAxMDBcIjogXCLlk4jlsJTmu6jluIJcIixcblx0ICAgIFwiMjMwMTAyXCI6IFwi6YGT6YeM5Yy6XCIsXG5cdCAgICBcIjIzMDEwM1wiOiBcIuWNl+Wyl+WMulwiLFxuXHQgICAgXCIyMzAxMDRcIjogXCLpgZPlpJbljLpcIixcblx0ICAgIFwiMjMwMTA2XCI6IFwi6aaZ5Z2K5Yy6XCIsXG5cdCAgICBcIjIzMDEwOFwiOiBcIuW5s+aIv+WMulwiLFxuXHQgICAgXCIyMzAxMDlcIjogXCLmnb7ljJfljLpcIixcblx0ICAgIFwiMjMwMTExXCI6IFwi5ZG85YWw5Yy6XCIsXG5cdCAgICBcIjIzMDEyM1wiOiBcIuS+neWFsOWOv1wiLFxuXHQgICAgXCIyMzAxMjRcIjogXCLmlrnmraPljr9cIixcblx0ICAgIFwiMjMwMTI1XCI6IFwi5a6+5Y6/XCIsXG5cdCAgICBcIjIzMDEyNlwiOiBcIuW3tOW9puWOv1wiLFxuXHQgICAgXCIyMzAxMjdcIjogXCLmnKjlhbDljr9cIixcblx0ICAgIFwiMjMwMTI4XCI6IFwi6YCa5rKz5Y6/XCIsXG5cdCAgICBcIjIzMDEyOVwiOiBcIuW7tuWvv+WOv1wiLFxuXHQgICAgXCIyMzAxODFcIjogXCLpmL/ln47ljLpcIixcblx0ICAgIFwiMjMwMTgyXCI6IFwi5Y+M5Z+O5biCXCIsXG5cdCAgICBcIjIzMDE4M1wiOiBcIuWwmuW/l+W4glwiLFxuXHQgICAgXCIyMzAxODRcIjogXCLkupTluLjluIJcIixcblx0ICAgIFwiMjMwMTg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDIwMFwiOiBcIum9kOm9kOWTiOWwlOW4glwiLFxuXHQgICAgXCIyMzAyMDJcIjogXCLpvpnmspnljLpcIixcblx0ICAgIFwiMjMwMjAzXCI6IFwi5bu65Y2O5Yy6XCIsXG5cdCAgICBcIjIzMDIwNFwiOiBcIumTgemUi+WMulwiLFxuXHQgICAgXCIyMzAyMDVcIjogXCLmmILmmILmuqrljLpcIixcblx0ICAgIFwiMjMwMjA2XCI6IFwi5a+M5ouJ5bCU5Z+65Yy6XCIsXG5cdCAgICBcIjIzMDIwN1wiOiBcIueivuWtkOWxseWMulwiLFxuXHQgICAgXCIyMzAyMDhcIjogXCLmooXph4zmlq/ovr7mlqHlsJTml4/ljLpcIixcblx0ICAgIFwiMjMwMjIxXCI6IFwi6b6Z5rGf5Y6/XCIsXG5cdCAgICBcIjIzMDIyM1wiOiBcIuS+neWuieWOv1wiLFxuXHQgICAgXCIyMzAyMjRcIjogXCLms7DmnaXljr9cIixcblx0ICAgIFwiMjMwMjI1XCI6IFwi55SY5Y2X5Y6/XCIsXG5cdCAgICBcIjIzMDIyN1wiOiBcIuWvjOijleWOv1wiLFxuXHQgICAgXCIyMzAyMjlcIjogXCLlhYvlsbHljr9cIixcblx0ICAgIFwiMjMwMjMwXCI6IFwi5YWL5Lic5Y6/XCIsXG5cdCAgICBcIjIzMDIzMVwiOiBcIuaLnOazieWOv1wiLFxuXHQgICAgXCIyMzAyODFcIjogXCLorrfmsrPluIJcIixcblx0ICAgIFwiMjMwMjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDMwMFwiOiBcIum4oeilv+W4glwiLFxuXHQgICAgXCIyMzAzMDJcIjogXCLpuKHlhqDljLpcIixcblx0ICAgIFwiMjMwMzAzXCI6IFwi5oGS5bGx5Yy6XCIsXG5cdCAgICBcIjIzMDMwNFwiOiBcIua7tOmBk+WMulwiLFxuXHQgICAgXCIyMzAzMDVcIjogXCLmoqjmoJHljLpcIixcblx0ICAgIFwiMjMwMzA2XCI6IFwi5Z+O5a2Q5rKz5Yy6XCIsXG5cdCAgICBcIjIzMDMwN1wiOiBcIum6u+WxseWMulwiLFxuXHQgICAgXCIyMzAzMjFcIjogXCLpuKHkuJzljr9cIixcblx0ICAgIFwiMjMwMzgxXCI6IFwi6JmO5p6X5biCXCIsXG5cdCAgICBcIjIzMDM4MlwiOiBcIuWvhuWxseW4glwiLFxuXHQgICAgXCIyMzAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjMwNDAwXCI6IFwi6bmk5bKX5biCXCIsXG5cdCAgICBcIjIzMDQwMlwiOiBcIuWQkemYs+WMulwiLFxuXHQgICAgXCIyMzA0MDNcIjogXCLlt6XlhpzljLpcIixcblx0ICAgIFwiMjMwNDA0XCI6IFwi5Y2X5bGx5Yy6XCIsXG5cdCAgICBcIjIzMDQwNVwiOiBcIuWFtOWuieWMulwiLFxuXHQgICAgXCIyMzA0MDZcIjogXCLkuJzlsbHljLpcIixcblx0ICAgIFwiMjMwNDA3XCI6IFwi5YW05bGx5Yy6XCIsXG5cdCAgICBcIjIzMDQyMVwiOiBcIuiQneWMl+WOv1wiLFxuXHQgICAgXCIyMzA0MjJcIjogXCLnu6Xmu6jljr9cIixcblx0ICAgIFwiMjMwNDIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDUwMFwiOiBcIuWPjOm4reWxseW4glwiLFxuXHQgICAgXCIyMzA1MDJcIjogXCLlsJblsbHljLpcIixcblx0ICAgIFwiMjMwNTAzXCI6IFwi5bKt5Lic5Yy6XCIsXG5cdCAgICBcIjIzMDUwNVwiOiBcIuWbm+aWueWPsOWMulwiLFxuXHQgICAgXCIyMzA1MDZcIjogXCLlrp3lsbHljLpcIixcblx0ICAgIFwiMjMwNTIxXCI6IFwi6ZuG6LSk5Y6/XCIsXG5cdCAgICBcIjIzMDUyMlwiOiBcIuWPi+iwiuWOv1wiLFxuXHQgICAgXCIyMzA1MjNcIjogXCLlrp3muIXljr9cIixcblx0ICAgIFwiMjMwNTI0XCI6IFwi6aW25rKz5Y6/XCIsXG5cdCAgICBcIjIzMDUyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA2MDBcIjogXCLlpKfluobluIJcIixcblx0ICAgIFwiMjMwNjAyXCI6IFwi6JCo5bCU5Zu+5Yy6XCIsXG5cdCAgICBcIjIzMDYwM1wiOiBcIum+meWHpOWMulwiLFxuXHQgICAgXCIyMzA2MDRcIjogXCLorqnog6Hot6/ljLpcIixcblx0ICAgIFwiMjMwNjA1XCI6IFwi57qi5bKX5Yy6XCIsXG5cdCAgICBcIjIzMDYwNlwiOiBcIuWkp+WQjOWMulwiLFxuXHQgICAgXCIyMzA2MjFcIjogXCLogoflt57ljr9cIixcblx0ICAgIFwiMjMwNjIyXCI6IFwi6IKH5rqQ5Y6/XCIsXG5cdCAgICBcIjIzMDYyM1wiOiBcIuael+eUuOWOv1wiLFxuXHQgICAgXCIyMzA2MjRcIjogXCLmnZzlsJTkvK/nibnokpnlj6Tml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMjMwNjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDcwMFwiOiBcIuS8iuaYpeW4glwiLFxuXHQgICAgXCIyMzA3MDJcIjogXCLkvIrmmKXljLpcIixcblx0ICAgIFwiMjMwNzAzXCI6IFwi5Y2X5bKU5Yy6XCIsXG5cdCAgICBcIjIzMDcwNFwiOiBcIuWPi+WlveWMulwiLFxuXHQgICAgXCIyMzA3MDVcIjogXCLopb/mnpfljLpcIixcblx0ICAgIFwiMjMwNzA2XCI6IFwi57+g5bOm5Yy6XCIsXG5cdCAgICBcIjIzMDcwN1wiOiBcIuaWsOmdkuWMulwiLFxuXHQgICAgXCIyMzA3MDhcIjogXCLnvo7muqrljLpcIixcblx0ICAgIFwiMjMwNzA5XCI6IFwi6YeR5bGx5bGv5Yy6XCIsXG5cdCAgICBcIjIzMDcxMFwiOiBcIuS6lOiQpeWMulwiLFxuXHQgICAgXCIyMzA3MTFcIjogXCLkuYzpqazmsrPljLpcIixcblx0ICAgIFwiMjMwNzEyXCI6IFwi5rGk5pe65rKz5Yy6XCIsXG5cdCAgICBcIjIzMDcxM1wiOiBcIuW4puWyreWMulwiLFxuXHQgICAgXCIyMzA3MTRcIjogXCLkuYzkvIrlsq3ljLpcIixcblx0ICAgIFwiMjMwNzE1XCI6IFwi57qi5pif5Yy6XCIsXG5cdCAgICBcIjIzMDcxNlwiOiBcIuS4iueUmOWyreWMulwiLFxuXHQgICAgXCIyMzA3MjJcIjogXCLlmInojavljr9cIixcblx0ICAgIFwiMjMwNzgxXCI6IFwi6ZOB5Yqb5biCXCIsXG5cdCAgICBcIjIzMDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA4MDBcIjogXCLkvbPmnKjmlq/luIJcIixcblx0ICAgIFwiMjMwODAzXCI6IFwi5ZCR6Ziz5Yy6XCIsXG5cdCAgICBcIjIzMDgwNFwiOiBcIuWJjei/m+WMulwiLFxuXHQgICAgXCIyMzA4MDVcIjogXCLkuJzpo47ljLpcIixcblx0ICAgIFwiMjMwODExXCI6IFwi6YOK5Yy6XCIsXG5cdCAgICBcIjIzMDgyMlwiOiBcIuahpuWNl+WOv1wiLFxuXHQgICAgXCIyMzA4MjZcIjogXCLmoablt53ljr9cIixcblx0ICAgIFwiMjMwODI4XCI6IFwi5rGk5Y6f5Y6/XCIsXG5cdCAgICBcIjIzMDgzM1wiOiBcIuaKmui/nOWOv1wiLFxuXHQgICAgXCIyMzA4ODFcIjogXCLlkIzmsZ/luIJcIixcblx0ICAgIFwiMjMwODgyXCI6IFwi5a+M6ZSm5biCXCIsXG5cdCAgICBcIjIzMDg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA5MDBcIjogXCLkuIPlj7DmsrPluIJcIixcblx0ICAgIFwiMjMwOTAyXCI6IFwi5paw5YW05Yy6XCIsXG5cdCAgICBcIjIzMDkwM1wiOiBcIuahg+WxseWMulwiLFxuXHQgICAgXCIyMzA5MDRcIjogXCLojITlrZDmsrPljLpcIixcblx0ICAgIFwiMjMwOTIxXCI6IFwi5YuD5Yip5Y6/XCIsXG5cdCAgICBcIjIzMDkyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzEwMDBcIjogXCLniaHkuLnmsZ/luIJcIixcblx0ICAgIFwiMjMxMDAyXCI6IFwi5Lic5a6J5Yy6XCIsXG5cdCAgICBcIjIzMTAwM1wiOiBcIumYs+aYjuWMulwiLFxuXHQgICAgXCIyMzEwMDRcIjogXCLniLHmsJHljLpcIixcblx0ICAgIFwiMjMxMDA1XCI6IFwi6KW/5a6J5Yy6XCIsXG5cdCAgICBcIjIzMTAyNFwiOiBcIuS4nOWugeWOv1wiLFxuXHQgICAgXCIyMzEwMjVcIjogXCLmnpflj6Pljr9cIixcblx0ICAgIFwiMjMxMDgxXCI6IFwi57ul6Iqs5rKz5biCXCIsXG5cdCAgICBcIjIzMTA4M1wiOiBcIua1t+ael+W4glwiLFxuXHQgICAgXCIyMzEwODRcIjogXCLlroHlronluIJcIixcblx0ICAgIFwiMjMxMDg1XCI6IFwi56mG5qOx5biCXCIsXG5cdCAgICBcIjIzMTA4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzExMDBcIjogXCLpu5HmsrPluIJcIixcblx0ICAgIFwiMjMxMTAyXCI6IFwi54ix6L6J5Yy6XCIsXG5cdCAgICBcIjIzMTEyMVwiOiBcIuWrqeaxn+WOv1wiLFxuXHQgICAgXCIyMzExMjNcIjogXCLpgIrlhYvljr9cIixcblx0ICAgIFwiMjMxMTI0XCI6IFwi5a2Z5ZC05Y6/XCIsXG5cdCAgICBcIjIzMTE4MVwiOiBcIuWMl+WuieW4glwiLFxuXHQgICAgXCIyMzExODJcIjogXCLkupTlpKfov57msaDluIJcIixcblx0ICAgIFwiMjMxMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMTIwMFwiOiBcIue7peWMluW4glwiLFxuXHQgICAgXCIyMzEyMDJcIjogXCLljJfmnpfljLpcIixcblx0ICAgIFwiMjMxMjIxXCI6IFwi5pyb5aWO5Y6/XCIsXG5cdCAgICBcIjIzMTIyMlwiOiBcIuWFsOilv+WOv1wiLFxuXHQgICAgXCIyMzEyMjNcIjogXCLpnZLlhojljr9cIixcblx0ICAgIFwiMjMxMjI0XCI6IFwi5bqG5a6J5Y6/XCIsXG5cdCAgICBcIjIzMTIyNVwiOiBcIuaYjuawtOWOv1wiLFxuXHQgICAgXCIyMzEyMjZcIjogXCLnu6Xmo7Hljr9cIixcblx0ICAgIFwiMjMxMjgxXCI6IFwi5a6J6L6+5biCXCIsXG5cdCAgICBcIjIzMTI4MlwiOiBcIuiCh+S4nOW4glwiLFxuXHQgICAgXCIyMzEyODNcIjogXCLmtbfkvKbluIJcIixcblx0ICAgIFwiMjMxMjg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMjcwMFwiOiBcIuWkp+WFtOWuieWyreWcsOWMulwiLFxuXHQgICAgXCIyMzI3MDJcIjogXCLmnb7lsq3ljLpcIixcblx0ICAgIFwiMjMyNzAzXCI6IFwi5paw5p6X5Yy6XCIsXG5cdCAgICBcIjIzMjcwNFwiOiBcIuWRvOS4reWMulwiLFxuXHQgICAgXCIyMzI3MjFcIjogXCLlkbznjpvljr9cIixcblx0ICAgIFwiMjMyNzIyXCI6IFwi5aGU5rKz5Y6/XCIsXG5cdCAgICBcIjIzMjcyM1wiOiBcIua8oOays+WOv1wiLFxuXHQgICAgXCIyMzI3MjRcIjogXCLliqDmoLzovr7lpYfljLpcIixcblx0ICAgIFwiMjMyNzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMxMDAwMFwiOiBcIuS4iua1t1wiLFxuXHQgICAgXCIzMTAxMDBcIjogXCLkuIrmtbfluIJcIixcblx0ICAgIFwiMzEwMTAxXCI6IFwi6buE5rWm5Yy6XCIsXG5cdCAgICBcIjMxMDEwNFwiOiBcIuW+kOaxh+WMulwiLFxuXHQgICAgXCIzMTAxMDVcIjogXCLplb/lroHljLpcIixcblx0ICAgIFwiMzEwMTA2XCI6IFwi6Z2Z5a6J5Yy6XCIsXG5cdCAgICBcIjMxMDEwN1wiOiBcIuaZrumZgOWMulwiLFxuXHQgICAgXCIzMTAxMDhcIjogXCLpl7jljJfljLpcIixcblx0ICAgIFwiMzEwMTA5XCI6IFwi6Jm55Y+j5Yy6XCIsXG5cdCAgICBcIjMxMDExMFwiOiBcIuadqOa1puWMulwiLFxuXHQgICAgXCIzMTAxMTJcIjogXCLpl7XooYzljLpcIixcblx0ICAgIFwiMzEwMTEzXCI6IFwi5a6d5bGx5Yy6XCIsXG5cdCAgICBcIjMxMDExNFwiOiBcIuWYieWumuWMulwiLFxuXHQgICAgXCIzMTAxMTVcIjogXCLmtabkuJzmlrDljLpcIixcblx0ICAgIFwiMzEwMTE2XCI6IFwi6YeR5bGx5Yy6XCIsXG5cdCAgICBcIjMxMDExN1wiOiBcIuadvuaxn+WMulwiLFxuXHQgICAgXCIzMTAxMThcIjogXCLpnZLmtabljLpcIixcblx0ICAgIFwiMzEwMTIwXCI6IFwi5aWJ6LSk5Yy6XCIsXG5cdCAgICBcIjMxMDIzMFwiOiBcIuW0h+aYjuWOv1wiLFxuXHQgICAgXCIzMTAyMzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwMDAwXCI6IFwi5rGf6IuP55yBXCIsXG5cdCAgICBcIjMyMDEwMFwiOiBcIuWNl+S6rOW4glwiLFxuXHQgICAgXCIzMjAxMDJcIjogXCLnjoTmrabljLpcIixcblx0ICAgIFwiMzIwMTA0XCI6IFwi56em5reu5Yy6XCIsXG5cdCAgICBcIjMyMDEwNVwiOiBcIuW7uumCuuWMulwiLFxuXHQgICAgXCIzMjAxMDZcIjogXCLpvJPmpbzljLpcIixcblx0ICAgIFwiMzIwMTExXCI6IFwi5rWm5Y+j5Yy6XCIsXG5cdCAgICBcIjMyMDExM1wiOiBcIuaglumcnuWMulwiLFxuXHQgICAgXCIzMjAxMTRcIjogXCLpm6joirHlj7DljLpcIixcblx0ICAgIFwiMzIwMTE1XCI6IFwi5rGf5a6B5Yy6XCIsXG5cdCAgICBcIjMyMDExNlwiOiBcIuWFreWQiOWMulwiLFxuXHQgICAgXCIzMjAxMjRcIjogXCLmuqfmsLTljLpcIixcblx0ICAgIFwiMzIwMTI1XCI6IFwi6auY5rez5Yy6XCIsXG5cdCAgICBcIjMyMDEyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjAyMDBcIjogXCLml6DplKHluIJcIixcblx0ICAgIFwiMzIwMjAyXCI6IFwi5bSH5a6J5Yy6XCIsXG5cdCAgICBcIjMyMDIwM1wiOiBcIuWNl+mVv+WMulwiLFxuXHQgICAgXCIzMjAyMDRcIjogXCLljJfloZjljLpcIixcblx0ICAgIFwiMzIwMjA1XCI6IFwi6ZSh5bGx5Yy6XCIsXG5cdCAgICBcIjMyMDIwNlwiOiBcIuaDoOWxseWMulwiLFxuXHQgICAgXCIzMjAyMTFcIjogXCLmu6jmuZbljLpcIixcblx0ICAgIFwiMzIwMjgxXCI6IFwi5rGf6Zi05biCXCIsXG5cdCAgICBcIjMyMDI4MlwiOiBcIuWunOWFtOW4glwiLFxuXHQgICAgXCIzMjAyOTdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwMzAwXCI6IFwi5b6Q5bee5biCXCIsXG5cdCAgICBcIjMyMDMwMlwiOiBcIum8k+alvOWMulwiLFxuXHQgICAgXCIzMjAzMDNcIjogXCLkupHpvpnljLpcIixcblx0ICAgIFwiMzIwMzA1XCI6IFwi6LS+5rGq5Yy6XCIsXG5cdCAgICBcIjMyMDMxMVwiOiBcIuazieWxseWMulwiLFxuXHQgICAgXCIzMjAzMjFcIjogXCLkuLDljr9cIixcblx0ICAgIFwiMzIwMzIyXCI6IFwi5rKb5Y6/XCIsXG5cdCAgICBcIjMyMDMyM1wiOiBcIumTnOWxseWMulwiLFxuXHQgICAgXCIzMjAzMjRcIjogXCLnnaLlroHljr9cIixcblx0ICAgIFwiMzIwMzgxXCI6IFwi5paw5rKC5biCXCIsXG5cdCAgICBcIjMyMDM4MlwiOiBcIumCs+W3nuW4glwiLFxuXHQgICAgXCIzMjAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNDAwXCI6IFwi5bi45bee5biCXCIsXG5cdCAgICBcIjMyMDQwMlwiOiBcIuWkqeWugeWMulwiLFxuXHQgICAgXCIzMjA0MDRcIjogXCLpkp/mpbzljLpcIixcblx0ICAgIFwiMzIwNDA1XCI6IFwi5oia5aKF5aCw5Yy6XCIsXG5cdCAgICBcIjMyMDQxMVwiOiBcIuaWsOWMl+WMulwiLFxuXHQgICAgXCIzMjA0MTJcIjogXCLmrabov5vljLpcIixcblx0ICAgIFwiMzIwNDgxXCI6IFwi5rqn6Ziz5biCXCIsXG5cdCAgICBcIjMyMDQ4MlwiOiBcIumHkeWdm+W4glwiLFxuXHQgICAgXCIzMjA0ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNTAwXCI6IFwi6IuP5bee5biCXCIsXG5cdCAgICBcIjMyMDUwNVwiOiBcIuiZjuS4mOWMulwiLFxuXHQgICAgXCIzMjA1MDZcIjogXCLlkLTkuK3ljLpcIixcblx0ICAgIFwiMzIwNTA3XCI6IFwi55u45Z+O5Yy6XCIsXG5cdCAgICBcIjMyMDUwOFwiOiBcIuWnkeiLj+WMulwiLFxuXHQgICAgXCIzMjA1ODFcIjogXCLluLjnhp/luIJcIixcblx0ICAgIFwiMzIwNTgyXCI6IFwi5byg5a625riv5biCXCIsXG5cdCAgICBcIjMyMDU4M1wiOiBcIuaYhuWxseW4glwiLFxuXHQgICAgXCIzMjA1ODRcIjogXCLlkLTmsZ/ljLpcIixcblx0ICAgIFwiMzIwNTg1XCI6IFwi5aSq5LuT5biCXCIsXG5cdCAgICBcIjMyMDU5NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjA2MDBcIjogXCLljZfpgJrluIJcIixcblx0ICAgIFwiMzIwNjAyXCI6IFwi5bSH5bed5Yy6XCIsXG5cdCAgICBcIjMyMDYxMVwiOiBcIua4r+mXuOWMulwiLFxuXHQgICAgXCIzMjA2MTJcIjogXCLpgJrlt57ljLpcIixcblx0ICAgIFwiMzIwNjIxXCI6IFwi5rW35a6J5Y6/XCIsXG5cdCAgICBcIjMyMDYyM1wiOiBcIuWmguS4nOWOv1wiLFxuXHQgICAgXCIzMjA2ODFcIjogXCLlkK/kuJzluIJcIixcblx0ICAgIFwiMzIwNjgyXCI6IFwi5aaC55qL5biCXCIsXG5cdCAgICBcIjMyMDY4NFwiOiBcIua1t+mXqOW4glwiLFxuXHQgICAgXCIzMjA2OTRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNzAwXCI6IFwi6L+e5LqR5riv5biCXCIsXG5cdCAgICBcIjMyMDcwM1wiOiBcIui/nuS6keWMulwiLFxuXHQgICAgXCIzMjA3MDVcIjogXCLmlrDmtabljLpcIixcblx0ICAgIFwiMzIwNzA2XCI6IFwi5rW35bee5Yy6XCIsXG5cdCAgICBcIjMyMDcyMVwiOiBcIui1o+amhuWOv1wiLFxuXHQgICAgXCIzMjA3MjJcIjogXCLkuJzmtbfljr9cIixcblx0ICAgIFwiMzIwNzIzXCI6IFwi54GM5LqR5Y6/XCIsXG5cdCAgICBcIjMyMDcyNFwiOiBcIueBjOWNl+WOv1wiLFxuXHQgICAgXCIzMjA3MjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwODAwXCI6IFwi5reu5a6J5biCXCIsXG5cdCAgICBcIjMyMDgwMlwiOiBcIua4heays+WMulwiLFxuXHQgICAgXCIzMjA4MDNcIjogXCLmt67lronljLpcIixcblx0ICAgIFwiMzIwODA0XCI6IFwi5reu6Zi05Yy6XCIsXG5cdCAgICBcIjMyMDgxMVwiOiBcIua4hea1puWMulwiLFxuXHQgICAgXCIzMjA4MjZcIjogXCLmtp/msLTljr9cIixcblx0ICAgIFwiMzIwODI5XCI6IFwi5rSq5rO95Y6/XCIsXG5cdCAgICBcIjMyMDgzMFwiOiBcIuebseecmeWOv1wiLFxuXHQgICAgXCIzMjA4MzFcIjogXCLph5HmuZbljr9cIixcblx0ICAgIFwiMzIwODMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMyMDkwMFwiOiBcIuebkOWfjuW4glwiLFxuXHQgICAgXCIzMjA5MDJcIjogXCLkuq3muZbljLpcIixcblx0ICAgIFwiMzIwOTAzXCI6IFwi55uQ6YO95Yy6XCIsXG5cdCAgICBcIjMyMDkyMVwiOiBcIuWTjeawtOWOv1wiLFxuXHQgICAgXCIzMjA5MjJcIjogXCLmu6jmtbfljr9cIixcblx0ICAgIFwiMzIwOTIzXCI6IFwi6Zic5a6B5Y6/XCIsXG5cdCAgICBcIjMyMDkyNFwiOiBcIuWwhOmYs+WOv1wiLFxuXHQgICAgXCIzMjA5MjVcIjogXCLlu7rmuZbljr9cIixcblx0ICAgIFwiMzIwOTgxXCI6IFwi5Lic5Y+w5biCXCIsXG5cdCAgICBcIjMyMDk4MlwiOiBcIuWkp+S4sOW4glwiLFxuXHQgICAgXCIzMjA5ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIxMDAwXCI6IFwi5oms5bee5biCXCIsXG5cdCAgICBcIjMyMTAwMlwiOiBcIuW5v+mZteWMulwiLFxuXHQgICAgXCIzMjEwMDNcIjogXCLpgpfmsZ/ljLpcIixcblx0ICAgIFwiMzIxMDIzXCI6IFwi5a6d5bqU5Y6/XCIsXG5cdCAgICBcIjMyMTA4MVwiOiBcIuS7quW+geW4glwiLFxuXHQgICAgXCIzMjEwODRcIjogXCLpq5jpgq7luIJcIixcblx0ICAgIFwiMzIxMDg4XCI6IFwi5rGf6YO95Yy6XCIsXG5cdCAgICBcIjMyMTA5M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjExMDBcIjogXCLplYfmsZ/luIJcIixcblx0ICAgIFwiMzIxMTAyXCI6IFwi5Lqs5Y+j5Yy6XCIsXG5cdCAgICBcIjMyMTExMVwiOiBcIua2puW3nuWMulwiLFxuXHQgICAgXCIzMjExMTJcIjogXCLkuLnlvpLljLpcIixcblx0ICAgIFwiMzIxMTgxXCI6IFwi5Li56Ziz5biCXCIsXG5cdCAgICBcIjMyMTE4MlwiOiBcIuaJrOS4reW4glwiLFxuXHQgICAgXCIzMjExODNcIjogXCLlj6XlrrnluIJcIixcblx0ICAgIFwiMzIxMTg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMyMTIwMFwiOiBcIuazsOW3nuW4glwiLFxuXHQgICAgXCIzMjEyMDJcIjogXCLmtbfpmbXljLpcIixcblx0ICAgIFwiMzIxMjAzXCI6IFwi6auY5riv5Yy6XCIsXG5cdCAgICBcIjMyMTI4MVwiOiBcIuWFtOWMluW4glwiLFxuXHQgICAgXCIzMjEyODJcIjogXCLpnZbmsZ/luIJcIixcblx0ICAgIFwiMzIxMjgzXCI6IFwi5rOw5YW05biCXCIsXG5cdCAgICBcIjMyMTI4NFwiOiBcIuWnnOWgsOWMulwiLFxuXHQgICAgXCIzMjEyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIxMzAwXCI6IFwi5a6/6L+B5biCXCIsXG5cdCAgICBcIjMyMTMwMlwiOiBcIuWuv+WfjuWMulwiLFxuXHQgICAgXCIzMjEzMTFcIjogXCLlrr/osavljLpcIixcblx0ICAgIFwiMzIxMzIyXCI6IFwi5rKt6Ziz5Y6/XCIsXG5cdCAgICBcIjMyMTMyM1wiOiBcIuazl+mYs+WOv1wiLFxuXHQgICAgXCIzMjEzMjRcIjogXCLms5fmtKrljr9cIixcblx0ICAgIFwiMzIxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDAwMFwiOiBcIua1meaxn+ecgVwiLFxuXHQgICAgXCIzMzAxMDBcIjogXCLmna3lt57luIJcIixcblx0ICAgIFwiMzMwMTAyXCI6IFwi5LiK5Z+O5Yy6XCIsXG5cdCAgICBcIjMzMDEwM1wiOiBcIuS4i+WfjuWMulwiLFxuXHQgICAgXCIzMzAxMDRcIjogXCLmsZ/lubLljLpcIixcblx0ICAgIFwiMzMwMTA1XCI6IFwi5oux5aKF5Yy6XCIsXG5cdCAgICBcIjMzMDEwNlwiOiBcIuilv+a5luWMulwiLFxuXHQgICAgXCIzMzAxMDhcIjogXCLmu6jmsZ/ljLpcIixcblx0ICAgIFwiMzMwMTA5XCI6IFwi6JCn5bGx5Yy6XCIsXG5cdCAgICBcIjMzMDExMFwiOiBcIuS9meadreWMulwiLFxuXHQgICAgXCIzMzAxMjJcIjogXCLmoZDlupDljr9cIixcblx0ICAgIFwiMzMwMTI3XCI6IFwi5rez5a6J5Y6/XCIsXG5cdCAgICBcIjMzMDE4MlwiOiBcIuW7uuW+t+W4glwiLFxuXHQgICAgXCIzMzAxODNcIjogXCLlr4zpmLPluIJcIixcblx0ICAgIFwiMzMwMTg1XCI6IFwi5Li05a6J5biCXCIsXG5cdCAgICBcIjMzMDE4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzAyMDBcIjogXCLlroHms6LluIJcIixcblx0ICAgIFwiMzMwMjAzXCI6IFwi5rW35puZ5Yy6XCIsXG5cdCAgICBcIjMzMDIwNFwiOiBcIuaxn+S4nOWMulwiLFxuXHQgICAgXCIzMzAyMDVcIjogXCLmsZ/ljJfljLpcIixcblx0ICAgIFwiMzMwMjA2XCI6IFwi5YyX5LuR5Yy6XCIsXG5cdCAgICBcIjMzMDIxMVwiOiBcIumVh+a1t+WMulwiLFxuXHQgICAgXCIzMzAyMTJcIjogXCLphJ7lt57ljLpcIixcblx0ICAgIFwiMzMwMjI1XCI6IFwi6LGh5bGx5Y6/XCIsXG5cdCAgICBcIjMzMDIyNlwiOiBcIuWugea1t+WOv1wiLFxuXHQgICAgXCIzMzAyODFcIjogXCLkvZnlp5rluIJcIixcblx0ICAgIFwiMzMwMjgyXCI6IFwi5oWI5rqq5biCXCIsXG5cdCAgICBcIjMzMDI4M1wiOiBcIuWlieWMluW4glwiLFxuXHQgICAgXCIzMzAyODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzMwMzAwXCI6IFwi5rip5bee5biCXCIsXG5cdCAgICBcIjMzMDMwMlwiOiBcIum5v+WfjuWMulwiLFxuXHQgICAgXCIzMzAzMDNcIjogXCLpvpnmub7ljLpcIixcblx0ICAgIFwiMzMwMzA0XCI6IFwi55Ov5rW35Yy6XCIsXG5cdCAgICBcIjMzMDMyMlwiOiBcIua0nuWktOWOv1wiLFxuXHQgICAgXCIzMzAzMjRcIjogXCLmsLjlmInljr9cIixcblx0ICAgIFwiMzMwMzI2XCI6IFwi5bmz6Ziz5Y6/XCIsXG5cdCAgICBcIjMzMDMyN1wiOiBcIuiLjeWNl+WOv1wiLFxuXHQgICAgXCIzMzAzMjhcIjogXCLmlofmiJDljr9cIixcblx0ICAgIFwiMzMwMzI5XCI6IFwi5rOw6aG65Y6/XCIsXG5cdCAgICBcIjMzMDM4MVwiOiBcIueRnuWuieW4glwiLFxuXHQgICAgXCIzMzAzODJcIjogXCLkuZDmuIXluIJcIixcblx0ICAgIFwiMzMwMzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDQwMFwiOiBcIuWYieWFtOW4glwiLFxuXHQgICAgXCIzMzA0MDJcIjogXCLljZfmuZbljLpcIixcblx0ICAgIFwiMzMwNDExXCI6IFwi56eA5rSy5Yy6XCIsXG5cdCAgICBcIjMzMDQyMVwiOiBcIuWYieWWhOWOv1wiLFxuXHQgICAgXCIzMzA0MjRcIjogXCLmtbfnm5Dljr9cIixcblx0ICAgIFwiMzMwNDgxXCI6IFwi5rW35a6B5biCXCIsXG5cdCAgICBcIjMzMDQ4MlwiOiBcIuW5s+a5luW4glwiLFxuXHQgICAgXCIzMzA0ODNcIjogXCLmoZDkuaHluIJcIixcblx0ICAgIFwiMzMwNDg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDUwMFwiOiBcIua5luW3nuW4glwiLFxuXHQgICAgXCIzMzA1MDJcIjogXCLlkLTlhbTljLpcIixcblx0ICAgIFwiMzMwNTAzXCI6IFwi5Y2X5rWU5Yy6XCIsXG5cdCAgICBcIjMzMDUyMVwiOiBcIuW+t+a4heWOv1wiLFxuXHQgICAgXCIzMzA1MjJcIjogXCLplb/lhbTljr9cIixcblx0ICAgIFwiMzMwNTIzXCI6IFwi5a6J5ZCJ5Y6/XCIsXG5cdCAgICBcIjMzMDUyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzA2MDBcIjogXCLnu43lhbTluIJcIixcblx0ICAgIFwiMzMwNjAyXCI6IFwi6LaK5Z+O5Yy6XCIsXG5cdCAgICBcIjMzMDYyMVwiOiBcIue7jeWFtOWOv1wiLFxuXHQgICAgXCIzMzA2MjRcIjogXCLmlrDmmIzljr9cIixcblx0ICAgIFwiMzMwNjgxXCI6IFwi6K+45pqo5biCXCIsXG5cdCAgICBcIjMzMDY4MlwiOiBcIuS4iuiZnuW4glwiLFxuXHQgICAgXCIzMzA2ODNcIjogXCLltYrlt57luIJcIixcblx0ICAgIFwiMzMwNjg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDcwMFwiOiBcIumHkeWNjuW4glwiLFxuXHQgICAgXCIzMzA3MDJcIjogXCLlqbrln47ljLpcIixcblx0ICAgIFwiMzMwNzAzXCI6IFwi6YeR5Lic5Yy6XCIsXG5cdCAgICBcIjMzMDcyM1wiOiBcIuatpuS5ieWOv1wiLFxuXHQgICAgXCIzMzA3MjZcIjogXCLmtabmsZ/ljr9cIixcblx0ICAgIFwiMzMwNzI3XCI6IFwi56OQ5a6J5Y6/XCIsXG5cdCAgICBcIjMzMDc4MVwiOiBcIuWFsOa6quW4glwiLFxuXHQgICAgXCIzMzA3ODJcIjogXCLkuYnkuYzluIJcIixcblx0ICAgIFwiMzMwNzgzXCI6IFwi5Lic6Ziz5biCXCIsXG5cdCAgICBcIjMzMDc4NFwiOiBcIuawuOW6t+W4glwiLFxuXHQgICAgXCIzMzA3ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzMwODAwXCI6IFwi6KGi5bee5biCXCIsXG5cdCAgICBcIjMzMDgwMlwiOiBcIuafr+WfjuWMulwiLFxuXHQgICAgXCIzMzA4MDNcIjogXCLooaLmsZ/ljLpcIixcblx0ICAgIFwiMzMwODIyXCI6IFwi5bi45bGx5Y6/XCIsXG5cdCAgICBcIjMzMDgyNFwiOiBcIuW8gOWMluWOv1wiLFxuXHQgICAgXCIzMzA4MjVcIjogXCLpvpnmuLjljr9cIixcblx0ICAgIFwiMzMwODgxXCI6IFwi5rGf5bGx5biCXCIsXG5cdCAgICBcIjMzMDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzA5MDBcIjogXCLoiJ/lsbHluIJcIixcblx0ICAgIFwiMzMwOTAyXCI6IFwi5a6a5rW35Yy6XCIsXG5cdCAgICBcIjMzMDkwM1wiOiBcIuaZrumZgOWMulwiLFxuXHQgICAgXCIzMzA5MjFcIjogXCLlsrHlsbHljr9cIixcblx0ICAgIFwiMzMwOTIyXCI6IFwi5bWK5rOX5Y6/XCIsXG5cdCAgICBcIjMzMDkyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzEwMDBcIjogXCLlj7Dlt57luIJcIixcblx0ICAgIFwiMzMxMDAyXCI6IFwi5qSS5rGf5Yy6XCIsXG5cdCAgICBcIjMzMTAwM1wiOiBcIum7hOWyqeWMulwiLFxuXHQgICAgXCIzMzEwMDRcIjogXCLot6/moaXljLpcIixcblx0ICAgIFwiMzMxMDIxXCI6IFwi546J546v5Y6/XCIsXG5cdCAgICBcIjMzMTAyMlwiOiBcIuS4iemXqOWOv1wiLFxuXHQgICAgXCIzMzEwMjNcIjogXCLlpKnlj7Dljr9cIixcblx0ICAgIFwiMzMxMDI0XCI6IFwi5LuZ5bGF5Y6/XCIsXG5cdCAgICBcIjMzMTA4MVwiOiBcIua4qeWyreW4glwiLFxuXHQgICAgXCIzMzEwODJcIjogXCLkuLTmtbfluIJcIixcblx0ICAgIFwiMzMxMDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMTEwMFwiOiBcIuS4veawtOW4glwiLFxuXHQgICAgXCIzMzExMDJcIjogXCLojrLpg73ljLpcIixcblx0ICAgIFwiMzMxMTIxXCI6IFwi6Z2S55Sw5Y6/XCIsXG5cdCAgICBcIjMzMTEyMlwiOiBcIue8meS6keWOv1wiLFxuXHQgICAgXCIzMzExMjNcIjogXCLpgYLmmIzljr9cIixcblx0ICAgIFwiMzMxMTI0XCI6IFwi5p2+6Ziz5Y6/XCIsXG5cdCAgICBcIjMzMTEyNVwiOiBcIuS6keWSjOWOv1wiLFxuXHQgICAgXCIzMzExMjZcIjogXCLluoblhYPljr9cIixcblx0ICAgIFwiMzMxMTI3XCI6IFwi5pmv5a6B55Wy5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjMzMTE4MVwiOiBcIum+meazieW4glwiLFxuXHQgICAgXCIzMzExODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwMDAwXCI6IFwi5a6J5b6955yBXCIsXG5cdCAgICBcIjM0MDEwMFwiOiBcIuWQiOiCpeW4glwiLFxuXHQgICAgXCIzNDAxMDJcIjogXCLnkbbmtbfljLpcIixcblx0ICAgIFwiMzQwMTAzXCI6IFwi5bqQ6Ziz5Yy6XCIsXG5cdCAgICBcIjM0MDEwNFwiOiBcIuicgOWxseWMulwiLFxuXHQgICAgXCIzNDAxMTFcIjogXCLljIXmsrPljLpcIixcblx0ICAgIFwiMzQwMTIxXCI6IFwi6ZW/5Liw5Y6/XCIsXG5cdCAgICBcIjM0MDEyMlwiOiBcIuiCpeS4nOWOv1wiLFxuXHQgICAgXCIzNDAxMjNcIjogXCLogqXopb/ljr9cIixcblx0ICAgIFwiMzQwMTkyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDIwMFwiOiBcIuiKnOa5luW4glwiLFxuXHQgICAgXCIzNDAyMDJcIjogXCLplZzmuZbljLpcIixcblx0ICAgIFwiMzQwMjAzXCI6IFwi5byL5rGf5Yy6XCIsXG5cdCAgICBcIjM0MDIwN1wiOiBcIum4oOaxn+WMulwiLFxuXHQgICAgXCIzNDAyMDhcIjogXCLkuInlsbHljLpcIixcblx0ICAgIFwiMzQwMjIxXCI6IFwi6Iqc5rmW5Y6/XCIsXG5cdCAgICBcIjM0MDIyMlwiOiBcIue5geaYjOWOv1wiLFxuXHQgICAgXCIzNDAyMjNcIjogXCLljZfpmbXljr9cIixcblx0ICAgIFwiMzQwMjI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDMwMFwiOiBcIuiajOWfoOW4glwiLFxuXHQgICAgXCIzNDAzMDJcIjogXCLpvpnlrZDmuZbljLpcIixcblx0ICAgIFwiMzQwMzAzXCI6IFwi6JqM5bGx5Yy6XCIsXG5cdCAgICBcIjM0MDMwNFwiOiBcIuemueS8muWMulwiLFxuXHQgICAgXCIzNDAzMTFcIjogXCLmt67kuIrljLpcIixcblx0ICAgIFwiMzQwMzIxXCI6IFwi5oCA6L+c5Y6/XCIsXG5cdCAgICBcIjM0MDMyMlwiOiBcIuS6lOays+WOv1wiLFxuXHQgICAgXCIzNDAzMjNcIjogXCLlm7rplYfljr9cIixcblx0ICAgIFwiMzQwMzI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDQwMFwiOiBcIua3ruWNl+W4glwiLFxuXHQgICAgXCIzNDA0MDJcIjogXCLlpKfpgJrljLpcIixcblx0ICAgIFwiMzQwNDAzXCI6IFwi55Sw5a625bq15Yy6XCIsXG5cdCAgICBcIjM0MDQwNFwiOiBcIuiwouWutumbhuWMulwiLFxuXHQgICAgXCIzNDA0MDVcIjogXCLlhavlhazlsbHljLpcIixcblx0ICAgIFwiMzQwNDA2XCI6IFwi5r2Y6ZuG5Yy6XCIsXG5cdCAgICBcIjM0MDQyMVwiOiBcIuWHpOWPsOWOv1wiLFxuXHQgICAgXCIzNDA0MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNTAwXCI6IFwi6ams6Z6N5bGx5biCXCIsXG5cdCAgICBcIjM0MDUwM1wiOiBcIuiKseWxseWMulwiLFxuXHQgICAgXCIzNDA1MDRcIjogXCLpm6jlsbHljLpcIixcblx0ICAgIFwiMzQwNTA2XCI6IFwi5Y2a5pyb5Yy6XCIsXG5cdCAgICBcIjM0MDUyMVwiOiBcIuW9k+a2guWOv1wiLFxuXHQgICAgXCIzNDA1MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNjAwXCI6IFwi5reu5YyX5biCXCIsXG5cdCAgICBcIjM0MDYwMlwiOiBcIuadnOmbhuWMulwiLFxuXHQgICAgXCIzNDA2MDNcIjogXCLnm7jlsbHljLpcIixcblx0ICAgIFwiMzQwNjA0XCI6IFwi54OI5bGx5Yy6XCIsXG5cdCAgICBcIjM0MDYyMVwiOiBcIua/iea6quWOv1wiLFxuXHQgICAgXCIzNDA2MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNzAwXCI6IFwi6ZOc6Zm15biCXCIsXG5cdCAgICBcIjM0MDcwMlwiOiBcIumTnOWumOWxseWMulwiLFxuXHQgICAgXCIzNDA3MDNcIjogXCLni67lrZDlsbHljLpcIixcblx0ICAgIFwiMzQwNzExXCI6IFwi6YOK5Yy6XCIsXG5cdCAgICBcIjM0MDcyMVwiOiBcIumTnOmZteWOv1wiLFxuXHQgICAgXCIzNDA3MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwODAwXCI6IFwi5a6J5bqG5biCXCIsXG5cdCAgICBcIjM0MDgwMlwiOiBcIui/juaxn+WMulwiLFxuXHQgICAgXCIzNDA4MDNcIjogXCLlpKfop4LljLpcIixcblx0ICAgIFwiMzQwODExXCI6IFwi5a6c56eA5Yy6XCIsXG5cdCAgICBcIjM0MDgyMlwiOiBcIuaAgOWugeWOv1wiLFxuXHQgICAgXCIzNDA4MjNcIjogXCLmnp7pmLPljr9cIixcblx0ICAgIFwiMzQwODI0XCI6IFwi5r2c5bGx5Y6/XCIsXG5cdCAgICBcIjM0MDgyNVwiOiBcIuWkqua5luWOv1wiLFxuXHQgICAgXCIzNDA4MjZcIjogXCLlrr/mnb7ljr9cIixcblx0ICAgIFwiMzQwODI3XCI6IFwi5pyb5rGf5Y6/XCIsXG5cdCAgICBcIjM0MDgyOFwiOiBcIuWys+ilv+WOv1wiLFxuXHQgICAgXCIzNDA4ODFcIjogXCLmoZDln47luIJcIixcblx0ICAgIFwiMzQwODgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTAwMFwiOiBcIum7hOWxseW4glwiLFxuXHQgICAgXCIzNDEwMDJcIjogXCLlsa/muqrljLpcIixcblx0ICAgIFwiMzQxMDAzXCI6IFwi6buE5bGx5Yy6XCIsXG5cdCAgICBcIjM0MTAwNFwiOiBcIuW+veW3nuWMulwiLFxuXHQgICAgXCIzNDEwMjFcIjogXCLmrZnljr9cIixcblx0ICAgIFwiMzQxMDIyXCI6IFwi5LyR5a6B5Y6/XCIsXG5cdCAgICBcIjM0MTAyM1wiOiBcIum7n+WOv1wiLFxuXHQgICAgXCIzNDEwMjRcIjogXCLnpYHpl6jljr9cIixcblx0ICAgIFwiMzQxMDI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTEwMFwiOiBcIua7geW3nuW4glwiLFxuXHQgICAgXCIzNDExMDJcIjogXCLnkIXnkIrljLpcIixcblx0ICAgIFwiMzQxMTAzXCI6IFwi5Y2X6LCv5Yy6XCIsXG5cdCAgICBcIjM0MTEyMlwiOiBcIuadpeWuieWOv1wiLFxuXHQgICAgXCIzNDExMjRcIjogXCLlhajmpJLljr9cIixcblx0ICAgIFwiMzQxMTI1XCI6IFwi5a6a6L+c5Y6/XCIsXG5cdCAgICBcIjM0MTEyNlwiOiBcIuWHpOmYs+WOv1wiLFxuXHQgICAgXCIzNDExODFcIjogXCLlpKnplb/luIJcIixcblx0ICAgIFwiMzQxMTgyXCI6IFwi5piO5YWJ5biCXCIsXG5cdCAgICBcIjM0MTE4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNDEyMDBcIjogXCLpmJzpmLPluIJcIixcblx0ICAgIFwiMzQxMjAyXCI6IFwi6aKN5bee5Yy6XCIsXG5cdCAgICBcIjM0MTIwM1wiOiBcIumijeS4nOWMulwiLFxuXHQgICAgXCIzNDEyMDRcIjogXCLpoo3ms4nljLpcIixcblx0ICAgIFwiMzQxMjIxXCI6IFwi5Li05rOJ5Y6/XCIsXG5cdCAgICBcIjM0MTIyMlwiOiBcIuWkquWSjOWOv1wiLFxuXHQgICAgXCIzNDEyMjVcIjogXCLpmJzljZfljr9cIixcblx0ICAgIFwiMzQxMjI2XCI6IFwi6aKN5LiK5Y6/XCIsXG5cdCAgICBcIjM0MTI4MlwiOiBcIueVjOmmluW4glwiLFxuXHQgICAgXCIzNDEyODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxMzAwXCI6IFwi5a6/5bee5biCXCIsXG5cdCAgICBcIjM0MTMwMlwiOiBcIuWfh+ahpeWMulwiLFxuXHQgICAgXCIzNDEzMjFcIjogXCLnoIDlsbHljr9cIixcblx0ICAgIFwiMzQxMzIyXCI6IFwi6JCn5Y6/XCIsXG5cdCAgICBcIjM0MTMyM1wiOiBcIueBteeSp+WOv1wiLFxuXHQgICAgXCIzNDEzMjRcIjogXCLms5fljr9cIixcblx0ICAgIFwiMzQxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTQwMFwiOiBcIuW3oua5luW4glwiLFxuXHQgICAgXCIzNDE0MjFcIjogXCLlupDmsZ/ljr9cIixcblx0ICAgIFwiMzQxNDIyXCI6IFwi5peg5Li65Y6/XCIsXG5cdCAgICBcIjM0MTQyM1wiOiBcIuWQq+WxseWOv1wiLFxuXHQgICAgXCIzNDE0MjRcIjogXCLlkozljr9cIixcblx0ICAgIFwiMzQxNTAwXCI6IFwi5YWt5a6J5biCXCIsXG5cdCAgICBcIjM0MTUwMlwiOiBcIumHkeWuieWMulwiLFxuXHQgICAgXCIzNDE1MDNcIjogXCLoo5XlronljLpcIixcblx0ICAgIFwiMzQxNTIxXCI6IFwi5a+/5Y6/XCIsXG5cdCAgICBcIjM0MTUyMlwiOiBcIumcjemCseWOv1wiLFxuXHQgICAgXCIzNDE1MjNcIjogXCLoiJLln47ljr9cIixcblx0ICAgIFwiMzQxNTI0XCI6IFwi6YeR5a+o5Y6/XCIsXG5cdCAgICBcIjM0MTUyNVwiOiBcIumcjeWxseWOv1wiLFxuXHQgICAgXCIzNDE1MjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxNjAwXCI6IFwi5Lqz5bee5biCXCIsXG5cdCAgICBcIjM0MTYwMlwiOiBcIuiwr+WfjuWMulwiLFxuXHQgICAgXCIzNDE2MjFcIjogXCLmtqHpmLPljr9cIixcblx0ICAgIFwiMzQxNjIyXCI6IFwi6JKZ5Z+O5Y6/XCIsXG5cdCAgICBcIjM0MTYyM1wiOiBcIuWIqei+m+WOv1wiLFxuXHQgICAgXCIzNDE2MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxNzAwXCI6IFwi5rGg5bee5biCXCIsXG5cdCAgICBcIjM0MTcwMlwiOiBcIui0teaxoOWMulwiLFxuXHQgICAgXCIzNDE3MjFcIjogXCLkuJzoh7Pljr9cIixcblx0ICAgIFwiMzQxNzIyXCI6IFwi55+z5Y+w5Y6/XCIsXG5cdCAgICBcIjM0MTcyM1wiOiBcIumdkumYs+WOv1wiLFxuXHQgICAgXCIzNDE3MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxODAwXCI6IFwi5a6j5Z+O5biCXCIsXG5cdCAgICBcIjM0MTgwMlwiOiBcIuWuo+W3nuWMulwiLFxuXHQgICAgXCIzNDE4MjFcIjogXCLpg47muqrljr9cIixcblx0ICAgIFwiMzQxODIyXCI6IFwi5bm/5b635Y6/XCIsXG5cdCAgICBcIjM0MTgyM1wiOiBcIuazvuWOv1wiLFxuXHQgICAgXCIzNDE4MjRcIjogXCLnu6nmuqrljr9cIixcblx0ICAgIFwiMzQxODI1XCI6IFwi5peM5b635Y6/XCIsXG5cdCAgICBcIjM0MTg4MVwiOiBcIuWugeWbveW4glwiLFxuXHQgICAgXCIzNDE4ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwMDAwXCI6IFwi56aP5bu655yBXCIsXG5cdCAgICBcIjM1MDEwMFwiOiBcIuemj+W3nuW4glwiLFxuXHQgICAgXCIzNTAxMDJcIjogXCLpvJPmpbzljLpcIixcblx0ICAgIFwiMzUwMTAzXCI6IFwi5Y+w5rGf5Yy6XCIsXG5cdCAgICBcIjM1MDEwNFwiOiBcIuS7k+WxseWMulwiLFxuXHQgICAgXCIzNTAxMDVcIjogXCLpqazlsL7ljLpcIixcblx0ICAgIFwiMzUwMTExXCI6IFwi5pmL5a6J5Yy6XCIsXG5cdCAgICBcIjM1MDEyMVwiOiBcIumXveS+r+WOv1wiLFxuXHQgICAgXCIzNTAxMjJcIjogXCLov57msZ/ljr9cIixcblx0ICAgIFwiMzUwMTIzXCI6IFwi572X5rqQ5Y6/XCIsXG5cdCAgICBcIjM1MDEyNFwiOiBcIumXvea4heWOv1wiLFxuXHQgICAgXCIzNTAxMjVcIjogXCLmsLjms7Dljr9cIixcblx0ICAgIFwiMzUwMTI4XCI6IFwi5bmz5r2t5Y6/XCIsXG5cdCAgICBcIjM1MDE4MVwiOiBcIuemj+a4heW4glwiLFxuXHQgICAgXCIzNTAxODJcIjogXCLplb/kuZDluIJcIixcblx0ICAgIFwiMzUwMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM1MDIwMFwiOiBcIuWOpumXqOW4glwiLFxuXHQgICAgXCIzNTAyMDNcIjogXCLmgJ3mmI7ljLpcIixcblx0ICAgIFwiMzUwMjA1XCI6IFwi5rW35rKn5Yy6XCIsXG5cdCAgICBcIjM1MDIwNlwiOiBcIua5lumHjOWMulwiLFxuXHQgICAgXCIzNTAyMTFcIjogXCLpm4bnvo7ljLpcIixcblx0ICAgIFwiMzUwMjEyXCI6IFwi5ZCM5a6J5Yy6XCIsXG5cdCAgICBcIjM1MDIxM1wiOiBcIue/lOWuieWMulwiLFxuXHQgICAgXCIzNTAyMTRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwMzAwXCI6IFwi6I6G55Sw5biCXCIsXG5cdCAgICBcIjM1MDMwMlwiOiBcIuWfjuWOouWMulwiLFxuXHQgICAgXCIzNTAzMDNcIjogXCLmtrXmsZ/ljLpcIixcblx0ICAgIFwiMzUwMzA0XCI6IFwi6I2U5Z+O5Yy6XCIsXG5cdCAgICBcIjM1MDMwNVwiOiBcIuengOWxv+WMulwiLFxuXHQgICAgXCIzNTAzMjJcIjogXCLku5nmuLjljr9cIixcblx0ICAgIFwiMzUwMzIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM1MDQwMFwiOiBcIuS4ieaYjuW4glwiLFxuXHQgICAgXCIzNTA0MDJcIjogXCLmooXliJfljLpcIixcblx0ICAgIFwiMzUwNDAzXCI6IFwi5LiJ5YWD5Yy6XCIsXG5cdCAgICBcIjM1MDQyMVwiOiBcIuaYjua6quWOv1wiLFxuXHQgICAgXCIzNTA0MjNcIjogXCLmuIXmtYHljr9cIixcblx0ICAgIFwiMzUwNDI0XCI6IFwi5a6B5YyW5Y6/XCIsXG5cdCAgICBcIjM1MDQyNVwiOiBcIuWkp+eUsOWOv1wiLFxuXHQgICAgXCIzNTA0MjZcIjogXCLlsKTmuqrljr9cIixcblx0ICAgIFwiMzUwNDI3XCI6IFwi5rKZ5Y6/XCIsXG5cdCAgICBcIjM1MDQyOFwiOiBcIuWwhuS5kOWOv1wiLFxuXHQgICAgXCIzNTA0MjlcIjogXCLms7DlroHljr9cIixcblx0ICAgIFwiMzUwNDMwXCI6IFwi5bu65a6B5Y6/XCIsXG5cdCAgICBcIjM1MDQ4MVwiOiBcIuawuOWuieW4glwiLFxuXHQgICAgXCIzNTA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwNTAwXCI6IFwi5rOJ5bee5biCXCIsXG5cdCAgICBcIjM1MDUwMlwiOiBcIumypOWfjuWMulwiLFxuXHQgICAgXCIzNTA1MDNcIjogXCLkuLDms73ljLpcIixcblx0ICAgIFwiMzUwNTA0XCI6IFwi5rSb5rGf5Yy6XCIsXG5cdCAgICBcIjM1MDUwNVwiOiBcIuaziea4r+WMulwiLFxuXHQgICAgXCIzNTA1MjFcIjogXCLmg6Dlronljr9cIixcblx0ICAgIFwiMzUwNTI0XCI6IFwi5a6J5rqq5Y6/XCIsXG5cdCAgICBcIjM1MDUyNVwiOiBcIuawuOaYpeWOv1wiLFxuXHQgICAgXCIzNTA1MjZcIjogXCLlvrfljJbljr9cIixcblx0ICAgIFwiMzUwNTI3XCI6IFwi6YeR6Zeo5Y6/XCIsXG5cdCAgICBcIjM1MDU4MVwiOiBcIuefs+eLruW4glwiLFxuXHQgICAgXCIzNTA1ODJcIjogXCLmmYvmsZ/luIJcIixcblx0ICAgIFwiMzUwNTgzXCI6IFwi5Y2X5a6J5biCXCIsXG5cdCAgICBcIjM1MDU4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNTA2MDBcIjogXCLmvLPlt57luIJcIixcblx0ICAgIFwiMzUwNjAyXCI6IFwi6IqX5Z+O5Yy6XCIsXG5cdCAgICBcIjM1MDYwM1wiOiBcIum+meaWh+WMulwiLFxuXHQgICAgXCIzNTA2MjJcIjogXCLkupHpnITljr9cIixcblx0ICAgIFwiMzUwNjIzXCI6IFwi5ryz5rWm5Y6/XCIsXG5cdCAgICBcIjM1MDYyNFwiOiBcIuivj+WuieWOv1wiLFxuXHQgICAgXCIzNTA2MjVcIjogXCLplb/ms7Dljr9cIixcblx0ICAgIFwiMzUwNjI2XCI6IFwi5Lic5bGx5Y6/XCIsXG5cdCAgICBcIjM1MDYyN1wiOiBcIuWNl+mdluWOv1wiLFxuXHQgICAgXCIzNTA2MjhcIjogXCLlubPlkozljr9cIixcblx0ICAgIFwiMzUwNjI5XCI6IFwi5Y2O5a6J5Y6/XCIsXG5cdCAgICBcIjM1MDY4MVwiOiBcIum+mea1t+W4glwiLFxuXHQgICAgXCIzNTA2ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwNzAwXCI6IFwi5Y2X5bmz5biCXCIsXG5cdCAgICBcIjM1MDcwMlwiOiBcIuW7tuW5s+WMulwiLFxuXHQgICAgXCIzNTA3MjFcIjogXCLpobrmmIzljr9cIixcblx0ICAgIFwiMzUwNzIyXCI6IFwi5rWm5Z+O5Y6/XCIsXG5cdCAgICBcIjM1MDcyM1wiOiBcIuWFieazveWOv1wiLFxuXHQgICAgXCIzNTA3MjRcIjogXCLmnb7muqrljr9cIixcblx0ICAgIFwiMzUwNzI1XCI6IFwi5pS/5ZKM5Y6/XCIsXG5cdCAgICBcIjM1MDc4MVwiOiBcIumCteatpuW4glwiLFxuXHQgICAgXCIzNTA3ODJcIjogXCLmrablpLflsbHluIJcIixcblx0ICAgIFwiMzUwNzgzXCI6IFwi5bu655Ov5biCXCIsXG5cdCAgICBcIjM1MDc4NFwiOiBcIuW7uumYs+W4glwiLFxuXHQgICAgXCIzNTA3ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwODAwXCI6IFwi6b6Z5bKp5biCXCIsXG5cdCAgICBcIjM1MDgwMlwiOiBcIuaWsOe9l+WMulwiLFxuXHQgICAgXCIzNTA4MjFcIjogXCLplb/msYDljr9cIixcblx0ICAgIFwiMzUwODIyXCI6IFwi5rC45a6a5Y6/XCIsXG5cdCAgICBcIjM1MDgyM1wiOiBcIuS4iuadreWOv1wiLFxuXHQgICAgXCIzNTA4MjRcIjogXCLmrablubPljr9cIixcblx0ICAgIFwiMzUwODI1XCI6IFwi6L+e5Z+O5Y6/XCIsXG5cdCAgICBcIjM1MDg4MVwiOiBcIua8s+W5s+W4glwiLFxuXHQgICAgXCIzNTA4ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwOTAwXCI6IFwi5a6B5b635biCXCIsXG5cdCAgICBcIjM1MDkwMlwiOiBcIuiVieWfjuWMulwiLFxuXHQgICAgXCIzNTA5MjFcIjogXCLpnJ7mtabljr9cIixcblx0ICAgIFwiMzUwOTIyXCI6IFwi5Y+k55Sw5Y6/XCIsXG5cdCAgICBcIjM1MDkyM1wiOiBcIuWxj+WNl+WOv1wiLFxuXHQgICAgXCIzNTA5MjRcIjogXCLlr7/lroHljr9cIixcblx0ICAgIFwiMzUwOTI1XCI6IFwi5ZGo5a6B5Y6/XCIsXG5cdCAgICBcIjM1MDkyNlwiOiBcIuafmOiNo+WOv1wiLFxuXHQgICAgXCIzNTA5ODFcIjogXCLnpo/lronluIJcIixcblx0ICAgIFwiMzUwOTgyXCI6IFwi56aP6byO5biCXCIsXG5cdCAgICBcIjM1MDk4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAwMDBcIjogXCLmsZ/opb/nnIFcIixcblx0ICAgIFwiMzYwMTAwXCI6IFwi5Y2X5piM5biCXCIsXG5cdCAgICBcIjM2MDEwMlwiOiBcIuS4nOa5luWMulwiLFxuXHQgICAgXCIzNjAxMDNcIjogXCLopb/muZbljLpcIixcblx0ICAgIFwiMzYwMTA0XCI6IFwi6Z2S5LqR6LCx5Yy6XCIsXG5cdCAgICBcIjM2MDEwNVwiOiBcIua5vumHjOWMulwiLFxuXHQgICAgXCIzNjAxMTFcIjogXCLpnZLlsbHmuZbljLpcIixcblx0ICAgIFwiMzYwMTIxXCI6IFwi5Y2X5piM5Y6/XCIsXG5cdCAgICBcIjM2MDEyMlwiOiBcIuaWsOW7uuWOv1wiLFxuXHQgICAgXCIzNjAxMjNcIjogXCLlronkuYnljr9cIixcblx0ICAgIFwiMzYwMTI0XCI6IFwi6L+b6LSk5Y6/XCIsXG5cdCAgICBcIjM2MDEyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAyMDBcIjogXCLmma/lvrfplYfluIJcIixcblx0ICAgIFwiMzYwMjAyXCI6IFwi5piM5rGf5Yy6XCIsXG5cdCAgICBcIjM2MDIwM1wiOiBcIuePoOWxseWMulwiLFxuXHQgICAgXCIzNjAyMjJcIjogXCLmta7mooHljr9cIixcblx0ICAgIFwiMzYwMjgxXCI6IFwi5LmQ5bmz5biCXCIsXG5cdCAgICBcIjM2MDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAzMDBcIjogXCLokI3kuaHluIJcIixcblx0ICAgIFwiMzYwMzAyXCI6IFwi5a6J5rqQ5Yy6XCIsXG5cdCAgICBcIjM2MDMxM1wiOiBcIua5mOS4nOWMulwiLFxuXHQgICAgXCIzNjAzMjFcIjogXCLojrLoirHljr9cIixcblx0ICAgIFwiMzYwMzIyXCI6IFwi5LiK5qCX5Y6/XCIsXG5cdCAgICBcIjM2MDMyM1wiOiBcIuiKpua6quWOv1wiLFxuXHQgICAgXCIzNjAzMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYwNDAwXCI6IFwi5Lmd5rGf5biCXCIsXG5cdCAgICBcIjM2MDQwMlwiOiBcIuW6kOWxseWMulwiLFxuXHQgICAgXCIzNjA0MDNcIjogXCLmtZTpmLPljLpcIixcblx0ICAgIFwiMzYwNDIxXCI6IFwi5Lmd5rGf5Y6/XCIsXG5cdCAgICBcIjM2MDQyM1wiOiBcIuatpuWugeWOv1wiLFxuXHQgICAgXCIzNjA0MjRcIjogXCLkv67msLTljr9cIixcblx0ICAgIFwiMzYwNDI1XCI6IFwi5rC45L+u5Y6/XCIsXG5cdCAgICBcIjM2MDQyNlwiOiBcIuW+t+WuieWOv1wiLFxuXHQgICAgXCIzNjA0MjdcIjogXCLmmJ/lrZDljr9cIixcblx0ICAgIFwiMzYwNDI4XCI6IFwi6YO95piM5Y6/XCIsXG5cdCAgICBcIjM2MDQyOVwiOiBcIua5luWPo+WOv1wiLFxuXHQgICAgXCIzNjA0MzBcIjogXCLlva3ms73ljr9cIixcblx0ICAgIFwiMzYwNDgxXCI6IFwi55Ge5piM5biCXCIsXG5cdCAgICBcIjM2MDQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA0ODNcIjogXCLlhbHpnZLln47luIJcIixcblx0ICAgIFwiMzYwNTAwXCI6IFwi5paw5L2Z5biCXCIsXG5cdCAgICBcIjM2MDUwMlwiOiBcIua4neawtOWMulwiLFxuXHQgICAgXCIzNjA1MjFcIjogXCLliIblrpzljr9cIixcblx0ICAgIFwiMzYwNTIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM2MDYwMFwiOiBcIum5sOa9reW4glwiLFxuXHQgICAgXCIzNjA2MDJcIjogXCLmnIjmuZbljLpcIixcblx0ICAgIFwiMzYwNjIyXCI6IFwi5L2Z5rGf5Y6/XCIsXG5cdCAgICBcIjM2MDY4MVwiOiBcIui0tea6quW4glwiLFxuXHQgICAgXCIzNjA2ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYwNzAwXCI6IFwi6LWj5bee5biCXCIsXG5cdCAgICBcIjM2MDcwMlwiOiBcIueroOi0oeWMulwiLFxuXHQgICAgXCIzNjA3MjFcIjogXCLotaPljr9cIixcblx0ICAgIFwiMzYwNzIyXCI6IFwi5L+h5Liw5Y6/XCIsXG5cdCAgICBcIjM2MDcyM1wiOiBcIuWkp+S9meWOv1wiLFxuXHQgICAgXCIzNjA3MjRcIjogXCLkuIrnirnljr9cIixcblx0ICAgIFwiMzYwNzI1XCI6IFwi5bSH5LmJ5Y6/XCIsXG5cdCAgICBcIjM2MDcyNlwiOiBcIuWuiei/nOWOv1wiLFxuXHQgICAgXCIzNjA3MjdcIjogXCLpvpnljZfljr9cIixcblx0ICAgIFwiMzYwNzI4XCI6IFwi5a6a5Y2X5Y6/XCIsXG5cdCAgICBcIjM2MDcyOVwiOiBcIuWFqOWNl+WOv1wiLFxuXHQgICAgXCIzNjA3MzBcIjogXCLlroHpg73ljr9cIixcblx0ICAgIFwiMzYwNzMxXCI6IFwi5LqO6YO95Y6/XCIsXG5cdCAgICBcIjM2MDczMlwiOiBcIuWFtOWbveWOv1wiLFxuXHQgICAgXCIzNjA3MzNcIjogXCLkvJrmmIzljr9cIixcblx0ICAgIFwiMzYwNzM0XCI6IFwi5a+75LmM5Y6/XCIsXG5cdCAgICBcIjM2MDczNVwiOiBcIuefs+WfjuWOv1wiLFxuXHQgICAgXCIzNjA3ODFcIjogXCLnkZ7ph5HluIJcIixcblx0ICAgIFwiMzYwNzgyXCI6IFwi5Y2X5bq35biCXCIsXG5cdCAgICBcIjM2MDc4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA4MDBcIjogXCLlkInlronluIJcIixcblx0ICAgIFwiMzYwODAyXCI6IFwi5ZCJ5bee5Yy6XCIsXG5cdCAgICBcIjM2MDgwM1wiOiBcIumdkuWOn+WMulwiLFxuXHQgICAgXCIzNjA4MjFcIjogXCLlkInlronljr9cIixcblx0ICAgIFwiMzYwODIyXCI6IFwi5ZCJ5rC05Y6/XCIsXG5cdCAgICBcIjM2MDgyM1wiOiBcIuWzoeaxn+WOv1wiLFxuXHQgICAgXCIzNjA4MjRcIjogXCLmlrDlubLljr9cIixcblx0ICAgIFwiMzYwODI1XCI6IFwi5rC45Liw5Y6/XCIsXG5cdCAgICBcIjM2MDgyNlwiOiBcIuazsOWSjOWOv1wiLFxuXHQgICAgXCIzNjA4MjdcIjogXCLpgYLlt53ljr9cIixcblx0ICAgIFwiMzYwODI4XCI6IFwi5LiH5a6J5Y6/XCIsXG5cdCAgICBcIjM2MDgyOVwiOiBcIuWuieemj+WOv1wiLFxuXHQgICAgXCIzNjA4MzBcIjogXCLmsLjmlrDljr9cIixcblx0ICAgIFwiMzYwODgxXCI6IFwi5LqV5YaI5bGx5biCXCIsXG5cdCAgICBcIjM2MDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA5MDBcIjogXCLlrpzmmKXluIJcIixcblx0ICAgIFwiMzYwOTAyXCI6IFwi6KKB5bee5Yy6XCIsXG5cdCAgICBcIjM2MDkyMVwiOiBcIuWlieaWsOWOv1wiLFxuXHQgICAgXCIzNjA5MjJcIjogXCLkuIfovb3ljr9cIixcblx0ICAgIFwiMzYwOTIzXCI6IFwi5LiK6auY5Y6/XCIsXG5cdCAgICBcIjM2MDkyNFwiOiBcIuWunOS4sOWOv1wiLFxuXHQgICAgXCIzNjA5MjVcIjogXCLpnZblronljr9cIixcblx0ICAgIFwiMzYwOTI2XCI6IFwi6ZOc6byT5Y6/XCIsXG5cdCAgICBcIjM2MDk4MVwiOiBcIuS4sOWfjuW4glwiLFxuXHQgICAgXCIzNjA5ODJcIjogXCLmqJ/moJHluIJcIixcblx0ICAgIFwiMzYwOTgzXCI6IFwi6auY5a6J5biCXCIsXG5cdCAgICBcIjM2MDk4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjEwMDBcIjogXCLmiprlt57luIJcIixcblx0ICAgIFwiMzYxMDAyXCI6IFwi5Li05bed5Yy6XCIsXG5cdCAgICBcIjM2MTAyMVwiOiBcIuWNl+WfjuWOv1wiLFxuXHQgICAgXCIzNjEwMjJcIjogXCLpu47lt53ljr9cIixcblx0ICAgIFwiMzYxMDIzXCI6IFwi5Y2X5Liw5Y6/XCIsXG5cdCAgICBcIjM2MTAyNFwiOiBcIuW0h+S7geWOv1wiLFxuXHQgICAgXCIzNjEwMjVcIjogXCLkuZDlronljr9cIixcblx0ICAgIFwiMzYxMDI2XCI6IFwi5a6c6buE5Y6/XCIsXG5cdCAgICBcIjM2MTAyN1wiOiBcIumHkea6quWOv1wiLFxuXHQgICAgXCIzNjEwMjhcIjogXCLotYTmuqrljr9cIixcblx0ICAgIFwiMzYxMDI5XCI6IFwi5Lic5Lmh5Y6/XCIsXG5cdCAgICBcIjM2MTAzMFwiOiBcIuW5v+aYjOWOv1wiLFxuXHQgICAgXCIzNjEwMzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYxMTAwXCI6IFwi5LiK6aW25biCXCIsXG5cdCAgICBcIjM2MTEwMlwiOiBcIuS/oeW3nuWMulwiLFxuXHQgICAgXCIzNjExMjFcIjogXCLkuIrppbbljr9cIixcblx0ICAgIFwiMzYxMTIyXCI6IFwi5bm/5Liw5Y6/XCIsXG5cdCAgICBcIjM2MTEyM1wiOiBcIueOieWxseWOv1wiLFxuXHQgICAgXCIzNjExMjRcIjogXCLpk4XlsbHljr9cIixcblx0ICAgIFwiMzYxMTI1XCI6IFwi5qiq5bOw5Y6/XCIsXG5cdCAgICBcIjM2MTEyNlwiOiBcIuW8i+mYs+WOv1wiLFxuXHQgICAgXCIzNjExMjdcIjogXCLkvZnlubLljr9cIixcblx0ICAgIFwiMzYxMTI4XCI6IFwi6YSx6Ziz5Y6/XCIsXG5cdCAgICBcIjM2MTEyOVwiOiBcIuS4h+W5tOWOv1wiLFxuXHQgICAgXCIzNjExMzBcIjogXCLlqbrmupDljr9cIixcblx0ICAgIFwiMzYxMTgxXCI6IFwi5b635YW05biCXCIsXG5cdCAgICBcIjM2MTE4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzAwMDBcIjogXCLlsbHkuJznnIFcIixcblx0ICAgIFwiMzcwMTAwXCI6IFwi5rWO5Y2X5biCXCIsXG5cdCAgICBcIjM3MDEwMlwiOiBcIuWOhuS4i+WMulwiLFxuXHQgICAgXCIzNzAxMDNcIjogXCLluILkuK3ljLpcIixcblx0ICAgIFwiMzcwMTA0XCI6IFwi5qeQ6I2r5Yy6XCIsXG5cdCAgICBcIjM3MDEwNVwiOiBcIuWkqeahpeWMulwiLFxuXHQgICAgXCIzNzAxMTJcIjogXCLljobln47ljLpcIixcblx0ICAgIFwiMzcwMTEzXCI6IFwi6ZW/5riF5Yy6XCIsXG5cdCAgICBcIjM3MDEyNFwiOiBcIuW5s+mYtOWOv1wiLFxuXHQgICAgXCIzNzAxMjVcIjogXCLmtY7pmLPljr9cIixcblx0ICAgIFwiMzcwMTI2XCI6IFwi5ZWG5rKz5Y6/XCIsXG5cdCAgICBcIjM3MDE4MVwiOiBcIueroOS4mOW4glwiLFxuXHQgICAgXCIzNzAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwMjAwXCI6IFwi6Z2S5bKb5biCXCIsXG5cdCAgICBcIjM3MDIwMlwiOiBcIuW4guWNl+WMulwiLFxuXHQgICAgXCIzNzAyMDNcIjogXCLluILljJfljLpcIixcblx0ICAgIFwiMzcwMjExXCI6IFwi6buE5bKb5Yy6XCIsXG5cdCAgICBcIjM3MDIxMlwiOiBcIuW0guWxseWMulwiLFxuXHQgICAgXCIzNzAyMTNcIjogXCLmnY7msqfljLpcIixcblx0ICAgIFwiMzcwMjE0XCI6IFwi5Z+O6Ziz5Yy6XCIsXG5cdCAgICBcIjM3MDI4MVwiOiBcIuiDtuW3nuW4glwiLFxuXHQgICAgXCIzNzAyODJcIjogXCLljbPloqjluIJcIixcblx0ICAgIFwiMzcwMjgzXCI6IFwi5bmz5bqm5biCXCIsXG5cdCAgICBcIjM3MDI4NVwiOiBcIuiOseilv+W4glwiLFxuXHQgICAgXCIzNzAyODZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwMzAwXCI6IFwi5reE5Y2a5biCXCIsXG5cdCAgICBcIjM3MDMwMlwiOiBcIua3hOW3neWMulwiLFxuXHQgICAgXCIzNzAzMDNcIjogXCLlvKDlupfljLpcIixcblx0ICAgIFwiMzcwMzA0XCI6IFwi5Y2a5bGx5Yy6XCIsXG5cdCAgICBcIjM3MDMwNVwiOiBcIuS4tOa3hOWMulwiLFxuXHQgICAgXCIzNzAzMDZcIjogXCLlkajmnZHljLpcIixcblx0ICAgIFwiMzcwMzIxXCI6IFwi5qGT5Y+w5Y6/XCIsXG5cdCAgICBcIjM3MDMyMlwiOiBcIumrmOmdkuWOv1wiLFxuXHQgICAgXCIzNzAzMjNcIjogXCLmsoLmupDljr9cIixcblx0ICAgIFwiMzcwMzI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDQwMFwiOiBcIuaeo+W6hOW4glwiLFxuXHQgICAgXCIzNzA0MDJcIjogXCLluILkuK3ljLpcIixcblx0ICAgIFwiMzcwNDAzXCI6IFwi6Jab5Z+O5Yy6XCIsXG5cdCAgICBcIjM3MDQwNFwiOiBcIuWzhOWfjuWMulwiLFxuXHQgICAgXCIzNzA0MDVcIjogXCLlj7DlhL/luoTljLpcIixcblx0ICAgIFwiMzcwNDA2XCI6IFwi5bGx5Lqt5Yy6XCIsXG5cdCAgICBcIjM3MDQ4MVwiOiBcIua7leW3nuW4glwiLFxuXHQgICAgXCIzNzA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwNTAwXCI6IFwi5Lic6JCl5biCXCIsXG5cdCAgICBcIjM3MDUwMlwiOiBcIuS4nOiQpeWMulwiLFxuXHQgICAgXCIzNzA1MDNcIjogXCLmsrPlj6PljLpcIixcblx0ICAgIFwiMzcwNTIxXCI6IFwi5Z6m5Yip5Y6/XCIsXG5cdCAgICBcIjM3MDUyMlwiOiBcIuWIqea0peWOv1wiLFxuXHQgICAgXCIzNzA1MjNcIjogXCLlub/ppbbljr9cIixcblx0ICAgIFwiMzcwNTkxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDYwMFwiOiBcIueDn+WPsOW4glwiLFxuXHQgICAgXCIzNzA2MDJcIjogXCLoip3nvZjljLpcIixcblx0ICAgIFwiMzcwNjExXCI6IFwi56aP5bGx5Yy6XCIsXG5cdCAgICBcIjM3MDYxMlwiOiBcIueJn+W5s+WMulwiLFxuXHQgICAgXCIzNzA2MTNcIjogXCLojrHlsbHljLpcIixcblx0ICAgIFwiMzcwNjM0XCI6IFwi6ZW/5bKb5Y6/XCIsXG5cdCAgICBcIjM3MDY4MVwiOiBcIum+meWPo+W4glwiLFxuXHQgICAgXCIzNzA2ODJcIjogXCLojrHpmLPluIJcIixcblx0ICAgIFwiMzcwNjgzXCI6IFwi6I6x5bee5biCXCIsXG5cdCAgICBcIjM3MDY4NFwiOiBcIuiTrOiOseW4glwiLFxuXHQgICAgXCIzNzA2ODVcIjogXCLmi5vov5zluIJcIixcblx0ICAgIFwiMzcwNjg2XCI6IFwi5qCW6Zye5biCXCIsXG5cdCAgICBcIjM3MDY4N1wiOiBcIua1t+mYs+W4glwiLFxuXHQgICAgXCIzNzA2ODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwNzAwXCI6IFwi5r2N5Z2K5biCXCIsXG5cdCAgICBcIjM3MDcwMlwiOiBcIua9jeWfjuWMulwiLFxuXHQgICAgXCIzNzA3MDNcIjogXCLlr5Lkuq3ljLpcIixcblx0ICAgIFwiMzcwNzA0XCI6IFwi5Z2K5a2Q5Yy6XCIsXG5cdCAgICBcIjM3MDcwNVwiOiBcIuWljuaWh+WMulwiLFxuXHQgICAgXCIzNzA3MjRcIjogXCLkuLTmnJDljr9cIixcblx0ICAgIFwiMzcwNzI1XCI6IFwi5piM5LmQ5Y6/XCIsXG5cdCAgICBcIjM3MDc4MVwiOiBcIumdkuW3nuW4glwiLFxuXHQgICAgXCIzNzA3ODJcIjogXCLor7jln47luIJcIixcblx0ICAgIFwiMzcwNzgzXCI6IFwi5a+/5YWJ5biCXCIsXG5cdCAgICBcIjM3MDc4NFwiOiBcIuWuieS4mOW4glwiLFxuXHQgICAgXCIzNzA3ODVcIjogXCLpq5jlr4bluIJcIixcblx0ICAgIFwiMzcwNzg2XCI6IFwi5piM6YKR5biCXCIsXG5cdCAgICBcIjM3MDc4N1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzA4MDBcIjogXCLmtY7lroHluIJcIixcblx0ICAgIFwiMzcwODAyXCI6IFwi5biC5Lit5Yy6XCIsXG5cdCAgICBcIjM3MDgxMVwiOiBcIuS7u+WfjuWMulwiLFxuXHQgICAgXCIzNzA4MjZcIjogXCLlvq7lsbHljr9cIixcblx0ICAgIFwiMzcwODI3XCI6IFwi6bG85Y+w5Y6/XCIsXG5cdCAgICBcIjM3MDgyOFwiOiBcIumHkeS5oeWOv1wiLFxuXHQgICAgXCIzNzA4MjlcIjogXCLlmInnpaXljr9cIixcblx0ICAgIFwiMzcwODMwXCI6IFwi5rG25LiK5Y6/XCIsXG5cdCAgICBcIjM3MDgzMVwiOiBcIuazl+awtOWOv1wiLFxuXHQgICAgXCIzNzA4MzJcIjogXCLmooHlsbHljr9cIixcblx0ICAgIFwiMzcwODgxXCI6IFwi5puy6Zic5biCXCIsXG5cdCAgICBcIjM3MDg4MlwiOiBcIuWFluW3nuW4glwiLFxuXHQgICAgXCIzNzA4ODNcIjogXCLpgrnln47luIJcIixcblx0ICAgIFwiMzcwODg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDkwMFwiOiBcIuazsOWuieW4glwiLFxuXHQgICAgXCIzNzA5MDJcIjogXCLms7DlsbHljLpcIixcblx0ICAgIFwiMzcwOTAzXCI6IFwi5bKx5bKz5Yy6XCIsXG5cdCAgICBcIjM3MDkyMVwiOiBcIuWugemYs+WOv1wiLFxuXHQgICAgXCIzNzA5MjNcIjogXCLkuJzlubPljr9cIixcblx0ICAgIFwiMzcwOTgyXCI6IFwi5paw5rOw5biCXCIsXG5cdCAgICBcIjM3MDk4M1wiOiBcIuiCpeWfjuW4glwiLFxuXHQgICAgXCIzNzA5ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMDAwXCI6IFwi5aiB5rW35biCXCIsXG5cdCAgICBcIjM3MTAwMlwiOiBcIueOr+e/oOWMulwiLFxuXHQgICAgXCIzNzEwODFcIjogXCLmlofnmbvluIJcIixcblx0ICAgIFwiMzcxMDgyXCI6IFwi6I2j5oiQ5biCXCIsXG5cdCAgICBcIjM3MTA4M1wiOiBcIuS5s+WxseW4glwiLFxuXHQgICAgXCIzNzEwODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMTAwXCI6IFwi5pel54Wn5biCXCIsXG5cdCAgICBcIjM3MTEwMlwiOiBcIuS4nOa4r+WMulwiLFxuXHQgICAgXCIzNzExMDNcIjogXCLlsprlsbHljLpcIixcblx0ICAgIFwiMzcxMTIxXCI6IFwi5LqU6I6y5Y6/XCIsXG5cdCAgICBcIjM3MTEyMlwiOiBcIuiOkuWOv1wiLFxuXHQgICAgXCIzNzExMjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMjAwXCI6IFwi6I6x6Iqc5biCXCIsXG5cdCAgICBcIjM3MTIwMlwiOiBcIuiOseWfjuWMulwiLFxuXHQgICAgXCIzNzEyMDNcIjogXCLpkqLln47ljLpcIixcblx0ICAgIFwiMzcxMjA0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MTMwMFwiOiBcIuS4tOayguW4glwiLFxuXHQgICAgXCIzNzEzMDJcIjogXCLlhbDlsbHljLpcIixcblx0ICAgIFwiMzcxMzExXCI6IFwi572X5bqE5Yy6XCIsXG5cdCAgICBcIjM3MTMxMlwiOiBcIuays+S4nOWMulwiLFxuXHQgICAgXCIzNzEzMjFcIjogXCLmsoLljZfljr9cIixcblx0ICAgIFwiMzcxMzIyXCI6IFwi6YOv5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTMyM1wiOiBcIuayguawtOWOv1wiLFxuXHQgICAgXCIzNzEzMjRcIjogXCLoi43lsbHljr9cIixcblx0ICAgIFwiMzcxMzI1XCI6IFwi6LS55Y6/XCIsXG5cdCAgICBcIjM3MTMyNlwiOiBcIuW5s+mCkeWOv1wiLFxuXHQgICAgXCIzNzEzMjdcIjogXCLojpLljZfljr9cIixcblx0ICAgIFwiMzcxMzI4XCI6IFwi6JKZ6Zi05Y6/XCIsXG5cdCAgICBcIjM3MTMyOVwiOiBcIuS4tOayreWOv1wiLFxuXHQgICAgXCIzNzEzMzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxNDAwXCI6IFwi5b635bee5biCXCIsXG5cdCAgICBcIjM3MTQwMlwiOiBcIuW+t+WfjuWMulwiLFxuXHQgICAgXCIzNzE0MjFcIjogXCLpmbXljr9cIixcblx0ICAgIFwiMzcxNDIyXCI6IFwi5a6B5rSl5Y6/XCIsXG5cdCAgICBcIjM3MTQyM1wiOiBcIuW6huS6keWOv1wiLFxuXHQgICAgXCIzNzE0MjRcIjogXCLkuLTpgpHljr9cIixcblx0ICAgIFwiMzcxNDI1XCI6IFwi6b2Q5rKz5Y6/XCIsXG5cdCAgICBcIjM3MTQyNlwiOiBcIuW5s+WOn+WOv1wiLFxuXHQgICAgXCIzNzE0MjdcIjogXCLlpI/mtKXljr9cIixcblx0ICAgIFwiMzcxNDI4XCI6IFwi5q2m5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTQ4MVwiOiBcIuS5kOmZteW4glwiLFxuXHQgICAgXCIzNzE0ODJcIjogXCLnprnln47luIJcIixcblx0ICAgIFwiMzcxNDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MTUwMFwiOiBcIuiBiuWfjuW4glwiLFxuXHQgICAgXCIzNzE1MDJcIjogXCLkuJzmmIzlupzljLpcIixcblx0ICAgIFwiMzcxNTIxXCI6IFwi6Ziz6LC35Y6/XCIsXG5cdCAgICBcIjM3MTUyMlwiOiBcIuiOmOWOv1wiLFxuXHQgICAgXCIzNzE1MjNcIjogXCLojIzlubPljr9cIixcblx0ICAgIFwiMzcxNTI0XCI6IFwi5Lic6Zi/5Y6/XCIsXG5cdCAgICBcIjM3MTUyNVwiOiBcIuWGoOWOv1wiLFxuXHQgICAgXCIzNzE1MjZcIjogXCLpq5jllJDljr9cIixcblx0ICAgIFwiMzcxNTgxXCI6IFwi5Li05riF5biCXCIsXG5cdCAgICBcIjM3MTU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzE2MDBcIjogXCLmu6jlt57luIJcIixcblx0ICAgIFwiMzcxNjAyXCI6IFwi5ruo5Z+O5Yy6XCIsXG5cdCAgICBcIjM3MTYyMVwiOiBcIuaDoOawkeWOv1wiLFxuXHQgICAgXCIzNzE2MjJcIjogXCLpmLPkv6Hljr9cIixcblx0ICAgIFwiMzcxNjIzXCI6IFwi5peg5qOj5Y6/XCIsXG5cdCAgICBcIjM3MTYyNFwiOiBcIuayvuWMluWOv1wiLFxuXHQgICAgXCIzNzE2MjVcIjogXCLljZrlhbTljr9cIixcblx0ICAgIFwiMzcxNjI2XCI6IFwi6YK55bmz5Y6/XCIsXG5cdCAgICBcIjM3MTYyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzE3MDBcIjogXCLoj4/ms73luIJcIixcblx0ICAgIFwiMzcxNzAyXCI6IFwi54mh5Li55Yy6XCIsXG5cdCAgICBcIjM3MTcyMVwiOiBcIuabueWOv1wiLFxuXHQgICAgXCIzNzE3MjJcIjogXCLljZXljr9cIixcblx0ICAgIFwiMzcxNzIzXCI6IFwi5oiQ5q2m5Y6/XCIsXG5cdCAgICBcIjM3MTcyNFwiOiBcIuW3qOmHjuWOv1wiLFxuXHQgICAgXCIzNzE3MjVcIjogXCLpg5Pln47ljr9cIixcblx0ICAgIFwiMzcxNzI2XCI6IFwi6YSE5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTcyN1wiOiBcIuWumumZtuWOv1wiLFxuXHQgICAgXCIzNzE3MjhcIjogXCLkuJzmmI7ljr9cIixcblx0ICAgIFwiMzcxNzI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDAwMFwiOiBcIuays+WNl+ecgVwiLFxuXHQgICAgXCI0MTAxMDBcIjogXCLpg5Hlt57luIJcIixcblx0ICAgIFwiNDEwMTAyXCI6IFwi5Lit5Y6f5Yy6XCIsXG5cdCAgICBcIjQxMDEwM1wiOiBcIuS6jOS4g+WMulwiLFxuXHQgICAgXCI0MTAxMDRcIjogXCLnrqHln47lm57ml4/ljLpcIixcblx0ICAgIFwiNDEwMTA1XCI6IFwi6YeR5rC05Yy6XCIsXG5cdCAgICBcIjQxMDEwNlwiOiBcIuS4iuihl+WMulwiLFxuXHQgICAgXCI0MTAxMDhcIjogXCLmg6DmtY7ljLpcIixcblx0ICAgIFwiNDEwMTIyXCI6IFwi5Lit54mf5Y6/XCIsXG5cdCAgICBcIjQxMDE4MVwiOiBcIuW3qeS5ieW4glwiLFxuXHQgICAgXCI0MTAxODJcIjogXCLojaXpmLPluIJcIixcblx0ICAgIFwiNDEwMTgzXCI6IFwi5paw5a+G5biCXCIsXG5cdCAgICBcIjQxMDE4NFwiOiBcIuaWsOmDkeW4glwiLFxuXHQgICAgXCI0MTAxODVcIjogXCLnmbvlsIHluIJcIixcblx0ICAgIFwiNDEwMTg4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDIwMFwiOiBcIuW8gOWwgeW4glwiLFxuXHQgICAgXCI0MTAyMDJcIjogXCLpvpnkuq3ljLpcIixcblx0ICAgIFwiNDEwMjAzXCI6IFwi6aG65rKz5Zue5peP5Yy6XCIsXG5cdCAgICBcIjQxMDIwNFwiOiBcIum8k+alvOWMulwiLFxuXHQgICAgXCI0MTAyMDVcIjogXCLnprnnjovlj7DljLpcIixcblx0ICAgIFwiNDEwMjExXCI6IFwi6YeR5piO5Yy6XCIsXG5cdCAgICBcIjQxMDIyMVwiOiBcIuadnuWOv1wiLFxuXHQgICAgXCI0MTAyMjJcIjogXCLpgJrorrjljr9cIixcblx0ICAgIFwiNDEwMjIzXCI6IFwi5bCJ5rCP5Y6/XCIsXG5cdCAgICBcIjQxMDIyNFwiOiBcIuW8gOWwgeWOv1wiLFxuXHQgICAgXCI0MTAyMjVcIjogXCLlhbDogIPljr9cIixcblx0ICAgIFwiNDEwMjI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDMwMFwiOiBcIua0m+mYs+W4glwiLFxuXHQgICAgXCI0MTAzMDJcIjogXCLogIHln47ljLpcIixcblx0ICAgIFwiNDEwMzAzXCI6IFwi6KW/5bel5Yy6XCIsXG5cdCAgICBcIjQxMDMwNFwiOiBcIueAjeays+WbnuaXj+WMulwiLFxuXHQgICAgXCI0MTAzMDVcIjogXCLmtqfopb/ljLpcIixcblx0ICAgIFwiNDEwMzA2XCI6IFwi5ZCJ5Yip5Yy6XCIsXG5cdCAgICBcIjQxMDMwN1wiOiBcIua0m+m+meWMulwiLFxuXHQgICAgXCI0MTAzMjJcIjogXCLlrZ/mtKXljr9cIixcblx0ICAgIFwiNDEwMzIzXCI6IFwi5paw5a6J5Y6/XCIsXG5cdCAgICBcIjQxMDMyNFwiOiBcIuagvuW3neWOv1wiLFxuXHQgICAgXCI0MTAzMjVcIjogXCLltanljr9cIixcblx0ICAgIFwiNDEwMzI2XCI6IFwi5rGd6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMDMyN1wiOiBcIuWunOmYs+WOv1wiLFxuXHQgICAgXCI0MTAzMjhcIjogXCLmtJvlroHljr9cIixcblx0ICAgIFwiNDEwMzI5XCI6IFwi5LyK5bed5Y6/XCIsXG5cdCAgICBcIjQxMDM4MVwiOiBcIuWBg+W4iOW4glwiLFxuXHQgICAgXCI0MTA0MDBcIjogXCLlubPpobblsbHluIJcIixcblx0ICAgIFwiNDEwNDAyXCI6IFwi5paw5Y2O5Yy6XCIsXG5cdCAgICBcIjQxMDQwM1wiOiBcIuWNq+S4nOWMulwiLFxuXHQgICAgXCI0MTA0MDRcIjogXCLnn7PpvpnljLpcIixcblx0ICAgIFwiNDEwNDExXCI6IFwi5rmb5rKz5Yy6XCIsXG5cdCAgICBcIjQxMDQyMVwiOiBcIuWuneS4sOWOv1wiLFxuXHQgICAgXCI0MTA0MjJcIjogXCLlj7bljr9cIixcblx0ICAgIFwiNDEwNDIzXCI6IFwi6bKB5bGx5Y6/XCIsXG5cdCAgICBcIjQxMDQyNVwiOiBcIumDj+WOv1wiLFxuXHQgICAgXCI0MTA0ODFcIjogXCLoiJ7pkqLluIJcIixcblx0ICAgIFwiNDEwNDgyXCI6IFwi5rGd5bee5biCXCIsXG5cdCAgICBcIjQxMDQ4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA1MDBcIjogXCLlronpmLPluIJcIixcblx0ICAgIFwiNDEwNTAyXCI6IFwi5paH5bOw5Yy6XCIsXG5cdCAgICBcIjQxMDUwM1wiOiBcIuWMl+WFs+WMulwiLFxuXHQgICAgXCI0MTA1MDVcIjogXCLmrrfpg73ljLpcIixcblx0ICAgIFwiNDEwNTA2XCI6IFwi6b6Z5a6J5Yy6XCIsXG5cdCAgICBcIjQxMDUyMlwiOiBcIuWuiemYs+WOv1wiLFxuXHQgICAgXCI0MTA1MjNcIjogXCLmsaTpmLTljr9cIixcblx0ICAgIFwiNDEwNTI2XCI6IFwi5ruR5Y6/XCIsXG5cdCAgICBcIjQxMDUyN1wiOiBcIuWGhem7hOWOv1wiLFxuXHQgICAgXCI0MTA1ODFcIjogXCLmnpflt57luIJcIixcblx0ICAgIFwiNDEwNTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDYwMFwiOiBcIum5pOWjgeW4glwiLFxuXHQgICAgXCI0MTA2MDJcIjogXCLpuaTlsbHljLpcIixcblx0ICAgIFwiNDEwNjAzXCI6IFwi5bGx5Z+O5Yy6XCIsXG5cdCAgICBcIjQxMDYxMVwiOiBcIua3h+a7qOWMulwiLFxuXHQgICAgXCI0MTA2MjFcIjogXCLmtZrljr9cIixcblx0ICAgIFwiNDEwNjIyXCI6IFwi5reH5Y6/XCIsXG5cdCAgICBcIjQxMDYyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA3MDBcIjogXCLmlrDkuaHluIJcIixcblx0ICAgIFwiNDEwNzAyXCI6IFwi57qi5peX5Yy6XCIsXG5cdCAgICBcIjQxMDcwM1wiOiBcIuWNq+a7qOWMulwiLFxuXHQgICAgXCI0MTA3MDRcIjogXCLlh6Tms4nljLpcIixcblx0ICAgIFwiNDEwNzExXCI6IFwi54mn6YeO5Yy6XCIsXG5cdCAgICBcIjQxMDcyMVwiOiBcIuaWsOS5oeWOv1wiLFxuXHQgICAgXCI0MTA3MjRcIjogXCLojrflmInljr9cIixcblx0ICAgIFwiNDEwNzI1XCI6IFwi5Y6f6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMDcyNlwiOiBcIuW7tua0peWOv1wiLFxuXHQgICAgXCI0MTA3MjdcIjogXCLlsIHkuJjljr9cIixcblx0ICAgIFwiNDEwNzI4XCI6IFwi6ZW/5Z6j5Y6/XCIsXG5cdCAgICBcIjQxMDc4MVwiOiBcIuWNq+i+ieW4glwiLFxuXHQgICAgXCI0MTA3ODJcIjogXCLovonljr/luIJcIixcblx0ICAgIFwiNDEwNzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDgwMFwiOiBcIueEpuS9nOW4glwiLFxuXHQgICAgXCI0MTA4MDJcIjogXCLop6PmlL7ljLpcIixcblx0ICAgIFwiNDEwODAzXCI6IFwi5Lit56uZ5Yy6XCIsXG5cdCAgICBcIjQxMDgwNFwiOiBcIumprOadkeWMulwiLFxuXHQgICAgXCI0MTA4MTFcIjogXCLlsbHpmLPljLpcIixcblx0ICAgIFwiNDEwODIxXCI6IFwi5L+u5q2m5Y6/XCIsXG5cdCAgICBcIjQxMDgyMlwiOiBcIuWNmueIseWOv1wiLFxuXHQgICAgXCI0MTA4MjNcIjogXCLmrabpmZ/ljr9cIixcblx0ICAgIFwiNDEwODI1XCI6IFwi5rip5Y6/XCIsXG5cdCAgICBcIjQxMDg4MVwiOiBcIua1jua6kOW4glwiLFxuXHQgICAgXCI0MTA4ODJcIjogXCLmsoHpmLPluIJcIixcblx0ICAgIFwiNDEwODgzXCI6IFwi5a2f5bee5biCXCIsXG5cdCAgICBcIjQxMDg4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA5MDBcIjogXCLmv67pmLPluIJcIixcblx0ICAgIFwiNDEwOTAyXCI6IFwi5Y2O6b6Z5Yy6XCIsXG5cdCAgICBcIjQxMDkyMlwiOiBcIua4heS4sOWOv1wiLFxuXHQgICAgXCI0MTA5MjNcIjogXCLljZfkuZDljr9cIixcblx0ICAgIFwiNDEwOTI2XCI6IFwi6IyD5Y6/XCIsXG5cdCAgICBcIjQxMDkyN1wiOiBcIuWPsOWJjeWOv1wiLFxuXHQgICAgXCI0MTA5MjhcIjogXCLmv67pmLPljr9cIixcblx0ICAgIFwiNDEwOTI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMTAwMFwiOiBcIuiuuOaYjOW4glwiLFxuXHQgICAgXCI0MTEwMDJcIjogXCLprY/pg73ljLpcIixcblx0ICAgIFwiNDExMDIzXCI6IFwi6K645piM5Y6/XCIsXG5cdCAgICBcIjQxMTAyNFwiOiBcIumEoumZteWOv1wiLFxuXHQgICAgXCI0MTEwMjVcIjogXCLopYTln47ljr9cIixcblx0ICAgIFwiNDExMDgxXCI6IFwi56a55bee5biCXCIsXG5cdCAgICBcIjQxMTA4MlwiOiBcIumVv+iRm+W4glwiLFxuXHQgICAgXCI0MTEwODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExMTAwXCI6IFwi5ryv5rKz5biCXCIsXG5cdCAgICBcIjQxMTEwMlwiOiBcIua6kOaxh+WMulwiLFxuXHQgICAgXCI0MTExMDNcIjogXCLpg77ln47ljLpcIixcblx0ICAgIFwiNDExMTA0XCI6IFwi5Y+s6Zm15Yy6XCIsXG5cdCAgICBcIjQxMTEyMVwiOiBcIuiInumYs+WOv1wiLFxuXHQgICAgXCI0MTExMjJcIjogXCLkuLTpoo3ljr9cIixcblx0ICAgIFwiNDExMTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMTIwMFwiOiBcIuS4iemXqOWzoeW4glwiLFxuXHQgICAgXCI0MTEyMDJcIjogXCLmuZbmu6jljLpcIixcblx0ICAgIFwiNDExMjIxXCI6IFwi5riR5rGg5Y6/XCIsXG5cdCAgICBcIjQxMTIyMlwiOiBcIumZleWOv1wiLFxuXHQgICAgXCI0MTEyMjRcIjogXCLljaLmsI/ljr9cIixcblx0ICAgIFwiNDExMjgxXCI6IFwi5LmJ6ams5biCXCIsXG5cdCAgICBcIjQxMTI4MlwiOiBcIueBteWuneW4glwiLFxuXHQgICAgXCI0MTEyODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExMzAwXCI6IFwi5Y2X6Ziz5biCXCIsXG5cdCAgICBcIjQxMTMwMlwiOiBcIuWum+WfjuWMulwiLFxuXHQgICAgXCI0MTEzMDNcIjogXCLljafpvpnljLpcIixcblx0ICAgIFwiNDExMzIxXCI6IFwi5Y2X5Y+s5Y6/XCIsXG5cdCAgICBcIjQxMTMyMlwiOiBcIuaWueWfjuWOv1wiLFxuXHQgICAgXCI0MTEzMjNcIjogXCLopb/ls6Hljr9cIixcblx0ICAgIFwiNDExMzI0XCI6IFwi6ZWH5bmz5Y6/XCIsXG5cdCAgICBcIjQxMTMyNVwiOiBcIuWGheS5oeWOv1wiLFxuXHQgICAgXCI0MTEzMjZcIjogXCLmt4Xlt53ljr9cIixcblx0ICAgIFwiNDExMzI3XCI6IFwi56S+5peX5Y6/XCIsXG5cdCAgICBcIjQxMTMyOFwiOiBcIuWUkOays+WOv1wiLFxuXHQgICAgXCI0MTEzMjlcIjogXCLmlrDph47ljr9cIixcblx0ICAgIFwiNDExMzMwXCI6IFwi5qGQ5p+P5Y6/XCIsXG5cdCAgICBcIjQxMTM4MVwiOiBcIumCk+W3nuW4glwiLFxuXHQgICAgXCI0MTEzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExNDAwXCI6IFwi5ZWG5LiY5biCXCIsXG5cdCAgICBcIjQxMTQwMlwiOiBcIuaigeWbreWMulwiLFxuXHQgICAgXCI0MTE0MDNcIjogXCLnnaLpmLPljLpcIixcblx0ICAgIFwiNDExNDIxXCI6IFwi5rCR5p2D5Y6/XCIsXG5cdCAgICBcIjQxMTQyMlwiOiBcIuedouWOv1wiLFxuXHQgICAgXCI0MTE0MjNcIjogXCLlroHpmbXljr9cIixcblx0ICAgIFwiNDExNDI0XCI6IFwi5p+Y5Z+O5Y6/XCIsXG5cdCAgICBcIjQxMTQyNVwiOiBcIuiZnuWfjuWOv1wiLFxuXHQgICAgXCI0MTE0MjZcIjogXCLlpI/pgpHljr9cIixcblx0ICAgIFwiNDExNDgxXCI6IFwi5rC45Z+O5biCXCIsXG5cdCAgICBcIjQxMTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE1MDBcIjogXCLkv6HpmLPluIJcIixcblx0ICAgIFwiNDExNTAyXCI6IFwi5rWJ5rKz5Yy6XCIsXG5cdCAgICBcIjQxMTUwM1wiOiBcIuW5s+ahpeWMulwiLFxuXHQgICAgXCI0MTE1MjFcIjogXCLnvZflsbHljr9cIixcblx0ICAgIFwiNDExNTIyXCI6IFwi5YWJ5bGx5Y6/XCIsXG5cdCAgICBcIjQxMTUyM1wiOiBcIuaWsOWOv1wiLFxuXHQgICAgXCI0MTE1MjRcIjogXCLllYbln47ljr9cIixcblx0ICAgIFwiNDExNTI1XCI6IFwi5Zu65aeL5Y6/XCIsXG5cdCAgICBcIjQxMTUyNlwiOiBcIua9ouW3neWOv1wiLFxuXHQgICAgXCI0MTE1MjdcIjogXCLmt67mu6jljr9cIixcblx0ICAgIFwiNDExNTI4XCI6IFwi5oGv5Y6/XCIsXG5cdCAgICBcIjQxMTUyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE2MDBcIjogXCLlkajlj6PluIJcIixcblx0ICAgIFwiNDExNjAyXCI6IFwi5bed5rGH5Yy6XCIsXG5cdCAgICBcIjQxMTYyMVwiOiBcIuaJtuayn+WOv1wiLFxuXHQgICAgXCI0MTE2MjJcIjogXCLopb/ljY7ljr9cIixcblx0ICAgIFwiNDExNjIzXCI6IFwi5ZWG5rC05Y6/XCIsXG5cdCAgICBcIjQxMTYyNFwiOiBcIuayiOS4mOWOv1wiLFxuXHQgICAgXCI0MTE2MjVcIjogXCLpg7jln47ljr9cIixcblx0ICAgIFwiNDExNjI2XCI6IFwi5reu6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMTYyN1wiOiBcIuWkquW6t+WOv1wiLFxuXHQgICAgXCI0MTE2MjhcIjogXCLpub/pgpHljr9cIixcblx0ICAgIFwiNDExNjgxXCI6IFwi6aG55Z+O5biCXCIsXG5cdCAgICBcIjQxMTY4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE3MDBcIjogXCLpqbvpqazlupfluIJcIixcblx0ICAgIFwiNDExNzAyXCI6IFwi6am/5Z+O5Yy6XCIsXG5cdCAgICBcIjQxMTcyMVwiOiBcIuilv+W5s+WOv1wiLFxuXHQgICAgXCI0MTE3MjJcIjogXCLkuIrolKHljr9cIixcblx0ICAgIFwiNDExNzIzXCI6IFwi5bmz6IiG5Y6/XCIsXG5cdCAgICBcIjQxMTcyNFwiOiBcIuato+mYs+WOv1wiLFxuXHQgICAgXCI0MTE3MjVcIjogXCLnoa7lsbHljr9cIixcblx0ICAgIFwiNDExNzI2XCI6IFwi5rOM6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMTcyN1wiOiBcIuaxneWNl+WOv1wiLFxuXHQgICAgXCI0MTE3MjhcIjogXCLpgYLlubPljr9cIixcblx0ICAgIFwiNDExNzI5XCI6IFwi5paw6JSh5Y6/XCIsXG5cdCAgICBcIjQxMTczMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjAwMDBcIjogXCLmuZbljJfnnIFcIixcblx0ICAgIFwiNDIwMTAwXCI6IFwi5q2m5rGJ5biCXCIsXG5cdCAgICBcIjQyMDEwMlwiOiBcIuaxn+WyuOWMulwiLFxuXHQgICAgXCI0MjAxMDNcIjogXCLmsZ/msYnljLpcIixcblx0ICAgIFwiNDIwMTA0XCI6IFwi56Ga5Y+j5Yy6XCIsXG5cdCAgICBcIjQyMDEwNVwiOiBcIuaxiemYs+WMulwiLFxuXHQgICAgXCI0MjAxMDZcIjogXCLmrabmmIzljLpcIixcblx0ICAgIFwiNDIwMTA3XCI6IFwi6Z2S5bGx5Yy6XCIsXG5cdCAgICBcIjQyMDExMVwiOiBcIua0quWxseWMulwiLFxuXHQgICAgXCI0MjAxMTJcIjogXCLkuJzopb/muZbljLpcIixcblx0ICAgIFwiNDIwMTEzXCI6IFwi5rGJ5Y2X5Yy6XCIsXG5cdCAgICBcIjQyMDExNFwiOiBcIuiUoeeUuOWMulwiLFxuXHQgICAgXCI0MjAxMTVcIjogXCLmsZ/lpI/ljLpcIixcblx0ICAgIFwiNDIwMTE2XCI6IFwi6buE6ZmC5Yy6XCIsXG5cdCAgICBcIjQyMDExN1wiOiBcIuaWsOa0suWMulwiLFxuXHQgICAgXCI0MjAxMThcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwMjAwXCI6IFwi6buE55+z5biCXCIsXG5cdCAgICBcIjQyMDIwMlwiOiBcIum7hOefs+a4r+WMulwiLFxuXHQgICAgXCI0MjAyMDNcIjogXCLopb/loZ7lsbHljLpcIixcblx0ICAgIFwiNDIwMjA0XCI6IFwi5LiL6ZmG5Yy6XCIsXG5cdCAgICBcIjQyMDIwNVwiOiBcIumTgeWxseWMulwiLFxuXHQgICAgXCI0MjAyMjJcIjogXCLpmLPmlrDljr9cIixcblx0ICAgIFwiNDIwMjgxXCI6IFwi5aSn5Ya25biCXCIsXG5cdCAgICBcIjQyMDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjAzMDBcIjogXCLljYHloLDluIJcIixcblx0ICAgIFwiNDIwMzAyXCI6IFwi6IyF566t5Yy6XCIsXG5cdCAgICBcIjQyMDMwM1wiOiBcIuW8oOa5vuWMulwiLFxuXHQgICAgXCI0MjAzMjFcIjogXCLpg6fljr9cIixcblx0ICAgIFwiNDIwMzIyXCI6IFwi6YOn6KW/5Y6/XCIsXG5cdCAgICBcIjQyMDMyM1wiOiBcIuerueWxseWOv1wiLFxuXHQgICAgXCI0MjAzMjRcIjogXCLnq7nmuqrljr9cIixcblx0ICAgIFwiNDIwMzI1XCI6IFwi5oi/5Y6/XCIsXG5cdCAgICBcIjQyMDM4MVwiOiBcIuS4ueaxn+WPo+W4glwiLFxuXHQgICAgXCI0MjAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwNTAwXCI6IFwi5a6c5piM5biCXCIsXG5cdCAgICBcIjQyMDUwMlwiOiBcIuilv+mZteWMulwiLFxuXHQgICAgXCI0MjA1MDNcIjogXCLkvI3lrrblspfljLpcIixcblx0ICAgIFwiNDIwNTA0XCI6IFwi54K55Yab5Yy6XCIsXG5cdCAgICBcIjQyMDUwNVwiOiBcIueMh+S6reWMulwiLFxuXHQgICAgXCI0MjA1MDZcIjogXCLlpLfpmbXljLpcIixcblx0ICAgIFwiNDIwNTI1XCI6IFwi6L+c5a6J5Y6/XCIsXG5cdCAgICBcIjQyMDUyNlwiOiBcIuWFtOWxseWOv1wiLFxuXHQgICAgXCI0MjA1MjdcIjogXCLnp63lvZLljr9cIixcblx0ICAgIFwiNDIwNTI4XCI6IFwi6ZW/6Ziz5Zyf5a625peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQyMDUyOVwiOiBcIuS6lOWzsOWcn+WutuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MjA1ODFcIjogXCLlrpzpg73luIJcIixcblx0ICAgIFwiNDIwNTgyXCI6IFwi5b2T6Ziz5biCXCIsXG5cdCAgICBcIjQyMDU4M1wiOiBcIuaeneaxn+W4glwiLFxuXHQgICAgXCI0MjA1ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwNjAwXCI6IFwi6KWE6Ziz5biCXCIsXG5cdCAgICBcIjQyMDYwMlwiOiBcIuilhOWfjuWMulwiLFxuXHQgICAgXCI0MjA2MDZcIjogXCLmqIrln47ljLpcIixcblx0ICAgIFwiNDIwNjA3XCI6IFwi6KWE5bee5Yy6XCIsXG5cdCAgICBcIjQyMDYyNFwiOiBcIuWNl+a8s+WOv1wiLFxuXHQgICAgXCI0MjA2MjVcIjogXCLosLfln47ljr9cIixcblx0ICAgIFwiNDIwNjI2XCI6IFwi5L+d5bq35Y6/XCIsXG5cdCAgICBcIjQyMDY4MlwiOiBcIuiAgeays+WPo+W4glwiLFxuXHQgICAgXCI0MjA2ODNcIjogXCLmnqPpmLPluIJcIixcblx0ICAgIFwiNDIwNjg0XCI6IFwi5a6c5Z+O5biCXCIsXG5cdCAgICBcIjQyMDY4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjA3MDBcIjogXCLphILlt57luIJcIixcblx0ICAgIFwiNDIwNzAyXCI6IFwi5qKB5a2Q5rmW5Yy6XCIsXG5cdCAgICBcIjQyMDcwM1wiOiBcIuWNjuWuueWMulwiLFxuXHQgICAgXCI0MjA3MDRcIjogXCLphILln47ljLpcIixcblx0ICAgIFwiNDIwNzA1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQyMDgwMFwiOiBcIuiNhumXqOW4glwiLFxuXHQgICAgXCI0MjA4MDJcIjogXCLkuJzlrp3ljLpcIixcblx0ICAgIFwiNDIwODA0XCI6IFwi5o6H5YiA5Yy6XCIsXG5cdCAgICBcIjQyMDgyMVwiOiBcIuS6rOWxseWOv1wiLFxuXHQgICAgXCI0MjA4MjJcIjogXCLmspnmtIvljr9cIixcblx0ICAgIFwiNDIwODgxXCI6IFwi6ZKf56Wl5biCXCIsXG5cdCAgICBcIjQyMDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjA5MDBcIjogXCLlrZ3mhJ/luIJcIixcblx0ICAgIFwiNDIwOTAyXCI6IFwi5a2d5Y2X5Yy6XCIsXG5cdCAgICBcIjQyMDkyMVwiOiBcIuWtneaYjOWOv1wiLFxuXHQgICAgXCI0MjA5MjJcIjogXCLlpKfmgp/ljr9cIixcblx0ICAgIFwiNDIwOTIzXCI6IFwi5LqR5qKm5Y6/XCIsXG5cdCAgICBcIjQyMDk4MVwiOiBcIuW6lOWfjuW4glwiLFxuXHQgICAgXCI0MjA5ODJcIjogXCLlronpmYbluIJcIixcblx0ICAgIFwiNDIwOTg0XCI6IFwi5rGJ5bed5biCXCIsXG5cdCAgICBcIjQyMDk4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjEwMDBcIjogXCLojYblt57luIJcIixcblx0ICAgIFwiNDIxMDAyXCI6IFwi5rKZ5biC5Yy6XCIsXG5cdCAgICBcIjQyMTAwM1wiOiBcIuiNhuW3nuWMulwiLFxuXHQgICAgXCI0MjEwMjJcIjogXCLlhazlronljr9cIixcblx0ICAgIFwiNDIxMDIzXCI6IFwi55uR5Yip5Y6/XCIsXG5cdCAgICBcIjQyMTAyNFwiOiBcIuaxn+mZteWOv1wiLFxuXHQgICAgXCI0MjEwODFcIjogXCLnn7PpppbluIJcIixcblx0ICAgIFwiNDIxMDgzXCI6IFwi5rSq5rmW5biCXCIsXG5cdCAgICBcIjQyMTA4N1wiOiBcIuadvua7i+W4glwiLFxuXHQgICAgXCI0MjEwODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIxMTAwXCI6IFwi6buE5YaI5biCXCIsXG5cdCAgICBcIjQyMTEwMlwiOiBcIum7hOW3nuWMulwiLFxuXHQgICAgXCI0MjExMjFcIjogXCLlm6Lpo47ljr9cIixcblx0ICAgIFwiNDIxMTIyXCI6IFwi57qi5a6J5Y6/XCIsXG5cdCAgICBcIjQyMTEyM1wiOiBcIue9l+eUsOWOv1wiLFxuXHQgICAgXCI0MjExMjRcIjogXCLoi7HlsbHljr9cIixcblx0ICAgIFwiNDIxMTI1XCI6IFwi5rWg5rC05Y6/XCIsXG5cdCAgICBcIjQyMTEyNlwiOiBcIuiVsuaYpeWOv1wiLFxuXHQgICAgXCI0MjExMjdcIjogXCLpu4TmooXljr9cIixcblx0ICAgIFwiNDIxMTgxXCI6IFwi6bq75Z+O5biCXCIsXG5cdCAgICBcIjQyMTE4MlwiOiBcIuatpueptOW4glwiLFxuXHQgICAgXCI0MjExODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIxMjAwXCI6IFwi5ZK45a6B5biCXCIsXG5cdCAgICBcIjQyMTIwMlwiOiBcIuWSuOWuieWMulwiLFxuXHQgICAgXCI0MjEyMjFcIjogXCLlmInpsbzljr9cIixcblx0ICAgIFwiNDIxMjIyXCI6IFwi6YCa5Z+O5Y6/XCIsXG5cdCAgICBcIjQyMTIyM1wiOiBcIuW0h+mYs+WOv1wiLFxuXHQgICAgXCI0MjEyMjRcIjogXCLpgJrlsbHljr9cIixcblx0ICAgIFwiNDIxMjgxXCI6IFwi6LWk5aOB5biCXCIsXG5cdCAgICBcIjQyMTI4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjEzMDBcIjogXCLpmo/lt57luIJcIixcblx0ICAgIFwiNDIxMzAyXCI6IFwi5pu+6YO95Yy6XCIsXG5cdCAgICBcIjQyMTMyMVwiOiBcIumaj+WOv1wiLFxuXHQgICAgXCI0MjEzODFcIjogXCLlub/msLTluIJcIixcblx0ICAgIFwiNDIxMzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQyMjgwMFwiOiBcIuaBqeaWveWcn+WutuaXj+iLl+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI0MjI4MDFcIjogXCLmganmlr3luIJcIixcblx0ICAgIFwiNDIyODAyXCI6IFwi5Yip5bed5biCXCIsXG5cdCAgICBcIjQyMjgyMlwiOiBcIuW7uuWni+WOv1wiLFxuXHQgICAgXCI0MjI4MjNcIjogXCLlt7TkuJzljr9cIixcblx0ICAgIFwiNDIyODI1XCI6IFwi5a6j5oGp5Y6/XCIsXG5cdCAgICBcIjQyMjgyNlwiOiBcIuWSuOS4sOWOv1wiLFxuXHQgICAgXCI0MjI4MjdcIjogXCLmnaXlh6Tljr9cIixcblx0ICAgIFwiNDIyODI4XCI6IFwi6bmk5bOw5Y6/XCIsXG5cdCAgICBcIjQyMjgyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjkwMDRcIjogXCLku5nmoYPluIJcIixcblx0ICAgIFwiNDI5MDA1XCI6IFwi5r2c5rGf5biCXCIsXG5cdCAgICBcIjQyOTAwNlwiOiBcIuWkqemXqOW4glwiLFxuXHQgICAgXCI0MjkwMjFcIjogXCLnpZ7lhpzmnrbmnpfljLpcIixcblx0ICAgIFwiNDMwMDAwXCI6IFwi5rmW5Y2X55yBXCIsXG5cdCAgICBcIjQzMDEwMFwiOiBcIumVv+aymeW4glwiLFxuXHQgICAgXCI0MzAxMDJcIjogXCLoipnok4nljLpcIixcblx0ICAgIFwiNDMwMTAzXCI6IFwi5aSp5b+D5Yy6XCIsXG5cdCAgICBcIjQzMDEwNFwiOiBcIuWys+m6k+WMulwiLFxuXHQgICAgXCI0MzAxMDVcIjogXCLlvIDnpo/ljLpcIixcblx0ICAgIFwiNDMwMTExXCI6IFwi6Zuo6Iqx5Yy6XCIsXG5cdCAgICBcIjQzMDEyMVwiOiBcIumVv+aymeWOv1wiLFxuXHQgICAgXCI0MzAxMjJcIjogXCLmnJvln47ljLpcIixcblx0ICAgIFwiNDMwMTI0XCI6IFwi5a6B5Lmh5Y6/XCIsXG5cdCAgICBcIjQzMDE4MVwiOiBcIua1j+mYs+W4glwiLFxuXHQgICAgXCI0MzAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwMjAwXCI6IFwi5qCq5rSy5biCXCIsXG5cdCAgICBcIjQzMDIwMlwiOiBcIuiNt+WhmOWMulwiLFxuXHQgICAgXCI0MzAyMDNcIjogXCLoiqbmt57ljLpcIixcblx0ICAgIFwiNDMwMjA0XCI6IFwi55+z5bOw5Yy6XCIsXG5cdCAgICBcIjQzMDIxMVwiOiBcIuWkqeWFg+WMulwiLFxuXHQgICAgXCI0MzAyMjFcIjogXCLmoKrmtLLljr9cIixcblx0ICAgIFwiNDMwMjIzXCI6IFwi5pS45Y6/XCIsXG5cdCAgICBcIjQzMDIyNFwiOiBcIuiMtumZteWOv1wiLFxuXHQgICAgXCI0MzAyMjVcIjogXCLngo7pmbXljr9cIixcblx0ICAgIFwiNDMwMjgxXCI6IFwi6Ya06Zm15biCXCIsXG5cdCAgICBcIjQzMDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzAzMDBcIjogXCLmuZjmva3luIJcIixcblx0ICAgIFwiNDMwMzAyXCI6IFwi6Zuo5rmW5Yy6XCIsXG5cdCAgICBcIjQzMDMwNFwiOiBcIuWys+WhmOWMulwiLFxuXHQgICAgXCI0MzAzMjFcIjogXCLmuZjmva3ljr9cIixcblx0ICAgIFwiNDMwMzgxXCI6IFwi5rmY5Lmh5biCXCIsXG5cdCAgICBcIjQzMDM4MlwiOiBcIumftuWxseW4glwiLFxuXHQgICAgXCI0MzAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwNDAwXCI6IFwi6KGh6Ziz5biCXCIsXG5cdCAgICBcIjQzMDQwNVwiOiBcIuePoOaZluWMulwiLFxuXHQgICAgXCI0MzA0MDZcIjogXCLpm4Hls7DljLpcIixcblx0ICAgIFwiNDMwNDA3XCI6IFwi55+z6byT5Yy6XCIsXG5cdCAgICBcIjQzMDQwOFwiOiBcIuiSuOa5mOWMulwiLFxuXHQgICAgXCI0MzA0MTJcIjogXCLljZflsrPljLpcIixcblx0ICAgIFwiNDMwNDIxXCI6IFwi6KGh6Ziz5Y6/XCIsXG5cdCAgICBcIjQzMDQyMlwiOiBcIuihoeWNl+WOv1wiLFxuXHQgICAgXCI0MzA0MjNcIjogXCLooaHlsbHljr9cIixcblx0ICAgIFwiNDMwNDI0XCI6IFwi6KGh5Lic5Y6/XCIsXG5cdCAgICBcIjQzMDQyNlwiOiBcIuelgeS4nOWOv1wiLFxuXHQgICAgXCI0MzA0ODFcIjogXCLogJLpmLPluIJcIixcblx0ICAgIFwiNDMwNDgyXCI6IFwi5bi45a6B5biCXCIsXG5cdCAgICBcIjQzMDQ4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA1MDBcIjogXCLpgrXpmLPluIJcIixcblx0ICAgIFwiNDMwNTAyXCI6IFwi5Y+M5riF5Yy6XCIsXG5cdCAgICBcIjQzMDUwM1wiOiBcIuWkp+elpeWMulwiLFxuXHQgICAgXCI0MzA1MTFcIjogXCLljJfloZTljLpcIixcblx0ICAgIFwiNDMwNTIxXCI6IFwi6YK15Lic5Y6/XCIsXG5cdCAgICBcIjQzMDUyMlwiOiBcIuaWsOmCteWOv1wiLFxuXHQgICAgXCI0MzA1MjNcIjogXCLpgrXpmLPljr9cIixcblx0ICAgIFwiNDMwNTI0XCI6IFwi6ZqG5Zue5Y6/XCIsXG5cdCAgICBcIjQzMDUyNVwiOiBcIua0nuWPo+WOv1wiLFxuXHQgICAgXCI0MzA1MjdcIjogXCLnu6XlroHljr9cIixcblx0ICAgIFwiNDMwNTI4XCI6IFwi5paw5a6B5Y6/XCIsXG5cdCAgICBcIjQzMDUyOVwiOiBcIuWfjuatpeiLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzA1ODFcIjogXCLmrablhojluIJcIixcblx0ICAgIFwiNDMwNTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQzMDYwMFwiOiBcIuWys+mYs+W4glwiLFxuXHQgICAgXCI0MzA2MDJcIjogXCLlsrPpmLPmpbzljLpcIixcblx0ICAgIFwiNDMwNjAzXCI6IFwi5LqR5rqq5Yy6XCIsXG5cdCAgICBcIjQzMDYxMVwiOiBcIuWQm+WxseWMulwiLFxuXHQgICAgXCI0MzA2MjFcIjogXCLlsrPpmLPljr9cIixcblx0ICAgIFwiNDMwNjIzXCI6IFwi5Y2O5a655Y6/XCIsXG5cdCAgICBcIjQzMDYyNFwiOiBcIua5mOmYtOWOv1wiLFxuXHQgICAgXCI0MzA2MjZcIjogXCLlubPmsZ/ljr9cIixcblx0ICAgIFwiNDMwNjgxXCI6IFwi5rGo572X5biCXCIsXG5cdCAgICBcIjQzMDY4MlwiOiBcIuS4tOa5mOW4glwiLFxuXHQgICAgXCI0MzA2ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwNzAwXCI6IFwi5bi45b635biCXCIsXG5cdCAgICBcIjQzMDcwMlwiOiBcIuatpumZteWMulwiLFxuXHQgICAgXCI0MzA3MDNcIjogXCLpvI7ln47ljLpcIixcblx0ICAgIFwiNDMwNzIxXCI6IFwi5a6J5Lmh5Y6/XCIsXG5cdCAgICBcIjQzMDcyMlwiOiBcIuaxieWvv+WOv1wiLFxuXHQgICAgXCI0MzA3MjNcIjogXCLmvqfljr9cIixcblx0ICAgIFwiNDMwNzI0XCI6IFwi5Li05r6n5Y6/XCIsXG5cdCAgICBcIjQzMDcyNVwiOiBcIuahg+a6kOWOv1wiLFxuXHQgICAgXCI0MzA3MjZcIjogXCLnn7Ppl6jljr9cIixcblx0ICAgIFwiNDMwNzgxXCI6IFwi5rSl5biC5biCXCIsXG5cdCAgICBcIjQzMDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA4MDBcIjogXCLlvKDlrrbnlYzluIJcIixcblx0ICAgIFwiNDMwODAyXCI6IFwi5rC45a6a5Yy6XCIsXG5cdCAgICBcIjQzMDgxMVwiOiBcIuatpumZtea6kOWMulwiLFxuXHQgICAgXCI0MzA4MjFcIjogXCLmhYjliKnljr9cIixcblx0ICAgIFwiNDMwODIyXCI6IFwi5qGR5qSN5Y6/XCIsXG5cdCAgICBcIjQzMDgyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA5MDBcIjogXCLnm4rpmLPluIJcIixcblx0ICAgIFwiNDMwOTAyXCI6IFwi6LWE6Ziz5Yy6XCIsXG5cdCAgICBcIjQzMDkwM1wiOiBcIui1q+WxseWMulwiLFxuXHQgICAgXCI0MzA5MjFcIjogXCLljZfljr9cIixcblx0ICAgIFwiNDMwOTIyXCI6IFwi5qGD5rGf5Y6/XCIsXG5cdCAgICBcIjQzMDkyM1wiOiBcIuWuieWMluWOv1wiLFxuXHQgICAgXCI0MzA5ODFcIjogXCLmsoXmsZ/luIJcIixcblx0ICAgIFwiNDMwOTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQzMTAwMFwiOiBcIumDtOW3nuW4glwiLFxuXHQgICAgXCI0MzEwMDJcIjogXCLljJfmuZbljLpcIixcblx0ICAgIFwiNDMxMDAzXCI6IFwi6IuP5LuZ5Yy6XCIsXG5cdCAgICBcIjQzMTAyMVwiOiBcIuahgumYs+WOv1wiLFxuXHQgICAgXCI0MzEwMjJcIjogXCLlrpznq6Dljr9cIixcblx0ICAgIFwiNDMxMDIzXCI6IFwi5rC45YW05Y6/XCIsXG5cdCAgICBcIjQzMTAyNFwiOiBcIuWYieemvuWOv1wiLFxuXHQgICAgXCI0MzEwMjVcIjogXCLkuLTmrabljr9cIixcblx0ICAgIFwiNDMxMDI2XCI6IFwi5rGd5Z+O5Y6/XCIsXG5cdCAgICBcIjQzMTAyN1wiOiBcIuahguS4nOWOv1wiLFxuXHQgICAgXCI0MzEwMjhcIjogXCLlronku4Hljr9cIixcblx0ICAgIFwiNDMxMDgxXCI6IFwi6LWE5YW05biCXCIsXG5cdCAgICBcIjQzMTA4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzExMDBcIjogXCLmsLjlt57luIJcIixcblx0ICAgIFwiNDMxMTAyXCI6IFwi6Zu26Zm15Yy6XCIsXG5cdCAgICBcIjQzMTEwM1wiOiBcIuWGt+awtOa7qeWMulwiLFxuXHQgICAgXCI0MzExMjFcIjogXCLnpYHpmLPljr9cIixcblx0ICAgIFwiNDMxMTIyXCI6IFwi5Lic5a6J5Y6/XCIsXG5cdCAgICBcIjQzMTEyM1wiOiBcIuWPjOeJjOWOv1wiLFxuXHQgICAgXCI0MzExMjRcIjogXCLpgZPljr9cIixcblx0ICAgIFwiNDMxMTI1XCI6IFwi5rGf5rC45Y6/XCIsXG5cdCAgICBcIjQzMTEyNlwiOiBcIuWugei/nOWOv1wiLFxuXHQgICAgXCI0MzExMjdcIjogXCLok53lsbHljr9cIixcblx0ICAgIFwiNDMxMTI4XCI6IFwi5paw55Sw5Y6/XCIsXG5cdCAgICBcIjQzMTEyOVwiOiBcIuaxn+WNjueRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzExMzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMxMjAwXCI6IFwi5oCA5YyW5biCXCIsXG5cdCAgICBcIjQzMTIwMlwiOiBcIum5pOWfjuWMulwiLFxuXHQgICAgXCI0MzEyMjFcIjogXCLkuK3mlrnljr9cIixcblx0ICAgIFwiNDMxMjIyXCI6IFwi5rKF6Zm15Y6/XCIsXG5cdCAgICBcIjQzMTIyM1wiOiBcIui+sOa6quWOv1wiLFxuXHQgICAgXCI0MzEyMjRcIjogXCLmuobmtabljr9cIixcblx0ICAgIFwiNDMxMjI1XCI6IFwi5Lya5ZCM5Y6/XCIsXG5cdCAgICBcIjQzMTIyNlwiOiBcIum6u+mYs+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzEyMjdcIjogXCLmlrDmmYPkvpfml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDMxMjI4XCI6IFwi6Iq35rGf5L6X5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQzMTIyOVwiOiBcIumdluW3nuiLl+aXj+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzEyMzBcIjogXCLpgJrpgZPkvpfml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDMxMjgxXCI6IFwi5rSq5rGf5biCXCIsXG5cdCAgICBcIjQzMTI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzEzMDBcIjogXCLlqITlupXluIJcIixcblx0ICAgIFwiNDMxMzAyXCI6IFwi5aiE5pif5Yy6XCIsXG5cdCAgICBcIjQzMTMyMVwiOiBcIuWPjOWzsOWOv1wiLFxuXHQgICAgXCI0MzEzMjJcIjogXCLmlrDljJbljr9cIixcblx0ICAgIFwiNDMxMzgxXCI6IFwi5Ya35rC05rGf5biCXCIsXG5cdCAgICBcIjQzMTM4MlwiOiBcIua2n+a6kOW4glwiLFxuXHQgICAgXCI0MzEzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMzMTAwXCI6IFwi5rmY6KW/5Zyf5a625peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjQzMzEwMVwiOiBcIuWQiemmluW4glwiLFxuXHQgICAgXCI0MzMxMjJcIjogXCLms7jmuqrljr9cIixcblx0ICAgIFwiNDMzMTIzXCI6IFwi5Yek5Yew5Y6/XCIsXG5cdCAgICBcIjQzMzEyNFwiOiBcIuiKseWeo+WOv1wiLFxuXHQgICAgXCI0MzMxMjVcIjogXCLkv53pnZbljr9cIixcblx0ICAgIFwiNDMzMTI2XCI6IFwi5Y+k5LiI5Y6/XCIsXG5cdCAgICBcIjQzMzEyN1wiOiBcIuawuOmhuuWOv1wiLFxuXHQgICAgXCI0MzMxMzBcIjogXCLpvpnlsbHljr9cIixcblx0ICAgIFwiNDMzMTMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDAwMFwiOiBcIuW5v+S4nOecgVwiLFxuXHQgICAgXCI0NDAxMDBcIjogXCLlub/lt57luIJcIixcblx0ICAgIFwiNDQwMTAzXCI6IFwi6I2U5rm+5Yy6XCIsXG5cdCAgICBcIjQ0MDEwNFwiOiBcIui2iuengOWMulwiLFxuXHQgICAgXCI0NDAxMDVcIjogXCLmtbfnj6DljLpcIixcblx0ICAgIFwiNDQwMTA2XCI6IFwi5aSp5rKz5Yy6XCIsXG5cdCAgICBcIjQ0MDExMVwiOiBcIueZveS6keWMulwiLFxuXHQgICAgXCI0NDAxMTJcIjogXCLpu4Tln5TljLpcIixcblx0ICAgIFwiNDQwMTEzXCI6IFwi55Wq56a65Yy6XCIsXG5cdCAgICBcIjQ0MDExNFwiOiBcIuiKsemDveWMulwiLFxuXHQgICAgXCI0NDAxMTVcIjogXCLljZfmspnljLpcIixcblx0ICAgIFwiNDQwMTE2XCI6IFwi6JCd5bKX5Yy6XCIsXG5cdCAgICBcIjQ0MDE4M1wiOiBcIuWinuWfjuW4glwiLFxuXHQgICAgXCI0NDAxODRcIjogXCLku47ljJbluIJcIixcblx0ICAgIFwiNDQwMTg5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDIwMFwiOiBcIumftuWFs+W4glwiLFxuXHQgICAgXCI0NDAyMDNcIjogXCLmrabmsZ/ljLpcIixcblx0ICAgIFwiNDQwMjA0XCI6IFwi5rWI5rGf5Yy6XCIsXG5cdCAgICBcIjQ0MDIwNVwiOiBcIuabsuaxn+WMulwiLFxuXHQgICAgXCI0NDAyMjJcIjogXCLlp4vlhbTljr9cIixcblx0ICAgIFwiNDQwMjI0XCI6IFwi5LuB5YyW5Y6/XCIsXG5cdCAgICBcIjQ0MDIyOVwiOiBcIue/gea6kOWOv1wiLFxuXHQgICAgXCI0NDAyMzJcIjogXCLkubPmupDnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDQwMjMzXCI6IFwi5paw5Liw5Y6/XCIsXG5cdCAgICBcIjQ0MDI4MVwiOiBcIuS5kOaYjOW4glwiLFxuXHQgICAgXCI0NDAyODJcIjogXCLljZfpm4TluIJcIixcblx0ICAgIFwiNDQwMjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDMwMFwiOiBcIua3seWcs+W4glwiLFxuXHQgICAgXCI0NDAzMDNcIjogXCLnvZfmuZbljLpcIixcblx0ICAgIFwiNDQwMzA0XCI6IFwi56aP55Sw5Yy6XCIsXG5cdCAgICBcIjQ0MDMwNVwiOiBcIuWNl+WxseWMulwiLFxuXHQgICAgXCI0NDAzMDZcIjogXCLlrp3lronljLpcIixcblx0ICAgIFwiNDQwMzA3XCI6IFwi6b6Z5bKX5Yy6XCIsXG5cdCAgICBcIjQ0MDMwOFwiOiBcIuebkOeUsOWMulwiLFxuXHQgICAgXCI0NDAzMDlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwMzIwXCI6IFwi5YWJ5piO5paw5Yy6XCIsXG5cdCAgICBcIjQ0MDMyMVwiOiBcIuWdquWxseaWsOWMulwiLFxuXHQgICAgXCI0NDAzMjJcIjogXCLlpKfpuY/mlrDljLpcIixcblx0ICAgIFwiNDQwMzIzXCI6IFwi6b6Z5Y2O5paw5Yy6XCIsXG5cdCAgICBcIjQ0MDQwMFwiOiBcIuePoOa1t+W4glwiLFxuXHQgICAgXCI0NDA0MDJcIjogXCLpppnmtLLljLpcIixcblx0ICAgIFwiNDQwNDAzXCI6IFwi5paX6Zeo5Yy6XCIsXG5cdCAgICBcIjQ0MDQwNFwiOiBcIumHkea5vuWMulwiLFxuXHQgICAgXCI0NDA0ODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwNTAwXCI6IFwi5rGV5aS05biCXCIsXG5cdCAgICBcIjQ0MDUwN1wiOiBcIum+mea5luWMulwiLFxuXHQgICAgXCI0NDA1MTFcIjogXCLph5HlubPljLpcIixcblx0ICAgIFwiNDQwNTEyXCI6IFwi5r+g5rGf5Yy6XCIsXG5cdCAgICBcIjQ0MDUxM1wiOiBcIua9rumYs+WMulwiLFxuXHQgICAgXCI0NDA1MTRcIjogXCLmva7ljZfljLpcIixcblx0ICAgIFwiNDQwNTE1XCI6IFwi5r6E5rW35Yy6XCIsXG5cdCAgICBcIjQ0MDUyM1wiOiBcIuWNl+a+s+WOv1wiLFxuXHQgICAgXCI0NDA1MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwNjAwXCI6IFwi5L2b5bGx5biCXCIsXG5cdCAgICBcIjQ0MDYwNFwiOiBcIuemheWfjuWMulwiLFxuXHQgICAgXCI0NDA2MDVcIjogXCLljZfmtbfljLpcIixcblx0ICAgIFwiNDQwNjA2XCI6IFwi6aG65b635Yy6XCIsXG5cdCAgICBcIjQ0MDYwN1wiOiBcIuS4ieawtOWMulwiLFxuXHQgICAgXCI0NDA2MDhcIjogXCLpq5jmmI7ljLpcIixcblx0ICAgIFwiNDQwNjA5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDcwMFwiOiBcIuaxn+mXqOW4glwiLFxuXHQgICAgXCI0NDA3MDNcIjogXCLok6zmsZ/ljLpcIixcblx0ICAgIFwiNDQwNzA0XCI6IFwi5rGf5rW35Yy6XCIsXG5cdCAgICBcIjQ0MDcwNVwiOiBcIuaWsOS8muWMulwiLFxuXHQgICAgXCI0NDA3ODFcIjogXCLlj7DlsbHluIJcIixcblx0ICAgIFwiNDQwNzgzXCI6IFwi5byA5bmz5biCXCIsXG5cdCAgICBcIjQ0MDc4NFwiOiBcIum5pOWxseW4glwiLFxuXHQgICAgXCI0NDA3ODVcIjogXCLmganlubPluIJcIixcblx0ICAgIFwiNDQwNzg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDgwMFwiOiBcIua5m+axn+W4glwiLFxuXHQgICAgXCI0NDA4MDJcIjogXCLotaTlnY7ljLpcIixcblx0ICAgIFwiNDQwODAzXCI6IFwi6Zye5bGx5Yy6XCIsXG5cdCAgICBcIjQ0MDgwNFwiOiBcIuWdoeWktOWMulwiLFxuXHQgICAgXCI0NDA4MTFcIjogXCLpurvnq6DljLpcIixcblx0ICAgIFwiNDQwODIzXCI6IFwi6YGC5rqq5Y6/XCIsXG5cdCAgICBcIjQ0MDgyNVwiOiBcIuW+kOmXu+WOv1wiLFxuXHQgICAgXCI0NDA4ODFcIjogXCLlu4nmsZ/luIJcIixcblx0ICAgIFwiNDQwODgyXCI6IFwi6Zu35bee5biCXCIsXG5cdCAgICBcIjQ0MDg4M1wiOiBcIuWQtOW3neW4glwiLFxuXHQgICAgXCI0NDA4ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwOTAwXCI6IFwi6IyC5ZCN5biCXCIsXG5cdCAgICBcIjQ0MDkwMlwiOiBcIuiMguWNl+WMulwiLFxuXHQgICAgXCI0NDA5MDNcIjogXCLojILmuK/ljLpcIixcblx0ICAgIFwiNDQwOTIzXCI6IFwi55S155m95Y6/XCIsXG5cdCAgICBcIjQ0MDk4MVwiOiBcIumrmOW3nuW4glwiLFxuXHQgICAgXCI0NDA5ODJcIjogXCLljJblt57luIJcIixcblx0ICAgIFwiNDQwOTgzXCI6IFwi5L+h5a6c5biCXCIsXG5cdCAgICBcIjQ0MDk4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDEyMDBcIjogXCLogofluobluIJcIixcblx0ICAgIFwiNDQxMjAyXCI6IFwi56uv5bee5Yy6XCIsXG5cdCAgICBcIjQ0MTIwM1wiOiBcIum8jua5luWMulwiLFxuXHQgICAgXCI0NDEyMjNcIjogXCLlub/lroHljr9cIixcblx0ICAgIFwiNDQxMjI0XCI6IFwi5oCA6ZuG5Y6/XCIsXG5cdCAgICBcIjQ0MTIyNVwiOiBcIuWwgeW8gOWOv1wiLFxuXHQgICAgXCI0NDEyMjZcIjogXCLlvrfluobljr9cIixcblx0ICAgIFwiNDQxMjgzXCI6IFwi6auY6KaB5biCXCIsXG5cdCAgICBcIjQ0MTI4NFwiOiBcIuWbm+S8muW4glwiLFxuXHQgICAgXCI0NDEyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQxMzAwXCI6IFwi5oOg5bee5biCXCIsXG5cdCAgICBcIjQ0MTMwMlwiOiBcIuaDoOWfjuWMulwiLFxuXHQgICAgXCI0NDEzMDNcIjogXCLmg6DpmLPljLpcIixcblx0ICAgIFwiNDQxMzIyXCI6IFwi5Y2a572X5Y6/XCIsXG5cdCAgICBcIjQ0MTMyM1wiOiBcIuaDoOS4nOWOv1wiLFxuXHQgICAgXCI0NDEzMjRcIjogXCLpvpnpl6jljr9cIixcblx0ICAgIFwiNDQxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTQwMFwiOiBcIuaiheW3nuW4glwiLFxuXHQgICAgXCI0NDE0MDJcIjogXCLmooXmsZ/ljLpcIixcblx0ICAgIFwiNDQxNDIxXCI6IFwi5qKF5Y6/XCIsXG5cdCAgICBcIjQ0MTQyMlwiOiBcIuWkp+WflOWOv1wiLFxuXHQgICAgXCI0NDE0MjNcIjogXCLkuLDpobrljr9cIixcblx0ICAgIFwiNDQxNDI0XCI6IFwi5LqU5Y2O5Y6/XCIsXG5cdCAgICBcIjQ0MTQyNlwiOiBcIuW5s+i/nOWOv1wiLFxuXHQgICAgXCI0NDE0MjdcIjogXCLolYnlsq3ljr9cIixcblx0ICAgIFwiNDQxNDgxXCI6IFwi5YW05a6B5biCXCIsXG5cdCAgICBcIjQ0MTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE1MDBcIjogXCLmsZXlsL7luIJcIixcblx0ICAgIFwiNDQxNTAyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0MTUyMVwiOiBcIua1t+S4sOWOv1wiLFxuXHQgICAgXCI0NDE1MjNcIjogXCLpmYbmsrPljr9cIixcblx0ICAgIFwiNDQxNTgxXCI6IFwi6ZmG5Liw5biCXCIsXG5cdCAgICBcIjQ0MTU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE2MDBcIjogXCLmsrPmupDluIJcIixcblx0ICAgIFwiNDQxNjAyXCI6IFwi5rqQ5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0MTYyMVwiOiBcIue0q+mHkeWOv1wiLFxuXHQgICAgXCI0NDE2MjJcIjogXCLpvpnlt53ljr9cIixcblx0ICAgIFwiNDQxNjIzXCI6IFwi6L+e5bmz5Y6/XCIsXG5cdCAgICBcIjQ0MTYyNFwiOiBcIuWSjOW5s+WOv1wiLFxuXHQgICAgXCI0NDE2MjVcIjogXCLkuJzmupDljr9cIixcblx0ICAgIFwiNDQxNjI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTcwMFwiOiBcIumYs+axn+W4glwiLFxuXHQgICAgXCI0NDE3MDJcIjogXCLmsZ/ln47ljLpcIixcblx0ICAgIFwiNDQxNzIxXCI6IFwi6Ziz6KW/5Y6/XCIsXG5cdCAgICBcIjQ0MTcyM1wiOiBcIumYs+S4nOWOv1wiLFxuXHQgICAgXCI0NDE3ODFcIjogXCLpmLPmmKXluIJcIixcblx0ICAgIFwiNDQxNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTgwMFwiOiBcIua4hei/nOW4glwiLFxuXHQgICAgXCI0NDE4MDJcIjogXCLmuIXln47ljLpcIixcblx0ICAgIFwiNDQxODIxXCI6IFwi5L2b5YaI5Y6/XCIsXG5cdCAgICBcIjQ0MTgyM1wiOiBcIumYs+WxseWOv1wiLFxuXHQgICAgXCI0NDE4MjVcIjogXCLov57lsbHlo67ml4/nkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDQxODI2XCI6IFwi6L+e5Y2X55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ0MTgyN1wiOiBcIua4heaWsOWMulwiLFxuXHQgICAgXCI0NDE4ODFcIjogXCLoi7HlvrfluIJcIixcblx0ICAgIFwiNDQxODgyXCI6IFwi6L+e5bee5biCXCIsXG5cdCAgICBcIjQ0MTg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE5MDBcIjogXCLkuJzojp7luIJcIixcblx0ICAgIFwiNDQyMDAwXCI6IFwi5Lit5bGx5biCXCIsXG5cdCAgICBcIjQ0MjEwMVwiOiBcIuS4nOaymee+pOWym1wiLFxuXHQgICAgXCI0NDUxMDBcIjogXCLmva7lt57luIJcIixcblx0ICAgIFwiNDQ1MTAyXCI6IFwi5rmY5qGl5Yy6XCIsXG5cdCAgICBcIjQ0NTEyMVwiOiBcIua9ruWuieWMulwiLFxuXHQgICAgXCI0NDUxMjJcIjogXCLppbblubPljr9cIixcblx0ICAgIFwiNDQ1MTg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0NTIwMFwiOiBcIuaPremYs+W4glwiLFxuXHQgICAgXCI0NDUyMDJcIjogXCLmppXln47ljLpcIixcblx0ICAgIFwiNDQ1MjIxXCI6IFwi5o+t5Lic5Yy6XCIsXG5cdCAgICBcIjQ0NTIyMlwiOiBcIuaPreilv+WOv1wiLFxuXHQgICAgXCI0NDUyMjRcIjogXCLmg6DmnaXljr9cIixcblx0ICAgIFwiNDQ1MjgxXCI6IFwi5pmu5a6B5biCXCIsXG5cdCAgICBcIjQ0NTI4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDUzMDBcIjogXCLkupHmta7luIJcIixcblx0ICAgIFwiNDQ1MzAyXCI6IFwi5LqR5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0NTMyMVwiOiBcIuaWsOWFtOWOv1wiLFxuXHQgICAgXCI0NDUzMjJcIjogXCLpg4HljZfljr9cIixcblx0ICAgIFwiNDQ1MzIzXCI6IFwi5LqR5a6J5Y6/XCIsXG5cdCAgICBcIjQ0NTM4MVwiOiBcIue9l+WumuW4glwiLFxuXHQgICAgXCI0NDUzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMDAwXCI6IFwi5bm/6KW/5aOu5peP6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjQ1MDEwMFwiOiBcIuWNl+WugeW4glwiLFxuXHQgICAgXCI0NTAxMDJcIjogXCLlhbTlroHljLpcIixcblx0ICAgIFwiNDUwMTAzXCI6IFwi6Z2S56eA5Yy6XCIsXG5cdCAgICBcIjQ1MDEwNVwiOiBcIuaxn+WNl+WMulwiLFxuXHQgICAgXCI0NTAxMDdcIjogXCLopb/kuaHloZjljLpcIixcblx0ICAgIFwiNDUwMTA4XCI6IFwi6Imv5bqG5Yy6XCIsXG5cdCAgICBcIjQ1MDEwOVwiOiBcIumCleWugeWMulwiLFxuXHQgICAgXCI0NTAxMjJcIjogXCLmrabpuKPljr9cIixcblx0ICAgIFwiNDUwMTIzXCI6IFwi6ZqG5a6J5Y6/XCIsXG5cdCAgICBcIjQ1MDEyNFwiOiBcIumprOWxseWOv1wiLFxuXHQgICAgXCI0NTAxMjVcIjogXCLkuIrmnpfljr9cIixcblx0ICAgIFwiNDUwMTI2XCI6IFwi5a6+6Ziz5Y6/XCIsXG5cdCAgICBcIjQ1MDEyN1wiOiBcIuaoquWOv1wiLFxuXHQgICAgXCI0NTAxMjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMjAwXCI6IFwi5p+z5bee5biCXCIsXG5cdCAgICBcIjQ1MDIwMlwiOiBcIuWfjuS4reWMulwiLFxuXHQgICAgXCI0NTAyMDNcIjogXCLpsbzls7DljLpcIixcblx0ICAgIFwiNDUwMjA0XCI6IFwi5p+z5Y2X5Yy6XCIsXG5cdCAgICBcIjQ1MDIwNVwiOiBcIuafs+WMl+WMulwiLFxuXHQgICAgXCI0NTAyMjFcIjogXCLmn7PmsZ/ljr9cIixcblx0ICAgIFwiNDUwMjIyXCI6IFwi5p+z5Z+O5Y6/XCIsXG5cdCAgICBcIjQ1MDIyM1wiOiBcIum5v+WvqOWOv1wiLFxuXHQgICAgXCI0NTAyMjRcIjogXCLono3lronljr9cIixcblx0ICAgIFwiNDUwMjI1XCI6IFwi6J6N5rC06IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MDIyNlwiOiBcIuS4ieaxn+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTAyMjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMzAwXCI6IFwi5qGC5p6X5biCXCIsXG5cdCAgICBcIjQ1MDMwMlwiOiBcIuengOWzsOWMulwiLFxuXHQgICAgXCI0NTAzMDNcIjogXCLlj6DlvanljLpcIixcblx0ICAgIFwiNDUwMzA0XCI6IFwi6LGh5bGx5Yy6XCIsXG5cdCAgICBcIjQ1MDMwNVwiOiBcIuS4g+aYn+WMulwiLFxuXHQgICAgXCI0NTAzMTFcIjogXCLpm4HlsbHljLpcIixcblx0ICAgIFwiNDUwMzIxXCI6IFwi6Ziz5pyU5Y6/XCIsXG5cdCAgICBcIjQ1MDMyMlwiOiBcIuS4tOahguWMulwiLFxuXHQgICAgXCI0NTAzMjNcIjogXCLngbXlt53ljr9cIixcblx0ICAgIFwiNDUwMzI0XCI6IFwi5YWo5bee5Y6/XCIsXG5cdCAgICBcIjQ1MDMyNVwiOiBcIuWFtOWuieWOv1wiLFxuXHQgICAgXCI0NTAzMjZcIjogXCLmsLjnpo/ljr9cIixcblx0ICAgIFwiNDUwMzI3XCI6IFwi54GM6Ziz5Y6/XCIsXG5cdCAgICBcIjQ1MDMyOFwiOiBcIum+meiDnOWQhOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTAzMjlcIjogXCLotYTmupDljr9cIixcblx0ICAgIFwiNDUwMzMwXCI6IFwi5bmz5LmQ5Y6/XCIsXG5cdCAgICBcIjQ1MDMzMVwiOiBcIuiNlOa1puWOv1wiLFxuXHQgICAgXCI0NTAzMzJcIjogXCLmga3ln47nkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUwMzMzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDQwMFwiOiBcIuaip+W3nuW4glwiLFxuXHQgICAgXCI0NTA0MDNcIjogXCLkuIfnp4DljLpcIixcblx0ICAgIFwiNDUwNDA1XCI6IFwi6ZW/5rSy5Yy6XCIsXG5cdCAgICBcIjQ1MDQwNlwiOiBcIum+meWcqeWMulwiLFxuXHQgICAgXCI0NTA0MjFcIjogXCLoi43moqfljr9cIixcblx0ICAgIFwiNDUwNDIyXCI6IFwi6Jek5Y6/XCIsXG5cdCAgICBcIjQ1MDQyM1wiOiBcIuiSmeWxseWOv1wiLFxuXHQgICAgXCI0NTA0ODFcIjogXCLlspHmuqrluIJcIixcblx0ICAgIFwiNDUwNDgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDUwMFwiOiBcIuWMl+a1t+W4glwiLFxuXHQgICAgXCI0NTA1MDJcIjogXCLmtbfln47ljLpcIixcblx0ICAgIFwiNDUwNTAzXCI6IFwi6ZO25rW35Yy6XCIsXG5cdCAgICBcIjQ1MDUxMlwiOiBcIumTgeWxsea4r+WMulwiLFxuXHQgICAgXCI0NTA1MjFcIjogXCLlkIjmtabljr9cIixcblx0ICAgIFwiNDUwNTIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDYwMFwiOiBcIumYsuWfjua4r+W4glwiLFxuXHQgICAgXCI0NTA2MDJcIjogXCLmuK/lj6PljLpcIixcblx0ICAgIFwiNDUwNjAzXCI6IFwi6Ziy5Z+O5Yy6XCIsXG5cdCAgICBcIjQ1MDYyMVwiOiBcIuS4iuaAneWOv1wiLFxuXHQgICAgXCI0NTA2ODFcIjogXCLkuJzlhbTluIJcIixcblx0ICAgIFwiNDUwNjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDcwMFwiOiBcIumSpuW3nuW4glwiLFxuXHQgICAgXCI0NTA3MDJcIjogXCLpkqbljZfljLpcIixcblx0ICAgIFwiNDUwNzAzXCI6IFwi6ZKm5YyX5Yy6XCIsXG5cdCAgICBcIjQ1MDcyMVwiOiBcIueBteWxseWOv1wiLFxuXHQgICAgXCI0NTA3MjJcIjogXCLmtabljJfljr9cIixcblx0ICAgIFwiNDUwNzIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDgwMFwiOiBcIui0tea4r+W4glwiLFxuXHQgICAgXCI0NTA4MDJcIjogXCLmuK/ljJfljLpcIixcblx0ICAgIFwiNDUwODAzXCI6IFwi5riv5Y2X5Yy6XCIsXG5cdCAgICBcIjQ1MDgwNFwiOiBcIuimg+WhmOWMulwiLFxuXHQgICAgXCI0NTA4MjFcIjogXCLlubPljZfljr9cIixcblx0ICAgIFwiNDUwODgxXCI6IFwi5qGC5bmz5biCXCIsXG5cdCAgICBcIjQ1MDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTA5MDBcIjogXCLnjonmnpfluIJcIixcblx0ICAgIFwiNDUwOTAyXCI6IFwi546J5bee5Yy6XCIsXG5cdCAgICBcIjQ1MDkwM1wiOiBcIuemj+e7teWMulwiLFxuXHQgICAgXCI0NTA5MjFcIjogXCLlrrnljr9cIixcblx0ICAgIFwiNDUwOTIyXCI6IFwi6ZmG5bed5Y6/XCIsXG5cdCAgICBcIjQ1MDkyM1wiOiBcIuWNmueZveWOv1wiLFxuXHQgICAgXCI0NTA5MjRcIjogXCLlhbTkuJrljr9cIixcblx0ICAgIFwiNDUwOTgxXCI6IFwi5YyX5rWB5biCXCIsXG5cdCAgICBcIjQ1MDk4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTEwMDBcIjogXCLnmb7oibLluIJcIixcblx0ICAgIFwiNDUxMDAyXCI6IFwi5Y+z5rGf5Yy6XCIsXG5cdCAgICBcIjQ1MTAyMVwiOiBcIueUsOmYs+WOv1wiLFxuXHQgICAgXCI0NTEwMjJcIjogXCLnlLDkuJzljr9cIixcblx0ICAgIFwiNDUxMDIzXCI6IFwi5bmz5p6c5Y6/XCIsXG5cdCAgICBcIjQ1MTAyNFwiOiBcIuW+t+S/neWOv1wiLFxuXHQgICAgXCI0NTEwMjVcIjogXCLpnZbopb/ljr9cIixcblx0ICAgIFwiNDUxMDI2XCI6IFwi6YKj5Z2h5Y6/XCIsXG5cdCAgICBcIjQ1MTAyN1wiOiBcIuWHjOS6keWOv1wiLFxuXHQgICAgXCI0NTEwMjhcIjogXCLkuZDkuJrljr9cIixcblx0ICAgIFwiNDUxMDI5XCI6IFwi55Sw5p6X5Y6/XCIsXG5cdCAgICBcIjQ1MTAzMFwiOiBcIuilv+ael+WOv1wiLFxuXHQgICAgXCI0NTEwMzFcIjogXCLpmobmnpflkITml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMDMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MTEwMFwiOiBcIui0uuW3nuW4glwiLFxuXHQgICAgXCI0NTExMDJcIjogXCLlhavmraXljLpcIixcblx0ICAgIFwiNDUxMTE5XCI6IFwi5bmz5qGC566h55CG5Yy6XCIsXG5cdCAgICBcIjQ1MTEyMVwiOiBcIuaYreW5s+WOv1wiLFxuXHQgICAgXCI0NTExMjJcIjogXCLpkp/lsbHljr9cIixcblx0ICAgIFwiNDUxMTIzXCI6IFwi5a+M5bed55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTEyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTEyMDBcIjogXCLmsrPmsaDluIJcIixcblx0ICAgIFwiNDUxMjAyXCI6IFwi6YeR5Z+O5rGf5Yy6XCIsXG5cdCAgICBcIjQ1MTIyMVwiOiBcIuWNl+S4ueWOv1wiLFxuXHQgICAgXCI0NTEyMjJcIjogXCLlpKnls6jljr9cIixcblx0ICAgIFwiNDUxMjIzXCI6IFwi5Yek5bGx5Y6/XCIsXG5cdCAgICBcIjQ1MTIyNFwiOiBcIuS4nOWFsOWOv1wiLFxuXHQgICAgXCI0NTEyMjVcIjogXCLnvZfln47ku6vkvazml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMjI2XCI6IFwi546v5rGf5q+b5Y2X5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTIyN1wiOiBcIuW3tOmprOeRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTEyMjhcIjogXCLpg73lronnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMjI5XCI6IFwi5aSn5YyW55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTI4MVwiOiBcIuWunOW3nuW4glwiLFxuXHQgICAgXCI0NTEyODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUxMzAwXCI6IFwi5p2l5a6+5biCXCIsXG5cdCAgICBcIjQ1MTMwMlwiOiBcIuWFtOWuvuWMulwiLFxuXHQgICAgXCI0NTEzMjFcIjogXCLlv7vln47ljr9cIixcblx0ICAgIFwiNDUxMzIyXCI6IFwi6LGh5bee5Y6/XCIsXG5cdCAgICBcIjQ1MTMyM1wiOiBcIuatpuWuo+WOv1wiLFxuXHQgICAgXCI0NTEzMjRcIjogXCLph5Hnp4Dnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMzgxXCI6IFwi5ZCI5bGx5biCXCIsXG5cdCAgICBcIjQ1MTM4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTE0MDBcIjogXCLltIflt6bluIJcIixcblx0ICAgIFwiNDUxNDAyXCI6IFwi5rGf5bee5Yy6XCIsXG5cdCAgICBcIjQ1MTQyMVwiOiBcIuaJtue7peWOv1wiLFxuXHQgICAgXCI0NTE0MjJcIjogXCLlroHmmI7ljr9cIixcblx0ICAgIFwiNDUxNDIzXCI6IFwi6b6Z5bee5Y6/XCIsXG5cdCAgICBcIjQ1MTQyNFwiOiBcIuWkp+aWsOWOv1wiLFxuXHQgICAgXCI0NTE0MjVcIjogXCLlpKnnrYnljr9cIixcblx0ICAgIFwiNDUxNDgxXCI6IFwi5Yet56Wl5biCXCIsXG5cdCAgICBcIjQ1MTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NjAwMDBcIjogXCLmtbfljZfnnIFcIixcblx0ICAgIFwiNDYwMTAwXCI6IFwi5rW35Y+j5biCXCIsXG5cdCAgICBcIjQ2MDEwNVwiOiBcIuengOiLseWMulwiLFxuXHQgICAgXCI0NjAxMDZcIjogXCLpvpnljY7ljLpcIixcblx0ICAgIFwiNDYwMTA3XCI6IFwi55C85bGx5Yy6XCIsXG5cdCAgICBcIjQ2MDEwOFwiOiBcIue+juWFsOWMulwiLFxuXHQgICAgXCI0NjAxMDlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDYwMjAwXCI6IFwi5LiJ5Lqa5biCXCIsXG5cdCAgICBcIjQ2MDMwMFwiOiBcIuS4ieaymeW4glwiLFxuXHQgICAgXCI0NjAzMjFcIjogXCLopb/mspnnvqTlsptcIixcblx0ICAgIFwiNDYwMzIyXCI6IFwi5Y2X5rKZ576k5bKbXCIsXG5cdCAgICBcIjQ2MDMyM1wiOiBcIuS4reaymee+pOWym+eahOWym+ekgeWPiuWFtua1t+Wfn1wiLFxuXHQgICAgXCI0NjkwMDFcIjogXCLkupTmjIflsbHluIJcIixcblx0ICAgIFwiNDY5MDAyXCI6IFwi55C85rW35biCXCIsXG5cdCAgICBcIjQ2OTAwM1wiOiBcIuWEi+W3nuW4glwiLFxuXHQgICAgXCI0NjkwMDVcIjogXCLmlofmmIzluIJcIixcblx0ICAgIFwiNDY5MDA2XCI6IFwi5LiH5a6B5biCXCIsXG5cdCAgICBcIjQ2OTAwN1wiOiBcIuS4nOaWueW4glwiLFxuXHQgICAgXCI0NjkwMjVcIjogXCLlrprlronljr9cIixcblx0ICAgIFwiNDY5MDI2XCI6IFwi5bGv5piM5Y6/XCIsXG5cdCAgICBcIjQ2OTAyN1wiOiBcIua+hOi/iOWOv1wiLFxuXHQgICAgXCI0NjkwMjhcIjogXCLkuLTpq5jljr9cIixcblx0ICAgIFwiNDY5MDMwXCI6IFwi55m95rKZ6buO5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ2OTAzMVwiOiBcIuaYjOaxn+m7juaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NjkwMzNcIjogXCLkuZDkuJzpu47ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDY5MDM0XCI6IFwi6Zm15rC06buO5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ2OTAzNVwiOiBcIuS/neS6rem7juaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NjkwMzZcIjogXCLnkLzkuK3pu47ml4/oi5fml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDcxMDA1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUwMDAwMFwiOiBcIumHjeW6hlwiLFxuXHQgICAgXCI1MDAxMDBcIjogXCLph43luobluIJcIixcblx0ICAgIFwiNTAwMTAxXCI6IFwi5LiH5bee5Yy6XCIsXG5cdCAgICBcIjUwMDEwMlwiOiBcIua2qumZteWMulwiLFxuXHQgICAgXCI1MDAxMDNcIjogXCLmuJ3kuK3ljLpcIixcblx0ICAgIFwiNTAwMTA0XCI6IFwi5aSn5rih5Y+j5Yy6XCIsXG5cdCAgICBcIjUwMDEwNVwiOiBcIuaxn+WMl+WMulwiLFxuXHQgICAgXCI1MDAxMDZcIjogXCLmspnlnarlnZ3ljLpcIixcblx0ICAgIFwiNTAwMTA3XCI6IFwi5Lmd6b6Z5Z2h5Yy6XCIsXG5cdCAgICBcIjUwMDEwOFwiOiBcIuWNl+WyuOWMulwiLFxuXHQgICAgXCI1MDAxMDlcIjogXCLljJfnoprljLpcIixcblx0ICAgIFwiNTAwMTEwXCI6IFwi5LiH55ub5Yy6XCIsXG5cdCAgICBcIjUwMDExMVwiOiBcIuWPjOahpeWMulwiLFxuXHQgICAgXCI1MDAxMTJcIjogXCLmuJ3ljJfljLpcIixcblx0ICAgIFwiNTAwMTEzXCI6IFwi5be05Y2X5Yy6XCIsXG5cdCAgICBcIjUwMDExNFwiOiBcIum7lOaxn+WMulwiLFxuXHQgICAgXCI1MDAxMTVcIjogXCLplb/lr7/ljLpcIixcblx0ICAgIFwiNTAwMjIyXCI6IFwi57am5rGf5Yy6XCIsXG5cdCAgICBcIjUwMDIyM1wiOiBcIua9vOWNl+WOv1wiLFxuXHQgICAgXCI1MDAyMjRcIjogXCLpk5zmooHljr9cIixcblx0ICAgIFwiNTAwMjI1XCI6IFwi5aSn6Laz5Yy6XCIsXG5cdCAgICBcIjUwMDIyNlwiOiBcIuiNo+aYjOWOv1wiLFxuXHQgICAgXCI1MDAyMjdcIjogXCLnkqflsbHljr9cIixcblx0ICAgIFwiNTAwMjI4XCI6IFwi5qKB5bmz5Y6/XCIsXG5cdCAgICBcIjUwMDIyOVwiOiBcIuWfjuWPo+WOv1wiLFxuXHQgICAgXCI1MDAyMzBcIjogXCLkuLDpg73ljr9cIixcblx0ICAgIFwiNTAwMjMxXCI6IFwi5Z6r5rGf5Y6/XCIsXG5cdCAgICBcIjUwMDIzMlwiOiBcIuatpumahuWOv1wiLFxuXHQgICAgXCI1MDAyMzNcIjogXCLlv6Dljr9cIixcblx0ICAgIFwiNTAwMjM0XCI6IFwi5byA5Y6/XCIsXG5cdCAgICBcIjUwMDIzNVwiOiBcIuS6kemYs+WOv1wiLFxuXHQgICAgXCI1MDAyMzZcIjogXCLlpYnoioLljr9cIixcblx0ICAgIFwiNTAwMjM3XCI6IFwi5ber5bGx5Y6/XCIsXG5cdCAgICBcIjUwMDIzOFwiOiBcIuW3q+a6quWOv1wiLFxuXHQgICAgXCI1MDAyNDBcIjogXCLnn7Pmn7HlnJ/lrrbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTAwMjQxXCI6IFwi56eA5bGx5Zyf5a625peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUwMDI0MlwiOiBcIumFiemYs+Wcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MDAyNDNcIjogXCLlva3msLToi5fml4/lnJ/lrrbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTAwMzgxXCI6IFwi5rGf5rSl5Yy6XCIsXG5cdCAgICBcIjUwMDM4MlwiOiBcIuWQiOW3neWMulwiLFxuXHQgICAgXCI1MDAzODNcIjogXCLmsLjlt53ljLpcIixcblx0ICAgIFwiNTAwMzg0XCI6IFwi5Y2X5bed5Yy6XCIsXG5cdCAgICBcIjUwMDM4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTAwMDBcIjogXCLlm5vlt53nnIFcIixcblx0ICAgIFwiNTEwMTAwXCI6IFwi5oiQ6YO95biCXCIsXG5cdCAgICBcIjUxMDEwNFwiOiBcIumUpuaxn+WMulwiLFxuXHQgICAgXCI1MTAxMDVcIjogXCLpnZLnvorljLpcIixcblx0ICAgIFwiNTEwMTA2XCI6IFwi6YeR54mb5Yy6XCIsXG5cdCAgICBcIjUxMDEwN1wiOiBcIuatpuS+r+WMulwiLFxuXHQgICAgXCI1MTAxMDhcIjogXCLmiJDljY7ljLpcIixcblx0ICAgIFwiNTEwMTEyXCI6IFwi6b6Z5rOJ6am/5Yy6XCIsXG5cdCAgICBcIjUxMDExM1wiOiBcIumdkueZveaxn+WMulwiLFxuXHQgICAgXCI1MTAxMTRcIjogXCLmlrDpg73ljLpcIixcblx0ICAgIFwiNTEwMTE1XCI6IFwi5rip5rGf5Yy6XCIsXG5cdCAgICBcIjUxMDEyMVwiOiBcIumHkeWgguWOv1wiLFxuXHQgICAgXCI1MTAxMjJcIjogXCLlj4zmtYHljr9cIixcblx0ICAgIFwiNTEwMTI0XCI6IFwi6YOr5Y6/XCIsXG5cdCAgICBcIjUxMDEyOVwiOiBcIuWkp+mCkeWOv1wiLFxuXHQgICAgXCI1MTAxMzFcIjogXCLokrLmsZ/ljr9cIixcblx0ICAgIFwiNTEwMTMyXCI6IFwi5paw5rSl5Y6/XCIsXG5cdCAgICBcIjUxMDE4MVwiOiBcIumDveaxn+WgsOW4glwiLFxuXHQgICAgXCI1MTAxODJcIjogXCLlva3lt57luIJcIixcblx0ICAgIFwiNTEwMTgzXCI6IFwi6YKb5bSD5biCXCIsXG5cdCAgICBcIjUxMDE4NFwiOiBcIuW0h+W3nuW4glwiLFxuXHQgICAgXCI1MTAxODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwMzAwXCI6IFwi6Ieq6LSh5biCXCIsXG5cdCAgICBcIjUxMDMwMlwiOiBcIuiHqua1geS6leWMulwiLFxuXHQgICAgXCI1MTAzMDNcIjogXCLotKHkupXljLpcIixcblx0ICAgIFwiNTEwMzA0XCI6IFwi5aSn5a6J5Yy6XCIsXG5cdCAgICBcIjUxMDMxMVwiOiBcIuayv+a7qeWMulwiLFxuXHQgICAgXCI1MTAzMjFcIjogXCLojaPljr9cIixcblx0ICAgIFwiNTEwMzIyXCI6IFwi5a+M6aG65Y6/XCIsXG5cdCAgICBcIjUxMDMyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTA0MDBcIjogXCLmlIDmnp3oirHluIJcIixcblx0ICAgIFwiNTEwNDAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjUxMDQwM1wiOiBcIuilv+WMulwiLFxuXHQgICAgXCI1MTA0MTFcIjogXCLku4HlkozljLpcIixcblx0ICAgIFwiNTEwNDIxXCI6IFwi57Gz5piT5Y6/XCIsXG5cdCAgICBcIjUxMDQyMlwiOiBcIuebkOi+ueWOv1wiLFxuXHQgICAgXCI1MTA0MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwNTAwXCI6IFwi5rO45bee5biCXCIsXG5cdCAgICBcIjUxMDUwMlwiOiBcIuaxn+mYs+WMulwiLFxuXHQgICAgXCI1MTA1MDNcIjogXCLnurPmuqrljLpcIixcblx0ICAgIFwiNTEwNTA0XCI6IFwi6b6Z6ams5r2t5Yy6XCIsXG5cdCAgICBcIjUxMDUyMVwiOiBcIuazuOWOv1wiLFxuXHQgICAgXCI1MTA1MjJcIjogXCLlkIjmsZ/ljr9cIixcblx0ICAgIFwiNTEwNTI0XCI6IFwi5Y+Z5rC45Y6/XCIsXG5cdCAgICBcIjUxMDUyNVwiOiBcIuWPpOiUuuWOv1wiLFxuXHQgICAgXCI1MTA1MjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwNjAwXCI6IFwi5b636Ziz5biCXCIsXG5cdCAgICBcIjUxMDYwM1wiOiBcIuaXjOmYs+WMulwiLFxuXHQgICAgXCI1MTA2MjNcIjogXCLkuK3msZ/ljr9cIixcblx0ICAgIFwiNTEwNjI2XCI6IFwi572X5rGf5Y6/XCIsXG5cdCAgICBcIjUxMDY4MVwiOiBcIuW5v+axieW4glwiLFxuXHQgICAgXCI1MTA2ODJcIjogXCLku4DpgqHluIJcIixcblx0ICAgIFwiNTEwNjgzXCI6IFwi57u156u55biCXCIsXG5cdCAgICBcIjUxMDY4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTA3MDBcIjogXCLnu7XpmLPluIJcIixcblx0ICAgIFwiNTEwNzAzXCI6IFwi5raq5Z+O5Yy6XCIsXG5cdCAgICBcIjUxMDcwNFwiOiBcIua4uOS7meWMulwiLFxuXHQgICAgXCI1MTA3MjJcIjogXCLkuInlj7Dljr9cIixcblx0ICAgIFwiNTEwNzIzXCI6IFwi55uQ5Lqt5Y6/XCIsXG5cdCAgICBcIjUxMDcyNFwiOiBcIuWuieWOv1wiLFxuXHQgICAgXCI1MTA3MjVcIjogXCLmopPmvbzljr9cIixcblx0ICAgIFwiNTEwNzI2XCI6IFwi5YyX5bed576M5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUxMDcyN1wiOiBcIuW5s+atpuWOv1wiLFxuXHQgICAgXCI1MTA3ODFcIjogXCLmsZ/msrnluIJcIixcblx0ICAgIFwiNTEwNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMDgwMFwiOiBcIuW5v+WFg+W4glwiLFxuXHQgICAgXCI1MTA4MDJcIjogXCLliKnlt57ljLpcIixcblx0ICAgIFwiNTEwODExXCI6IFwi5pit5YyW5Yy6XCIsXG5cdCAgICBcIjUxMDgxMlwiOiBcIuacneWkqeWMulwiLFxuXHQgICAgXCI1MTA4MjFcIjogXCLml7roi43ljr9cIixcblx0ICAgIFwiNTEwODIyXCI6IFwi6Z2S5bed5Y6/XCIsXG5cdCAgICBcIjUxMDgyM1wiOiBcIuWJkemYgeWOv1wiLFxuXHQgICAgXCI1MTA4MjRcIjogXCLoi43muqrljr9cIixcblx0ICAgIFwiNTEwODI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMDkwMFwiOiBcIumBguWugeW4glwiLFxuXHQgICAgXCI1MTA5MDNcIjogXCLoiLnlsbHljLpcIixcblx0ICAgIFwiNTEwOTA0XCI6IFwi5a6J5bGF5Yy6XCIsXG5cdCAgICBcIjUxMDkyMVwiOiBcIuiTrOa6quWOv1wiLFxuXHQgICAgXCI1MTA5MjJcIjogXCLlsITmtKrljr9cIixcblx0ICAgIFwiNTEwOTIzXCI6IFwi5aSn6Iux5Y6/XCIsXG5cdCAgICBcIjUxMDkyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTEwMDBcIjogXCLlhoXmsZ/luIJcIixcblx0ICAgIFwiNTExMDAyXCI6IFwi5biC5Lit5Yy6XCIsXG5cdCAgICBcIjUxMTAxMVwiOiBcIuS4nOWFtOWMulwiLFxuXHQgICAgXCI1MTEwMjRcIjogXCLlqIHov5zljr9cIixcblx0ICAgIFwiNTExMDI1XCI6IFwi6LWE5Lit5Y6/XCIsXG5cdCAgICBcIjUxMTAyOFwiOiBcIumahuaYjOWOv1wiLFxuXHQgICAgXCI1MTEwMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTExMTAwXCI6IFwi5LmQ5bGx5biCXCIsXG5cdCAgICBcIjUxMTEwMlwiOiBcIuW4guS4reWMulwiLFxuXHQgICAgXCI1MTExMTFcIjogXCLmspnmub7ljLpcIixcblx0ICAgIFwiNTExMTEyXCI6IFwi5LqU6YCa5qGl5Yy6XCIsXG5cdCAgICBcIjUxMTExM1wiOiBcIumHkeWPo+ays+WMulwiLFxuXHQgICAgXCI1MTExMjNcIjogXCLnio3kuLrljr9cIixcblx0ICAgIFwiNTExMTI0XCI6IFwi5LqV56CU5Y6/XCIsXG5cdCAgICBcIjUxMTEyNlwiOiBcIuWkueaxn+WOv1wiLFxuXHQgICAgXCI1MTExMjlcIjogXCLmspDlt53ljr9cIixcblx0ICAgIFwiNTExMTMyXCI6IFwi5bOo6L655b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUxMTEzM1wiOiBcIumprOi+ueW9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MTExODFcIjogXCLls6jnnInlsbHluIJcIixcblx0ICAgIFwiNTExMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTMwMFwiOiBcIuWNl+WFheW4glwiLFxuXHQgICAgXCI1MTEzMDJcIjogXCLpobrluobljLpcIixcblx0ICAgIFwiNTExMzAzXCI6IFwi6auY5Z2q5Yy6XCIsXG5cdCAgICBcIjUxMTMwNFwiOiBcIuWYiemZteWMulwiLFxuXHQgICAgXCI1MTEzMjFcIjogXCLljZfpg6jljr9cIixcblx0ICAgIFwiNTExMzIyXCI6IFwi6JCl5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTMyM1wiOiBcIuiTrOWuieWOv1wiLFxuXHQgICAgXCI1MTEzMjRcIjogXCLku6rpmYfljr9cIixcblx0ICAgIFwiNTExMzI1XCI6IFwi6KW/5YWF5Y6/XCIsXG5cdCAgICBcIjUxMTM4MVwiOiBcIumYhuS4reW4glwiLFxuXHQgICAgXCI1MTEzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTExNDAwXCI6IFwi55yJ5bGx5biCXCIsXG5cdCAgICBcIjUxMTQwMlwiOiBcIuS4nOWdoeWMulwiLFxuXHQgICAgXCI1MTE0MjFcIjogXCLku4Hlr7/ljr9cIixcblx0ICAgIFwiNTExNDIyXCI6IFwi5b2t5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTQyM1wiOiBcIua0qumbheWOv1wiLFxuXHQgICAgXCI1MTE0MjRcIjogXCLkuLnmo7Hljr9cIixcblx0ICAgIFwiNTExNDI1XCI6IFwi6Z2S56We5Y6/XCIsXG5cdCAgICBcIjUxMTQyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE1MDBcIjogXCLlrpzlrr7luIJcIixcblx0ICAgIFwiNTExNTAyXCI6IFwi57+g5bGP5Yy6XCIsXG5cdCAgICBcIjUxMTUyMVwiOiBcIuWunOWuvuWOv1wiLFxuXHQgICAgXCI1MTE1MjJcIjogXCLljZfmuqrljLpcIixcblx0ICAgIFwiNTExNTIzXCI6IFwi5rGf5a6J5Y6/XCIsXG5cdCAgICBcIjUxMTUyNFwiOiBcIumVv+WugeWOv1wiLFxuXHQgICAgXCI1MTE1MjVcIjogXCLpq5jljr9cIixcblx0ICAgIFwiNTExNTI2XCI6IFwi54+Z5Y6/XCIsXG5cdCAgICBcIjUxMTUyN1wiOiBcIuetoOi/nuWOv1wiLFxuXHQgICAgXCI1MTE1MjhcIjogXCLlhbTmlofljr9cIixcblx0ICAgIFwiNTExNTI5XCI6IFwi5bGP5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTUzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE2MDBcIjogXCLlub/lronluIJcIixcblx0ICAgIFwiNTExNjAyXCI6IFwi5bm/5a6J5Yy6XCIsXG5cdCAgICBcIjUxMTYwM1wiOiBcIuWJjemUi+WMulwiLFxuXHQgICAgXCI1MTE2MjFcIjogXCLlsrPmsaDljr9cIixcblx0ICAgIFwiNTExNjIyXCI6IFwi5q2m6IOc5Y6/XCIsXG5cdCAgICBcIjUxMTYyM1wiOiBcIumCu+awtOWOv1wiLFxuXHQgICAgXCI1MTE2ODFcIjogXCLljY7ok6XluIJcIixcblx0ICAgIFwiNTExNjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTcwMFwiOiBcIui+vuW3nuW4glwiLFxuXHQgICAgXCI1MTE3MDJcIjogXCLpgJrlt53ljLpcIixcblx0ICAgIFwiNTExNzIxXCI6IFwi6L6+5bed5Yy6XCIsXG5cdCAgICBcIjUxMTcyMlwiOiBcIuWuo+axieWOv1wiLFxuXHQgICAgXCI1MTE3MjNcIjogXCLlvIDmsZ/ljr9cIixcblx0ICAgIFwiNTExNzI0XCI6IFwi5aSn56u55Y6/XCIsXG5cdCAgICBcIjUxMTcyNVwiOiBcIua4oOWOv1wiLFxuXHQgICAgXCI1MTE3ODFcIjogXCLkuIfmupDluIJcIixcblx0ICAgIFwiNTExNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTgwMFwiOiBcIumbheWuieW4glwiLFxuXHQgICAgXCI1MTE4MDJcIjogXCLpm6jln47ljLpcIixcblx0ICAgIFwiNTExODIxXCI6IFwi5ZCN5bGx5Yy6XCIsXG5cdCAgICBcIjUxMTgyMlwiOiBcIuiNpee7j+WOv1wiLFxuXHQgICAgXCI1MTE4MjNcIjogXCLmsYnmupDljr9cIixcblx0ICAgIFwiNTExODI0XCI6IFwi55+z5qOJ5Y6/XCIsXG5cdCAgICBcIjUxMTgyNVwiOiBcIuWkqeWFqOWOv1wiLFxuXHQgICAgXCI1MTE4MjZcIjogXCLoiqblsbHljr9cIixcblx0ICAgIFwiNTExODI3XCI6IFwi5a6d5YW05Y6/XCIsXG5cdCAgICBcIjUxMTgyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE5MDBcIjogXCLlt7TkuK3luIJcIixcblx0ICAgIFwiNTExOTAyXCI6IFwi5be05bee5Yy6XCIsXG5cdCAgICBcIjUxMTkwM1wiOiBcIuaBqemYs+WMulwiLFxuXHQgICAgXCI1MTE5MjFcIjogXCLpgJrmsZ/ljr9cIixcblx0ICAgIFwiNTExOTIyXCI6IFwi5Y2X5rGf5Y6/XCIsXG5cdCAgICBcIjUxMTkyM1wiOiBcIuW5s+aYjOWOv1wiLFxuXHQgICAgXCI1MTE5MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEyMDAwXCI6IFwi6LWE6Ziz5biCXCIsXG5cdCAgICBcIjUxMjAwMlwiOiBcIumbgeaxn+WMulwiLFxuXHQgICAgXCI1MTIwMjFcIjogXCLlronlsrPljr9cIixcblx0ICAgIFwiNTEyMDIyXCI6IFwi5LmQ6Iez5Y6/XCIsXG5cdCAgICBcIjUxMjA4MVwiOiBcIueugOmYs+W4glwiLFxuXHQgICAgXCI1MTIwODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEzMjAwXCI6IFwi6Zi/5Z2d6JeP5peP576M5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUxMzIyMVwiOiBcIuaxtuW3neWOv1wiLFxuXHQgICAgXCI1MTMyMjJcIjogXCLnkIbljr9cIixcblx0ICAgIFwiNTEzMjIzXCI6IFwi6IyC5Y6/XCIsXG5cdCAgICBcIjUxMzIyNFwiOiBcIuadvua9mOWOv1wiLFxuXHQgICAgXCI1MTMyMjVcIjogXCLkuZ3lr6jmsp/ljr9cIixcblx0ICAgIFwiNTEzMjI2XCI6IFwi6YeR5bed5Y6/XCIsXG5cdCAgICBcIjUxMzIyN1wiOiBcIuWwj+mHkeWOv1wiLFxuXHQgICAgXCI1MTMyMjhcIjogXCLpu5HmsLTljr9cIixcblx0ICAgIFwiNTEzMjI5XCI6IFwi6ams5bCU5bq35Y6/XCIsXG5cdCAgICBcIjUxMzIzMFwiOiBcIuWjpOWhmOWOv1wiLFxuXHQgICAgXCI1MTMyMzFcIjogXCLpmL/lnZ3ljr9cIixcblx0ICAgIFwiNTEzMjMyXCI6IFwi6Iul5bCU55uW5Y6/XCIsXG5cdCAgICBcIjUxMzIzM1wiOiBcIue6ouWOn+WOv1wiLFxuXHQgICAgXCI1MTMyMzRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEzMzAwXCI6IFwi55SY5a2c6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUxMzMyMVwiOiBcIuW6t+WumuWOv1wiLFxuXHQgICAgXCI1MTMzMjJcIjogXCLms7jlrprljr9cIixcblx0ICAgIFwiNTEzMzIzXCI6IFwi5Li55be05Y6/XCIsXG5cdCAgICBcIjUxMzMyNFwiOiBcIuS5nem+meWOv1wiLFxuXHQgICAgXCI1MTMzMjVcIjogXCLpm4XmsZ/ljr9cIixcblx0ICAgIFwiNTEzMzI2XCI6IFwi6YGT5a2a5Y6/XCIsXG5cdCAgICBcIjUxMzMyN1wiOiBcIueCiemcjeWOv1wiLFxuXHQgICAgXCI1MTMzMjhcIjogXCLnlJjlrZzljr9cIixcblx0ICAgIFwiNTEzMzI5XCI6IFwi5paw6b6Z5Y6/XCIsXG5cdCAgICBcIjUxMzMzMFwiOiBcIuW+t+agvOWOv1wiLFxuXHQgICAgXCI1MTMzMzFcIjogXCLnmb3njonljr9cIixcblx0ICAgIFwiNTEzMzMyXCI6IFwi55+z5rig5Y6/XCIsXG5cdCAgICBcIjUxMzMzM1wiOiBcIuiJsui+vuWOv1wiLFxuXHQgICAgXCI1MTMzMzRcIjogXCLnkIbloZjljr9cIixcblx0ICAgIFwiNTEzMzM1XCI6IFwi5be05aGY5Y6/XCIsXG5cdCAgICBcIjUxMzMzNlwiOiBcIuS5oeWfjuWOv1wiLFxuXHQgICAgXCI1MTMzMzdcIjogXCLnqLvln47ljr9cIixcblx0ICAgIFwiNTEzMzM4XCI6IFwi5b6X6I2j5Y6/XCIsXG5cdCAgICBcIjUxMzMzOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTM0MDBcIjogXCLlh4nlsbHlvZ3ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNTEzNDAxXCI6IFwi6KW/5piM5biCXCIsXG5cdCAgICBcIjUxMzQyMlwiOiBcIuacqOmHjOiXj+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MTM0MjNcIjogXCLnm5DmupDljr9cIixcblx0ICAgIFwiNTEzNDI0XCI6IFwi5b635piM5Y6/XCIsXG5cdCAgICBcIjUxMzQyNVwiOiBcIuS8mueQhuWOv1wiLFxuXHQgICAgXCI1MTM0MjZcIjogXCLkvJrkuJzljr9cIixcblx0ICAgIFwiNTEzNDI3XCI6IFwi5a6B5Y2X5Y6/XCIsXG5cdCAgICBcIjUxMzQyOFwiOiBcIuaZruagvOWOv1wiLFxuXHQgICAgXCI1MTM0MjlcIjogXCLluIPmi5bljr9cIixcblx0ICAgIFwiNTEzNDMwXCI6IFwi6YeR6Ziz5Y6/XCIsXG5cdCAgICBcIjUxMzQzMVwiOiBcIuaYreinieWOv1wiLFxuXHQgICAgXCI1MTM0MzJcIjogXCLllpzlvrfljr9cIixcblx0ICAgIFwiNTEzNDMzXCI6IFwi5YaV5a6B5Y6/XCIsXG5cdCAgICBcIjUxMzQzNFwiOiBcIui2iuilv+WOv1wiLFxuXHQgICAgXCI1MTM0MzVcIjogXCLnlJjmtJvljr9cIixcblx0ICAgIFwiNTEzNDM2XCI6IFwi576O5aeR5Y6/XCIsXG5cdCAgICBcIjUxMzQzN1wiOiBcIumbt+azouWOv1wiLFxuXHQgICAgXCI1MTM0MzhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIwMDAwXCI6IFwi6LS15bee55yBXCIsXG5cdCAgICBcIjUyMDEwMFwiOiBcIui0temYs+W4glwiLFxuXHQgICAgXCI1MjAxMDJcIjogXCLljZfmmI7ljLpcIixcblx0ICAgIFwiNTIwMTAzXCI6IFwi5LqR5bKp5Yy6XCIsXG5cdCAgICBcIjUyMDExMVwiOiBcIuiKsea6quWMulwiLFxuXHQgICAgXCI1MjAxMTJcIjogXCLkuYzlvZPljLpcIixcblx0ICAgIFwiNTIwMTEzXCI6IFwi55m95LqR5Yy6XCIsXG5cdCAgICBcIjUyMDEyMVwiOiBcIuW8gOmYs+WOv1wiLFxuXHQgICAgXCI1MjAxMjJcIjogXCLmga/ng73ljr9cIixcblx0ICAgIFwiNTIwMTIzXCI6IFwi5L+u5paH5Y6/XCIsXG5cdCAgICBcIjUyMDE1MVwiOiBcIuinguWxsea5luWMulwiLFxuXHQgICAgXCI1MjAxODFcIjogXCLmuIXplYfluIJcIixcblx0ICAgIFwiNTIwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMDIwMFwiOiBcIuWFreebmOawtOW4glwiLFxuXHQgICAgXCI1MjAyMDFcIjogXCLpkp/lsbHljLpcIixcblx0ICAgIFwiNTIwMjAzXCI6IFwi5YWt5p6d54m55Yy6XCIsXG5cdCAgICBcIjUyMDIyMVwiOiBcIuawtOWfjuWOv1wiLFxuXHQgICAgXCI1MjAyMjJcIjogXCLnm5jljr9cIixcblx0ICAgIFwiNTIwMjIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMDMwMFwiOiBcIumBteS5ieW4glwiLFxuXHQgICAgXCI1MjAzMDJcIjogXCLnuqLoirHlspfljLpcIixcblx0ICAgIFwiNTIwMzAzXCI6IFwi5rGH5bed5Yy6XCIsXG5cdCAgICBcIjUyMDMyMVwiOiBcIumBteS5ieWOv1wiLFxuXHQgICAgXCI1MjAzMjJcIjogXCLmoZDmopPljr9cIixcblx0ICAgIFwiNTIwMzIzXCI6IFwi57ul6Ziz5Y6/XCIsXG5cdCAgICBcIjUyMDMyNFwiOiBcIuato+WuieWOv1wiLFxuXHQgICAgXCI1MjAzMjVcIjogXCLpgZPnnJ/ku6Hkvazml4/oi5fml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTIwMzI2XCI6IFwi5Yqh5bed5Luh5L2s5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMDMyN1wiOiBcIuWHpOWGiOWOv1wiLFxuXHQgICAgXCI1MjAzMjhcIjogXCLmuYTmva3ljr9cIixcblx0ICAgIFwiNTIwMzI5XCI6IFwi5L2Z5bqG5Y6/XCIsXG5cdCAgICBcIjUyMDMzMFwiOiBcIuS5oOawtOWOv1wiLFxuXHQgICAgXCI1MjAzODFcIjogXCLotaTmsLTluIJcIixcblx0ICAgIFwiNTIwMzgyXCI6IFwi5LuB5oCA5biCXCIsXG5cdCAgICBcIjUyMDM4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MjA0MDBcIjogXCLlronpobrluIJcIixcblx0ICAgIFwiNTIwNDAyXCI6IFwi6KW/56eA5Yy6XCIsXG5cdCAgICBcIjUyMDQyMVwiOiBcIuW5s+WdneWOv1wiLFxuXHQgICAgXCI1MjA0MjJcIjogXCLmma7lrprljr9cIixcblx0ICAgIFwiNTIwNDIzXCI6IFwi6ZWH5a6B5biD5L6d5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMDQyNFwiOiBcIuWFs+WyreW4g+S+neaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjA0MjVcIjogXCLntKvkupHoi5fml4/luIPkvp3ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTIwNDI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMjIwMFwiOiBcIumTnOS7geW4glwiLFxuXHQgICAgXCI1MjIyMDFcIjogXCLnoqfmsZ/ljLpcIixcblx0ICAgIFwiNTIyMjIyXCI6IFwi5rGf5Y+j5Y6/XCIsXG5cdCAgICBcIjUyMjIyM1wiOiBcIueOieWxj+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMjRcIjogXCLnn7PpmKHljr9cIixcblx0ICAgIFwiNTIyMjI1XCI6IFwi5oCd5Y2X5Y6/XCIsXG5cdCAgICBcIjUyMjIyNlwiOiBcIuWNsOaxn+Wcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMjdcIjogXCLlvrfmsZ/ljr9cIixcblx0ICAgIFwiNTIyMjI4XCI6IFwi5rK/5rKz5Zyf5a625peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjIyOVwiOiBcIuadvuahg+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMzBcIjogXCLkuIflsbHljLpcIixcblx0ICAgIFwiNTIyMjMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMjMwMFwiOiBcIum7lOilv+WNl+W4g+S+neaXj+iLl+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI1MjIzMDFcIjogXCLlhbTkuYnluIJcIixcblx0ICAgIFwiNTIyMzIyXCI6IFwi5YW05LuB5Y6/XCIsXG5cdCAgICBcIjUyMjMyM1wiOiBcIuaZruWuieWOv1wiLFxuXHQgICAgXCI1MjIzMjRcIjogXCLmmbTpmobljr9cIixcblx0ICAgIFwiNTIyMzI1XCI6IFwi6LSe5Liw5Y6/XCIsXG5cdCAgICBcIjUyMjMyNlwiOiBcIuacm+iwn+WOv1wiLFxuXHQgICAgXCI1MjIzMjdcIjogXCLlhozkuqjljr9cIixcblx0ICAgIFwiNTIyMzI4XCI6IFwi5a6J6b6Z5Y6/XCIsXG5cdCAgICBcIjUyMjMyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MjI0MDBcIjogXCLmr5XoioLluIJcIixcblx0ICAgIFwiNTIyNDAxXCI6IFwi5LiD5pif5YWz5Yy6XCIsXG5cdCAgICBcIjUyMjQyMlwiOiBcIuWkp+aWueWOv1wiLFxuXHQgICAgXCI1MjI0MjNcIjogXCLpu5Topb/ljr9cIixcblx0ICAgIFwiNTIyNDI0XCI6IFwi6YeR5rKZ5Y6/XCIsXG5cdCAgICBcIjUyMjQyNVwiOiBcIue7h+mHkeWOv1wiLFxuXHQgICAgXCI1MjI0MjZcIjogXCLnurPpm43ljr9cIixcblx0ICAgIFwiNTIyNDI3XCI6IFwi5aiB5a6B5b2d5peP5Zue5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjQyOFwiOiBcIui1q+eroOWOv1wiLFxuXHQgICAgXCI1MjI0MjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIyNjAwXCI6IFwi6buU5Lic5Y2X6IuX5peP5L6X5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUyMjYwMVwiOiBcIuWHr+mHjOW4glwiLFxuXHQgICAgXCI1MjI2MjJcIjogXCLpu4TlubPljr9cIixcblx0ICAgIFwiNTIyNjIzXCI6IFwi5pa956eJ5Y6/XCIsXG5cdCAgICBcIjUyMjYyNFwiOiBcIuS4ieepl+WOv1wiLFxuXHQgICAgXCI1MjI2MjVcIjogXCLplYfov5zljr9cIixcblx0ICAgIFwiNTIyNjI2XCI6IFwi5bKR5bep5Y6/XCIsXG5cdCAgICBcIjUyMjYyN1wiOiBcIuWkqeafseWOv1wiLFxuXHQgICAgXCI1MjI2MjhcIjogXCLplKblsY/ljr9cIixcblx0ICAgIFwiNTIyNjI5XCI6IFwi5YmR5rKz5Y6/XCIsXG5cdCAgICBcIjUyMjYzMFwiOiBcIuWPsOaxn+WOv1wiLFxuXHQgICAgXCI1MjI2MzFcIjogXCLpu47lubPljr9cIixcblx0ICAgIFwiNTIyNjMyXCI6IFwi5qaV5rGf5Y6/XCIsXG5cdCAgICBcIjUyMjYzM1wiOiBcIuS7juaxn+WOv1wiLFxuXHQgICAgXCI1MjI2MzRcIjogXCLpm7flsbHljr9cIixcblx0ICAgIFwiNTIyNjM1XCI6IFwi6bq75rGf5Y6/XCIsXG5cdCAgICBcIjUyMjYzNlwiOiBcIuS4ueWvqOWOv1wiLFxuXHQgICAgXCI1MjI2MzdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIyNzAwXCI6IFwi6buU5Y2X5biD5L6d5peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUyMjcwMVwiOiBcIumDveWMgOW4glwiLFxuXHQgICAgXCI1MjI3MDJcIjogXCLnpo/ms4nluIJcIixcblx0ICAgIFwiNTIyNzIyXCI6IFwi6I2U5rOi5Y6/XCIsXG5cdCAgICBcIjUyMjcyM1wiOiBcIui0teWumuWOv1wiLFxuXHQgICAgXCI1MjI3MjVcIjogXCLnk67lronljr9cIixcblx0ICAgIFwiNTIyNzI2XCI6IFwi54us5bGx5Y6/XCIsXG5cdCAgICBcIjUyMjcyN1wiOiBcIuW5s+WhmOWOv1wiLFxuXHQgICAgXCI1MjI3MjhcIjogXCLnvZfnlLjljr9cIixcblx0ICAgIFwiNTIyNzI5XCI6IFwi6ZW/6aG65Y6/XCIsXG5cdCAgICBcIjUyMjczMFwiOiBcIum+memHjOWOv1wiLFxuXHQgICAgXCI1MjI3MzFcIjogXCLmg6DmsLTljr9cIixcblx0ICAgIFwiNTIyNzMyXCI6IFwi5LiJ6YO95rC05peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjczM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzAwMDBcIjogXCLkupHljZfnnIFcIixcblx0ICAgIFwiNTMwMTAwXCI6IFwi5piG5piO5biCXCIsXG5cdCAgICBcIjUzMDEwMlwiOiBcIuS6lOWNjuWMulwiLFxuXHQgICAgXCI1MzAxMDNcIjogXCLnm5jpvpnljLpcIixcblx0ICAgIFwiNTMwMTExXCI6IFwi5a6Y5rih5Yy6XCIsXG5cdCAgICBcIjUzMDExMlwiOiBcIuilv+WxseWMulwiLFxuXHQgICAgXCI1MzAxMTNcIjogXCLkuJzlt53ljLpcIixcblx0ICAgIFwiNTMwMTIxXCI6IFwi5ZGI6LSh5Yy6XCIsXG5cdCAgICBcIjUzMDEyMlwiOiBcIuaZi+WugeWOv1wiLFxuXHQgICAgXCI1MzAxMjRcIjogXCLlr4zmsJHljr9cIixcblx0ICAgIFwiNTMwMTI1XCI6IFwi5a6c6Imv5Y6/XCIsXG5cdCAgICBcIjUzMDEyNlwiOiBcIuefs+ael+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzAxMjdcIjogXCLltanmmI7ljr9cIixcblx0ICAgIFwiNTMwMTI4XCI6IFwi56aE5Yqd5b2d5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDEyOVwiOiBcIuWvu+eUuOWbnuaXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzAxODFcIjogXCLlronlroHluIJcIixcblx0ICAgIFwiNTMwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMDMwMFwiOiBcIuabsumdluW4glwiLFxuXHQgICAgXCI1MzAzMDJcIjogXCLpupLpup/ljLpcIixcblx0ICAgIFwiNTMwMzIxXCI6IFwi6ams6b6Z5Y6/XCIsXG5cdCAgICBcIjUzMDMyMlwiOiBcIumZhuiJr+WOv1wiLFxuXHQgICAgXCI1MzAzMjNcIjogXCLluIjlrpfljr9cIixcblx0ICAgIFwiNTMwMzI0XCI6IFwi572X5bmz5Y6/XCIsXG5cdCAgICBcIjUzMDMyNVwiOiBcIuWvjOa6kOWOv1wiLFxuXHQgICAgXCI1MzAzMjZcIjogXCLkvJrms73ljr9cIixcblx0ICAgIFwiNTMwMzI4XCI6IFwi5rK+55uK5Y6/XCIsXG5cdCAgICBcIjUzMDM4MVwiOiBcIuWuo+WogeW4glwiLFxuXHQgICAgXCI1MzAzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMwNDAwXCI6IFwi546J5rqq5biCXCIsXG5cdCAgICBcIjUzMDQwMlwiOiBcIue6ouWhlOWMulwiLFxuXHQgICAgXCI1MzA0MjFcIjogXCLmsZ/lt53ljr9cIixcblx0ICAgIFwiNTMwNDIyXCI6IFwi5r6E5rGf5Y6/XCIsXG5cdCAgICBcIjUzMDQyM1wiOiBcIumAmua1t+WOv1wiLFxuXHQgICAgXCI1MzA0MjRcIjogXCLljY7lroHljr9cIixcblx0ICAgIFwiNTMwNDI1XCI6IFwi5piT6Zeo5Y6/XCIsXG5cdCAgICBcIjUzMDQyNlwiOiBcIuWzqOWxseW9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA0MjdcIjogXCLmlrDlubPlvZ3ml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwNDI4XCI6IFwi5YWD5rGf5ZOI5bC85peP5b2d5peP5YKj5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDQyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA1MDBcIjogXCLkv53lsbHluIJcIixcblx0ICAgIFwiNTMwNTAyXCI6IFwi6ZqG6Ziz5Yy6XCIsXG5cdCAgICBcIjUzMDUyMVwiOiBcIuaWveeUuOWOv1wiLFxuXHQgICAgXCI1MzA1MjJcIjogXCLohb7lhrLljr9cIixcblx0ICAgIFwiNTMwNTIzXCI6IFwi6b6Z6Zm15Y6/XCIsXG5cdCAgICBcIjUzMDUyNFwiOiBcIuaYjOWugeWOv1wiLFxuXHQgICAgXCI1MzA1MjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMwNjAwXCI6IFwi5pit6YCa5biCXCIsXG5cdCAgICBcIjUzMDYwMlwiOiBcIuaYremYs+WMulwiLFxuXHQgICAgXCI1MzA2MjFcIjogXCLpsoHnlLjljr9cIixcblx0ICAgIFwiNTMwNjIyXCI6IFwi5ben5a625Y6/XCIsXG5cdCAgICBcIjUzMDYyM1wiOiBcIuebkOa0peWOv1wiLFxuXHQgICAgXCI1MzA2MjRcIjogXCLlpKflhbPljr9cIixcblx0ICAgIFwiNTMwNjI1XCI6IFwi5rC45ZaE5Y6/XCIsXG5cdCAgICBcIjUzMDYyNlwiOiBcIue7peaxn+WOv1wiLFxuXHQgICAgXCI1MzA2MjdcIjogXCLplYfpm4Tljr9cIixcblx0ICAgIFwiNTMwNjI4XCI6IFwi5b2d6Imv5Y6/XCIsXG5cdCAgICBcIjUzMDYyOVwiOiBcIuWogeS/oeWOv1wiLFxuXHQgICAgXCI1MzA2MzBcIjogXCLmsLTlr4zljr9cIixcblx0ICAgIFwiNTMwNjMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMDcwMFwiOiBcIuS4veaxn+W4glwiLFxuXHQgICAgXCI1MzA3MDJcIjogXCLlj6Tln47ljLpcIixcblx0ICAgIFwiNTMwNzIxXCI6IFwi546J6b6Z57qz6KW/5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDcyMlwiOiBcIuawuOiDnOWOv1wiLFxuXHQgICAgXCI1MzA3MjNcIjogXCLljY7lnarljr9cIixcblx0ICAgIFwiNTMwNzI0XCI6IFwi5a6B6JKX5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDcyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA4MDBcIjogXCLmma7mtLHluIJcIixcblx0ICAgIFwiNTMwODAyXCI6IFwi5oCd6IyF5Yy6XCIsXG5cdCAgICBcIjUzMDgyMVwiOiBcIuWugea0seWTiOWwvOaXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjJcIjogXCLloqjmsZ/lk4jlsLzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODIzXCI6IFwi5pmv5Lic5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgyNFwiOiBcIuaZr+iwt+WCo+aXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjVcIjogXCLplYfmsoXlvZ3ml4/lk4jlsLzml4/mi4nnpZzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODI2XCI6IFwi5rGf5Z+O5ZOI5bC85peP5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgyN1wiOiBcIuWtn+i/nuWCo+aXj+aLieelnOaXj+S9pOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjhcIjogXCLmvpzmsqfmi4nnpZzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODI5XCI6IFwi6KW/55uf5L2k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA5MDBcIjogXCLkuLTmsqfluIJcIixcblx0ICAgIFwiNTMwOTAyXCI6IFwi5Li057+U5Yy6XCIsXG5cdCAgICBcIjUzMDkyMVwiOiBcIuWHpOW6huWOv1wiLFxuXHQgICAgXCI1MzA5MjJcIjogXCLkupHljr9cIixcblx0ICAgIFwiNTMwOTIzXCI6IFwi5rC45b635Y6/XCIsXG5cdCAgICBcIjUzMDkyNFwiOiBcIumVh+W6t+WOv1wiLFxuXHQgICAgXCI1MzA5MjVcIjogXCLlj4zmsZ/mi4nnpZzml4/kvaTml4/luIPmnJfml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwOTI2XCI6IFwi6IC/6ams5YKj5peP5L2k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDkyN1wiOiBcIuayp+a6kOS9pOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA5MjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyMzAwXCI6IFwi5qWa6ZuE5b2d5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjMwMVwiOiBcIualmumbhOW4glwiLFxuXHQgICAgXCI1MzIzMjJcIjogXCLlj4zmn4/ljr9cIixcblx0ICAgIFwiNTMyMzIzXCI6IFwi54mf5a6a5Y6/XCIsXG5cdCAgICBcIjUzMjMyNFwiOiBcIuWNl+WNjuWOv1wiLFxuXHQgICAgXCI1MzIzMjVcIjogXCLlp5rlronljr9cIixcblx0ICAgIFwiNTMyMzI2XCI6IFwi5aSn5aea5Y6/XCIsXG5cdCAgICBcIjUzMjMyN1wiOiBcIuawuOS7geWOv1wiLFxuXHQgICAgXCI1MzIzMjhcIjogXCLlhYPosIvljr9cIixcblx0ICAgIFwiNTMyMzI5XCI6IFwi5q2m5a6a5Y6/XCIsXG5cdCAgICBcIjUzMjMzMVwiOiBcIuemhOS4sOWOv1wiLFxuXHQgICAgXCI1MzIzMzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyNTAwXCI6IFwi57qi5rKz5ZOI5bC85peP5b2d5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjUwMVwiOiBcIuS4quaXp+W4glwiLFxuXHQgICAgXCI1MzI1MDJcIjogXCLlvIDov5zluIJcIixcblx0ICAgIFwiNTMyNTIyXCI6IFwi6JKZ6Ieq5biCXCIsXG5cdCAgICBcIjUzMjUyM1wiOiBcIuWxj+i+ueiLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI1MjRcIjogXCLlu7rmsLTljr9cIixcblx0ICAgIFwiNTMyNTI1XCI6IFwi55+z5bGP5Y6/XCIsXG5cdCAgICBcIjUzMjUyNlwiOiBcIuW8peWLkuW4glwiLFxuXHQgICAgXCI1MzI1MjdcIjogXCLms7jopb/ljr9cIixcblx0ICAgIFwiNTMyNTI4XCI6IFwi5YWD6Ziz5Y6/XCIsXG5cdCAgICBcIjUzMjUyOVwiOiBcIue6ouays+WOv1wiLFxuXHQgICAgXCI1MzI1MzBcIjogXCLph5HlubPoi5fml4/nkbbml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMyNTMxXCI6IFwi57u/5pil5Y6/XCIsXG5cdCAgICBcIjUzMjUzMlwiOiBcIuays+WPo+eRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI1MzNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyNjAwXCI6IFwi5paH5bGx5aOu5peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjYyMVwiOiBcIuaWh+WxseW4glwiLFxuXHQgICAgXCI1MzI2MjJcIjogXCLnoJrlsbHljr9cIixcblx0ICAgIFwiNTMyNjIzXCI6IFwi6KW/55W05Y6/XCIsXG5cdCAgICBcIjUzMjYyNFwiOiBcIum6u+agl+WdoeWOv1wiLFxuXHQgICAgXCI1MzI2MjVcIjogXCLpqazlhbPljr9cIixcblx0ICAgIFwiNTMyNjI2XCI6IFwi5LiY5YyX5Y6/XCIsXG5cdCAgICBcIjUzMjYyN1wiOiBcIuW5v+WNl+WOv1wiLFxuXHQgICAgXCI1MzI2MjhcIjogXCLlr4zlroHljr9cIixcblx0ICAgIFwiNTMyNjI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMjgwMFwiOiBcIuilv+WPjOeJiOe6s+WCo+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI1MzI4MDFcIjogXCLmma/mtKrluIJcIixcblx0ICAgIFwiNTMyODIyXCI6IFwi5YuQ5rW35Y6/XCIsXG5cdCAgICBcIjUzMjgyM1wiOiBcIuWLkOiFiuWOv1wiLFxuXHQgICAgXCI1MzI4MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyOTAwXCI6IFwi5aSn55CG55m95peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjkwMVwiOiBcIuWkp+eQhuW4glwiLFxuXHQgICAgXCI1MzI5MjJcIjogXCLmvL7mv57lvZ3ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMyOTIzXCI6IFwi56Wl5LqR5Y6/XCIsXG5cdCAgICBcIjUzMjkyNFwiOiBcIuWuvuW3neWOv1wiLFxuXHQgICAgXCI1MzI5MjVcIjogXCLlvKXmuKHljr9cIixcblx0ICAgIFwiNTMyOTI2XCI6IFwi5Y2X5ran5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMjkyN1wiOiBcIuW3jeWxseW9neaXj+WbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI5MjhcIjogXCLmsLjlubPljr9cIixcblx0ICAgIFwiNTMyOTI5XCI6IFwi5LqR6b6Z5Y6/XCIsXG5cdCAgICBcIjUzMjkzMFwiOiBcIua0sea6kOWOv1wiLFxuXHQgICAgXCI1MzI5MzFcIjogXCLliZHlt53ljr9cIixcblx0ICAgIFwiNTMyOTMyXCI6IFwi6bmk5bqG5Y6/XCIsXG5cdCAgICBcIjUzMjkzM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzMxMDBcIjogXCLlvrflro/lgqPml4/mma/poofml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNTMzMTAyXCI6IFwi55Ge5Li95biCXCIsXG5cdCAgICBcIjUzMzEwM1wiOiBcIuiKkuW4glwiLFxuXHQgICAgXCI1MzMxMjJcIjogXCLmooHmsrPljr9cIixcblx0ICAgIFwiNTMzMTIzXCI6IFwi55uI5rGf5Y6/XCIsXG5cdCAgICBcIjUzMzEyNFwiOiBcIumZh+W3neWOv1wiLFxuXHQgICAgXCI1MzMxMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMzMzAwXCI6IFwi5oCS5rGf5YKI5YOz5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMzMyMVwiOiBcIuazuOawtOWOv1wiLFxuXHQgICAgXCI1MzMzMjNcIjogXCLnpo/otKHljr9cIixcblx0ICAgIFwiNTMzMzI0XCI6IFwi6LSh5bGx54us6b6Z5peP5oCS5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMzMyNVwiOiBcIuWFsOWdqueZveaXj+aZruexs+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzMzMjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMzNDAwXCI6IFwi6L+q5bqG6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMzQyMVwiOiBcIummmeagvOmHjOaLieWOv1wiLFxuXHQgICAgXCI1MzM0MjJcIjogXCLlvrfpkqbljr9cIixcblx0ICAgIFwiNTMzNDIzXCI6IFwi57u06KW/5YKI5YOz5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMzQyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1NDAwMDBcIjogXCLopb/ol4/oh6rmsrvljLpcIixcblx0ICAgIFwiNTQwMTAwXCI6IFwi5ouJ6JCo5biCXCIsXG5cdCAgICBcIjU0MDEwMlwiOiBcIuWfjuWFs+WMulwiLFxuXHQgICAgXCI1NDAxMjFcIjogXCLmnpflkajljr9cIixcblx0ICAgIFwiNTQwMTIyXCI6IFwi5b2T6ZuE5Y6/XCIsXG5cdCAgICBcIjU0MDEyM1wiOiBcIuWwvOacqOWOv1wiLFxuXHQgICAgXCI1NDAxMjRcIjogXCLmm7LmsLTljr9cIixcblx0ICAgIFwiNTQwMTI1XCI6IFwi5aCG6b6Z5b635bqG5Y6/XCIsXG5cdCAgICBcIjU0MDEyNlwiOiBcIui+vuWtnOWOv1wiLFxuXHQgICAgXCI1NDAxMjdcIjogXCLloqjnq7nlt6XljaHljr9cIixcblx0ICAgIFwiNTQwMTI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjEwMFwiOiBcIuaYjOmDveWcsOWMulwiLFxuXHQgICAgXCI1NDIxMjFcIjogXCLmmIzpg73ljr9cIixcblx0ICAgIFwiNTQyMTIyXCI6IFwi5rGf6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjEyM1wiOiBcIui0oeinieWOv1wiLFxuXHQgICAgXCI1NDIxMjRcIjogXCLnsbvkuYzpvZDljr9cIixcblx0ICAgIFwiNTQyMTI1XCI6IFwi5LiB6Z2S5Y6/XCIsXG5cdCAgICBcIjU0MjEyNlwiOiBcIuWvn+mbheWOv1wiLFxuXHQgICAgXCI1NDIxMjdcIjogXCLlhavlrr/ljr9cIixcblx0ICAgIFwiNTQyMTI4XCI6IFwi5bem6LSh5Y6/XCIsXG5cdCAgICBcIjU0MjEyOVwiOiBcIuiKkuW6t+WOv1wiLFxuXHQgICAgXCI1NDIxMzJcIjogXCLmtJvpmobljr9cIixcblx0ICAgIFwiNTQyMTMzXCI6IFwi6L655Z2d5Y6/XCIsXG5cdCAgICBcIjU0MjEzNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1NDIyMDBcIjogXCLlsbHljZflnLDljLpcIixcblx0ICAgIFwiNTQyMjIxXCI6IFwi5LmD5Lic5Y6/XCIsXG5cdCAgICBcIjU0MjIyMlwiOiBcIuaJjuWbiuWOv1wiLFxuXHQgICAgXCI1NDIyMjNcIjogXCLotKHlmI7ljr9cIixcblx0ICAgIFwiNTQyMjI0XCI6IFwi5qGR5pel5Y6/XCIsXG5cdCAgICBcIjU0MjIyNVwiOiBcIueQvOe7k+WOv1wiLFxuXHQgICAgXCI1NDIyMjZcIjogXCLmm7Lmnb7ljr9cIixcblx0ICAgIFwiNTQyMjI3XCI6IFwi5o6q576O5Y6/XCIsXG5cdCAgICBcIjU0MjIyOFwiOiBcIua0m+aJjuWOv1wiLFxuXHQgICAgXCI1NDIyMjlcIjogXCLliqDmn6Xljr9cIixcblx0ICAgIFwiNTQyMjMxXCI6IFwi6ZqG5a2Q5Y6/XCIsXG5cdCAgICBcIjU0MjIzMlwiOiBcIumUmemCo+WOv1wiLFxuXHQgICAgXCI1NDIyMzNcIjogXCLmtarljaHlrZDljr9cIixcblx0ICAgIFwiNTQyMjM0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjMwMFwiOiBcIuaXpeWWgOWImeWcsOWMulwiLFxuXHQgICAgXCI1NDIzMDFcIjogXCLml6XlloDliJnluIJcIixcblx0ICAgIFwiNTQyMzIyXCI6IFwi5Y2X5pyo5p6X5Y6/XCIsXG5cdCAgICBcIjU0MjMyM1wiOiBcIuaxn+WtnOWOv1wiLFxuXHQgICAgXCI1NDIzMjRcIjogXCLlrprml6Xljr9cIixcblx0ICAgIFwiNTQyMzI1XCI6IFwi6JCo6L+m5Y6/XCIsXG5cdCAgICBcIjU0MjMyNlwiOiBcIuaLieWtnOWOv1wiLFxuXHQgICAgXCI1NDIzMjdcIjogXCLmmILku4Hljr9cIixcblx0ICAgIFwiNTQyMzI4XCI6IFwi6LCi6YCa6Zeo5Y6/XCIsXG5cdCAgICBcIjU0MjMyOVwiOiBcIueZveacl+WOv1wiLFxuXHQgICAgXCI1NDIzMzBcIjogXCLku4HluIPljr9cIixcblx0ICAgIFwiNTQyMzMxXCI6IFwi5bq36ams5Y6/XCIsXG5cdCAgICBcIjU0MjMzMlwiOiBcIuWumue7k+WOv1wiLFxuXHQgICAgXCI1NDIzMzNcIjogXCLku7Llt7Tljr9cIixcblx0ICAgIFwiNTQyMzM0XCI6IFwi5Lqa5Lic5Y6/XCIsXG5cdCAgICBcIjU0MjMzNVwiOiBcIuWQiemahuWOv1wiLFxuXHQgICAgXCI1NDIzMzZcIjogXCLogYLmi4nmnKjljr9cIixcblx0ICAgIFwiNTQyMzM3XCI6IFwi6JCo5ZiO5Y6/XCIsXG5cdCAgICBcIjU0MjMzOFwiOiBcIuWyl+W3tOWOv1wiLFxuXHQgICAgXCI1NDIzMzlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTQyNDAwXCI6IFwi6YKj5puy5Zyw5Yy6XCIsXG5cdCAgICBcIjU0MjQyMVwiOiBcIumCo+absuWOv1wiLFxuXHQgICAgXCI1NDI0MjJcIjogXCLlmInpu47ljr9cIixcblx0ICAgIFwiNTQyNDIzXCI6IFwi5q+U5aaC5Y6/XCIsXG5cdCAgICBcIjU0MjQyNFwiOiBcIuiBguiNo+WOv1wiLFxuXHQgICAgXCI1NDI0MjVcIjogXCLlronlpJrljr9cIixcblx0ICAgIFwiNTQyNDI2XCI6IFwi55Sz5omO5Y6/XCIsXG5cdCAgICBcIjU0MjQyN1wiOiBcIue0ouWOv1wiLFxuXHQgICAgXCI1NDI0MjhcIjogXCLnj63miIjljr9cIixcblx0ICAgIFwiNTQyNDI5XCI6IFwi5be06Z2S5Y6/XCIsXG5cdCAgICBcIjU0MjQzMFwiOiBcIuWwvOeOm+WOv1wiLFxuXHQgICAgXCI1NDI0MzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTQyNDMyXCI6IFwi5Y+M5rmW5Y6/XCIsXG5cdCAgICBcIjU0MjUwMFwiOiBcIumYv+mHjOWcsOWMulwiLFxuXHQgICAgXCI1NDI1MjFcIjogXCLmma7lhbDljr9cIixcblx0ICAgIFwiNTQyNTIyXCI6IFwi5pyt6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjUyM1wiOiBcIuWZtuWwlOWOv1wiLFxuXHQgICAgXCI1NDI1MjRcIjogXCLml6XlnJ/ljr9cIixcblx0ICAgIFwiNTQyNTI1XCI6IFwi6Z2p5ZCJ5Y6/XCIsXG5cdCAgICBcIjU0MjUyNlwiOiBcIuaUueWImeWOv1wiLFxuXHQgICAgXCI1NDI1MjdcIjogXCLmjqrli6Tljr9cIixcblx0ICAgIFwiNTQyNTI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjYwMFwiOiBcIuael+iKneWcsOWMulwiLFxuXHQgICAgXCI1NDI2MjFcIjogXCLmnpfoip3ljr9cIixcblx0ICAgIFwiNTQyNjIyXCI6IFwi5bel5biD5rGf6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjYyM1wiOiBcIuexs+ael+WOv1wiLFxuXHQgICAgXCI1NDI2MjRcIjogXCLloqjohLHljr9cIixcblx0ICAgIFwiNTQyNjI1XCI6IFwi5rOi5a+G5Y6/XCIsXG5cdCAgICBcIjU0MjYyNlwiOiBcIuWvn+maheWOv1wiLFxuXHQgICAgXCI1NDI2MjdcIjogXCLmnJfljr9cIixcblx0ICAgIFwiNTQyNjI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDAwMFwiOiBcIumZleilv+ecgVwiLFxuXHQgICAgXCI2MTAxMDBcIjogXCLopb/lronluIJcIixcblx0ICAgIFwiNjEwMTAyXCI6IFwi5paw5Z+O5Yy6XCIsXG5cdCAgICBcIjYxMDEwM1wiOiBcIueikeael+WMulwiLFxuXHQgICAgXCI2MTAxMDRcIjogXCLojrLmuZbljLpcIixcblx0ICAgIFwiNjEwMTExXCI6IFwi54Ge5qGl5Yy6XCIsXG5cdCAgICBcIjYxMDExMlwiOiBcIuacquWkruWMulwiLFxuXHQgICAgXCI2MTAxMTNcIjogXCLpm4HloZTljLpcIixcblx0ICAgIFwiNjEwMTE0XCI6IFwi6ZiO6Imv5Yy6XCIsXG5cdCAgICBcIjYxMDExNVwiOiBcIuS4tOa9vOWMulwiLFxuXHQgICAgXCI2MTAxMTZcIjogXCLplb/lronljLpcIixcblx0ICAgIFwiNjEwMTIyXCI6IFwi6JOd55Sw5Y6/XCIsXG5cdCAgICBcIjYxMDEyNFwiOiBcIuWRqOiHs+WOv1wiLFxuXHQgICAgXCI2MTAxMjVcIjogXCLmiLfljr9cIixcblx0ICAgIFwiNjEwMTI2XCI6IFwi6auY6Zm15Y6/XCIsXG5cdCAgICBcIjYxMDEyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTAyMDBcIjogXCLpk5zlt53luIJcIixcblx0ICAgIFwiNjEwMjAyXCI6IFwi546L55uK5Yy6XCIsXG5cdCAgICBcIjYxMDIwM1wiOiBcIuWNsOWPsOWMulwiLFxuXHQgICAgXCI2MTAyMDRcIjogXCLogIDlt57ljLpcIixcblx0ICAgIFwiNjEwMjIyXCI6IFwi5a6c5ZCb5Y6/XCIsXG5cdCAgICBcIjYxMDIyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTAzMDBcIjogXCLlrp3puKHluIJcIixcblx0ICAgIFwiNjEwMzAyXCI6IFwi5rit5ruo5Yy6XCIsXG5cdCAgICBcIjYxMDMwM1wiOiBcIumHkeWPsOWMulwiLFxuXHQgICAgXCI2MTAzMDRcIjogXCLpmYjku5PljLpcIixcblx0ICAgIFwiNjEwMzIyXCI6IFwi5Yek57+U5Y6/XCIsXG5cdCAgICBcIjYxMDMyM1wiOiBcIuWykOWxseWOv1wiLFxuXHQgICAgXCI2MTAzMjRcIjogXCLmibbpo47ljr9cIixcblx0ICAgIFwiNjEwMzI2XCI6IFwi55yJ5Y6/XCIsXG5cdCAgICBcIjYxMDMyN1wiOiBcIumZh+WOv1wiLFxuXHQgICAgXCI2MTAzMjhcIjogXCLljYPpmLPljr9cIixcblx0ICAgIFwiNjEwMzI5XCI6IFwi6bqf5ri45Y6/XCIsXG5cdCAgICBcIjYxMDMzMFwiOiBcIuWHpOWOv1wiLFxuXHQgICAgXCI2MTAzMzFcIjogXCLlpKrnmb3ljr9cIixcblx0ICAgIFwiNjEwMzMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDQwMFwiOiBcIuWSuOmYs+W4glwiLFxuXHQgICAgXCI2MTA0MDJcIjogXCLnp6bpg73ljLpcIixcblx0ICAgIFwiNjEwNDAzXCI6IFwi5p2o6Zm15Yy6XCIsXG5cdCAgICBcIjYxMDQwNFwiOiBcIua4reWfjuWMulwiLFxuXHQgICAgXCI2MTA0MjJcIjogXCLkuInljp/ljr9cIixcblx0ICAgIFwiNjEwNDIzXCI6IFwi5rO+6Ziz5Y6/XCIsXG5cdCAgICBcIjYxMDQyNFwiOiBcIuS5vuWOv1wiLFxuXHQgICAgXCI2MTA0MjVcIjogXCLnpLzms4nljr9cIixcblx0ICAgIFwiNjEwNDI2XCI6IFwi5rC45a+/5Y6/XCIsXG5cdCAgICBcIjYxMDQyN1wiOiBcIuW9rOWOv1wiLFxuXHQgICAgXCI2MTA0MjhcIjogXCLplb/mrabljr9cIixcblx0ICAgIFwiNjEwNDI5XCI6IFwi5pes6YKR5Y6/XCIsXG5cdCAgICBcIjYxMDQzMFwiOiBcIua3s+WMluWOv1wiLFxuXHQgICAgXCI2MTA0MzFcIjogXCLmrablip/ljr9cIixcblx0ICAgIFwiNjEwNDgxXCI6IFwi5YW05bmz5biCXCIsXG5cdCAgICBcIjYxMDQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTA1MDBcIjogXCLmuK3ljZfluIJcIixcblx0ICAgIFwiNjEwNTAyXCI6IFwi5Li05rit5Yy6XCIsXG5cdCAgICBcIjYxMDUyMVwiOiBcIuWNjuWOv1wiLFxuXHQgICAgXCI2MTA1MjJcIjogXCLmvbzlhbPljr9cIixcblx0ICAgIFwiNjEwNTIzXCI6IFwi5aSn6I2U5Y6/XCIsXG5cdCAgICBcIjYxMDUyNFwiOiBcIuWQiOmYs+WOv1wiLFxuXHQgICAgXCI2MTA1MjVcIjogXCLmvoTln47ljr9cIixcblx0ICAgIFwiNjEwNTI2XCI6IFwi6JKy5Z+O5Y6/XCIsXG5cdCAgICBcIjYxMDUyN1wiOiBcIueZveawtOWOv1wiLFxuXHQgICAgXCI2MTA1MjhcIjogXCLlr4zlubPljr9cIixcblx0ICAgIFwiNjEwNTgxXCI6IFwi6Z+p5Z+O5biCXCIsXG5cdCAgICBcIjYxMDU4MlwiOiBcIuWNjumYtOW4glwiLFxuXHQgICAgXCI2MTA1ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwNjAwXCI6IFwi5bu25a6J5biCXCIsXG5cdCAgICBcIjYxMDYwMlwiOiBcIuWuneWhlOWMulwiLFxuXHQgICAgXCI2MTA2MjFcIjogXCLlu7bplb/ljr9cIixcblx0ICAgIFwiNjEwNjIyXCI6IFwi5bu25bed5Y6/XCIsXG5cdCAgICBcIjYxMDYyM1wiOiBcIuWtkOmVv+WOv1wiLFxuXHQgICAgXCI2MTA2MjRcIjogXCLlronloZ7ljr9cIixcblx0ICAgIFwiNjEwNjI1XCI6IFwi5b+X5Li55Y6/XCIsXG5cdCAgICBcIjYxMDYyNlwiOiBcIuWQtOi1t+WOv1wiLFxuXHQgICAgXCI2MTA2MjdcIjogXCLnlJjms4nljr9cIixcblx0ICAgIFwiNjEwNjI4XCI6IFwi5a+M5Y6/XCIsXG5cdCAgICBcIjYxMDYyOVwiOiBcIua0m+W3neWOv1wiLFxuXHQgICAgXCI2MTA2MzBcIjogXCLlrpzlt53ljr9cIixcblx0ICAgIFwiNjEwNjMxXCI6IFwi6buE6b6Z5Y6/XCIsXG5cdCAgICBcIjYxMDYzMlwiOiBcIum7hOmZteWOv1wiLFxuXHQgICAgXCI2MTA2MzNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwNzAwXCI6IFwi5rGJ5Lit5biCXCIsXG5cdCAgICBcIjYxMDcwMlwiOiBcIuaxieWPsOWMulwiLFxuXHQgICAgXCI2MTA3MjFcIjogXCLljZfpg5Hljr9cIixcblx0ICAgIFwiNjEwNzIyXCI6IFwi5Z+O5Zu65Y6/XCIsXG5cdCAgICBcIjYxMDcyM1wiOiBcIua0i+WOv1wiLFxuXHQgICAgXCI2MTA3MjRcIjogXCLopb/kuaHljr9cIixcblx0ICAgIFwiNjEwNzI1XCI6IFwi5YuJ5Y6/XCIsXG5cdCAgICBcIjYxMDcyNlwiOiBcIuWugeW8uuWOv1wiLFxuXHQgICAgXCI2MTA3MjdcIjogXCLnlaXpmLPljr9cIixcblx0ICAgIFwiNjEwNzI4XCI6IFwi6ZWH5be05Y6/XCIsXG5cdCAgICBcIjYxMDcyOVwiOiBcIueVmeWdneWOv1wiLFxuXHQgICAgXCI2MTA3MzBcIjogXCLkvZvlnarljr9cIixcblx0ICAgIFwiNjEwNzMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDgwMFwiOiBcIuamhuael+W4glwiLFxuXHQgICAgXCI2MTA4MDJcIjogXCLmpobpmLPljLpcIixcblx0ICAgIFwiNjEwODIxXCI6IFwi56We5pyo5Y6/XCIsXG5cdCAgICBcIjYxMDgyMlwiOiBcIuW6nOiwt+WOv1wiLFxuXHQgICAgXCI2MTA4MjNcIjogXCLmqKrlsbHljr9cIixcblx0ICAgIFwiNjEwODI0XCI6IFwi6Z2W6L655Y6/XCIsXG5cdCAgICBcIjYxMDgyNVwiOiBcIuWumui+ueWOv1wiLFxuXHQgICAgXCI2MTA4MjZcIjogXCLnu6Xlvrfljr9cIixcblx0ICAgIFwiNjEwODI3XCI6IFwi57Gz6ISC5Y6/XCIsXG5cdCAgICBcIjYxMDgyOFwiOiBcIuS9s+WOv1wiLFxuXHQgICAgXCI2MTA4MjlcIjogXCLlkLTloKHljr9cIixcblx0ICAgIFwiNjEwODMwXCI6IFwi5riF5ran5Y6/XCIsXG5cdCAgICBcIjYxMDgzMVwiOiBcIuWtkOa0suWOv1wiLFxuXHQgICAgXCI2MTA4MzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwOTAwXCI6IFwi5a6J5bq35biCXCIsXG5cdCAgICBcIjYxMDkwMlwiOiBcIuaxiea7qOWMulwiLFxuXHQgICAgXCI2MTA5MjFcIjogXCLmsYnpmLTljr9cIixcblx0ICAgIFwiNjEwOTIyXCI6IFwi55+z5rOJ5Y6/XCIsXG5cdCAgICBcIjYxMDkyM1wiOiBcIuWugemZleWOv1wiLFxuXHQgICAgXCI2MTA5MjRcIjogXCLntKvpmLPljr9cIixcblx0ICAgIFwiNjEwOTI1XCI6IFwi5bKa55qL5Y6/XCIsXG5cdCAgICBcIjYxMDkyNlwiOiBcIuW5s+WIqeWOv1wiLFxuXHQgICAgXCI2MTA5MjdcIjogXCLplYflnarljr9cIixcblx0ICAgIFwiNjEwOTI4XCI6IFwi5pes6Ziz5Y6/XCIsXG5cdCAgICBcIjYxMDkyOVwiOiBcIueZveays+WOv1wiLFxuXHQgICAgXCI2MTA5MzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjExMDAwXCI6IFwi5ZWG5rSb5biCXCIsXG5cdCAgICBcIjYxMTAwMlwiOiBcIuWVhuW3nuWMulwiLFxuXHQgICAgXCI2MTEwMjFcIjogXCLmtJvljZfljr9cIixcblx0ICAgIFwiNjExMDIyXCI6IFwi5Li55Yek5Y6/XCIsXG5cdCAgICBcIjYxMTAyM1wiOiBcIuWVhuWNl+WOv1wiLFxuXHQgICAgXCI2MTEwMjRcIjogXCLlsbHpmLPljr9cIixcblx0ICAgIFwiNjExMDI1XCI6IFwi6ZWH5a6J5Y6/XCIsXG5cdCAgICBcIjYxMTAyNlwiOiBcIuafnuawtOWOv1wiLFxuXHQgICAgXCI2MTEwMjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjIwMDAwXCI6IFwi55SY6IKD55yBXCIsXG5cdCAgICBcIjYyMDEwMFwiOiBcIuWFsOW3nuW4glwiLFxuXHQgICAgXCI2MjAxMDJcIjogXCLln47lhbPljLpcIixcblx0ICAgIFwiNjIwMTAzXCI6IFwi5LiD6YeM5rKz5Yy6XCIsXG5cdCAgICBcIjYyMDEwNFwiOiBcIuilv+WbuuWMulwiLFxuXHQgICAgXCI2MjAxMDVcIjogXCLlronlroHljLpcIixcblx0ICAgIFwiNjIwMTExXCI6IFwi57qi5Y+k5Yy6XCIsXG5cdCAgICBcIjYyMDEyMVwiOiBcIuawuOeZu+WOv1wiLFxuXHQgICAgXCI2MjAxMjJcIjogXCLnmovlhbDljr9cIixcblx0ICAgIFwiNjIwMTIzXCI6IFwi5qaG5Lit5Y6/XCIsXG5cdCAgICBcIjYyMDEyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjAyMDBcIjogXCLlmInls6rlhbPluIJcIixcblx0ICAgIFwiNjIwMzAwXCI6IFwi6YeR5piM5biCXCIsXG5cdCAgICBcIjYyMDMwMlwiOiBcIumHkeW3neWMulwiLFxuXHQgICAgXCI2MjAzMjFcIjogXCLmsLjmmIzljr9cIixcblx0ICAgIFwiNjIwMzIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDQwMFwiOiBcIueZvemTtuW4glwiLFxuXHQgICAgXCI2MjA0MDJcIjogXCLnmb3pk7bljLpcIixcblx0ICAgIFwiNjIwNDAzXCI6IFwi5bmz5bed5Yy6XCIsXG5cdCAgICBcIjYyMDQyMVwiOiBcIumdlui/nOWOv1wiLFxuXHQgICAgXCI2MjA0MjJcIjogXCLkvJrlroHljr9cIixcblx0ICAgIFwiNjIwNDIzXCI6IFwi5pmv5rOw5Y6/XCIsXG5cdCAgICBcIjYyMDQyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA1MDBcIjogXCLlpKnmsLTluIJcIixcblx0ICAgIFwiNjIwNTAyXCI6IFwi56em5bee5Yy6XCIsXG5cdCAgICBcIjYyMDUwM1wiOiBcIum6puenr+WMulwiLFxuXHQgICAgXCI2MjA1MjFcIjogXCLmuIXmsLTljr9cIixcblx0ICAgIFwiNjIwNTIyXCI6IFwi56em5a6J5Y6/XCIsXG5cdCAgICBcIjYyMDUyM1wiOiBcIueUmOiwt+WOv1wiLFxuXHQgICAgXCI2MjA1MjRcIjogXCLmrablsbHljr9cIixcblx0ICAgIFwiNjIwNTI1XCI6IFwi5byg5a625bed5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDUyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA2MDBcIjogXCLmrablqIHluIJcIixcblx0ICAgIFwiNjIwNjAyXCI6IFwi5YeJ5bee5Yy6XCIsXG5cdCAgICBcIjYyMDYyMVwiOiBcIuawkeWLpOWOv1wiLFxuXHQgICAgXCI2MjA2MjJcIjogXCLlj6Tmtarljr9cIixcblx0ICAgIFwiNjIwNjIzXCI6IFwi5aSp56Wd6JeP5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDYyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA3MDBcIjogXCLlvKDmjpbluIJcIixcblx0ICAgIFwiNjIwNzAyXCI6IFwi55SY5bee5Yy6XCIsXG5cdCAgICBcIjYyMDcyMVwiOiBcIuiCg+WNl+ijleWbuuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MjA3MjJcIjogXCLmsJHkuZDljr9cIixcblx0ICAgIFwiNjIwNzIzXCI6IFwi5Li05rO95Y6/XCIsXG5cdCAgICBcIjYyMDcyNFwiOiBcIumrmOWPsOWOv1wiLFxuXHQgICAgXCI2MjA3MjVcIjogXCLlsbHkuLnljr9cIixcblx0ICAgIFwiNjIwNzI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDgwMFwiOiBcIuW5s+WHieW4glwiLFxuXHQgICAgXCI2MjA4MDJcIjogXCLltIbls5LljLpcIixcblx0ICAgIFwiNjIwODIxXCI6IFwi5rO+5bed5Y6/XCIsXG5cdCAgICBcIjYyMDgyMlwiOiBcIueBteWPsOWOv1wiLFxuXHQgICAgXCI2MjA4MjNcIjogXCLltIfkv6Hljr9cIixcblx0ICAgIFwiNjIwODI0XCI6IFwi5Y2O5Lqt5Y6/XCIsXG5cdCAgICBcIjYyMDgyNVwiOiBcIuW6hOa1quWOv1wiLFxuXHQgICAgXCI2MjA4MjZcIjogXCLpnZnlroHljr9cIixcblx0ICAgIFwiNjIwODI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDkwMFwiOiBcIumFkuazieW4glwiLFxuXHQgICAgXCI2MjA5MDJcIjogXCLogoPlt57ljLpcIixcblx0ICAgIFwiNjIwOTIxXCI6IFwi6YeR5aGU5Y6/XCIsXG5cdCAgICBcIjYyMDkyMlwiOiBcIueTnOW3nuWOv1wiLFxuXHQgICAgXCI2MjA5MjNcIjogXCLogoPljJfokpnlj6Tml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjIwOTI0XCI6IFwi6Zi/5YWL5aGe5ZOI6JCo5YWL5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDk4MVwiOiBcIueOiemXqOW4glwiLFxuXHQgICAgXCI2MjA5ODJcIjogXCLmlabnhYzluIJcIixcblx0ICAgIFwiNjIwOTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMTAwMFwiOiBcIuW6humYs+W4glwiLFxuXHQgICAgXCI2MjEwMDJcIjogXCLopb/ls7DljLpcIixcblx0ICAgIFwiNjIxMDIxXCI6IFwi5bqG5Z+O5Y6/XCIsXG5cdCAgICBcIjYyMTAyMlwiOiBcIueOr+WOv1wiLFxuXHQgICAgXCI2MjEwMjNcIjogXCLljY7msaDljr9cIixcblx0ICAgIFwiNjIxMDI0XCI6IFwi5ZCI5rC05Y6/XCIsXG5cdCAgICBcIjYyMTAyNVwiOiBcIuato+WugeWOv1wiLFxuXHQgICAgXCI2MjEwMjZcIjogXCLlroHljr9cIixcblx0ICAgIFwiNjIxMDI3XCI6IFwi6ZWH5Y6f5Y6/XCIsXG5cdCAgICBcIjYyMTAyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjExMDBcIjogXCLlrpropb/luIJcIixcblx0ICAgIFwiNjIxMTAyXCI6IFwi5a6J5a6a5Yy6XCIsXG5cdCAgICBcIjYyMTEyMVwiOiBcIumAmua4reWOv1wiLFxuXHQgICAgXCI2MjExMjJcIjogXCLpmYfopb/ljr9cIixcblx0ICAgIFwiNjIxMTIzXCI6IFwi5rit5rqQ5Y6/XCIsXG5cdCAgICBcIjYyMTEyNFwiOiBcIuS4tOa0ruWOv1wiLFxuXHQgICAgXCI2MjExMjVcIjogXCLmvLPljr9cIixcblx0ICAgIFwiNjIxMTI2XCI6IFwi5bK35Y6/XCIsXG5cdCAgICBcIjYyMTEyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjEyMDBcIjogXCLpmYfljZfluIJcIixcblx0ICAgIFwiNjIxMjAyXCI6IFwi5q2m6YO95Yy6XCIsXG5cdCAgICBcIjYyMTIyMVwiOiBcIuaIkOWOv1wiLFxuXHQgICAgXCI2MjEyMjJcIjogXCLmlofljr9cIixcblx0ICAgIFwiNjIxMjIzXCI6IFwi5a6V5piM5Y6/XCIsXG5cdCAgICBcIjYyMTIyNFwiOiBcIuW6t+WOv1wiLFxuXHQgICAgXCI2MjEyMjVcIjogXCLopb/lkozljr9cIixcblx0ICAgIFwiNjIxMjI2XCI6IFwi56S85Y6/XCIsXG5cdCAgICBcIjYyMTIyN1wiOiBcIuW+veWOv1wiLFxuXHQgICAgXCI2MjEyMjhcIjogXCLkuKTlvZPljr9cIixcblx0ICAgIFwiNjIxMjI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMjkwMFwiOiBcIuS4tOWkj+WbnuaXj+iHquayu+W3nlwiLFxuXHQgICAgXCI2MjI5MDFcIjogXCLkuLTlpI/luIJcIixcblx0ICAgIFwiNjIyOTIxXCI6IFwi5Li05aSP5Y6/XCIsXG5cdCAgICBcIjYyMjkyMlwiOiBcIuW6t+S5kOWOv1wiLFxuXHQgICAgXCI2MjI5MjNcIjogXCLmsLjpnZbljr9cIixcblx0ICAgIFwiNjIyOTI0XCI6IFwi5bm/5rKz5Y6/XCIsXG5cdCAgICBcIjYyMjkyNVwiOiBcIuWSjOaUv+WOv1wiLFxuXHQgICAgXCI2MjI5MjZcIjogXCLkuJzkuaHml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjIyOTI3XCI6IFwi56ev55+z5bGx5L+d5a6J5peP5Lic5Lmh5peP5pKS5ouJ5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMjkyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjMwMDBcIjogXCLnlJjljZfol4/ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNjIzMDAxXCI6IFwi5ZCI5L2c5biCXCIsXG5cdCAgICBcIjYyMzAyMVwiOiBcIuS4tOa9reWOv1wiLFxuXHQgICAgXCI2MjMwMjJcIjogXCLljZPlsLzljr9cIixcblx0ICAgIFwiNjIzMDIzXCI6IFwi6Iif5puy5Y6/XCIsXG5cdCAgICBcIjYyMzAyNFwiOiBcIui/remDqOWOv1wiLFxuXHQgICAgXCI2MjMwMjVcIjogXCLnjpvmm7Lljr9cIixcblx0ICAgIFwiNjIzMDI2XCI6IFwi56KM5puy5Y6/XCIsXG5cdCAgICBcIjYyMzAyN1wiOiBcIuWkj+ays+WOv1wiLFxuXHQgICAgXCI2MjMwMjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMwMDAwXCI6IFwi6Z2S5rW355yBXCIsXG5cdCAgICBcIjYzMDEwMFwiOiBcIuilv+WugeW4glwiLFxuXHQgICAgXCI2MzAxMDJcIjogXCLln47kuJzljLpcIixcblx0ICAgIFwiNjMwMTAzXCI6IFwi5Z+O5Lit5Yy6XCIsXG5cdCAgICBcIjYzMDEwNFwiOiBcIuWfjuilv+WMulwiLFxuXHQgICAgXCI2MzAxMDVcIjogXCLln47ljJfljLpcIixcblx0ICAgIFwiNjMwMTIxXCI6IFwi5aSn6YCa5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMDEyMlwiOiBcIua5n+S4reWOv1wiLFxuXHQgICAgXCI2MzAxMjNcIjogXCLmuZ/mupDljr9cIixcblx0ICAgIFwiNjMwMTI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYzMjEwMFwiOiBcIua1t+S4nOW4glwiLFxuXHQgICAgXCI2MzIxMjFcIjogXCLlubPlronljr9cIixcblx0ICAgIFwiNjMyMTIyXCI6IFwi5rCR5ZKM5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMjEyM1wiOiBcIuS5kOmDveWMulwiLFxuXHQgICAgXCI2MzIxMjZcIjogXCLkupLliqnlnJ/ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjMyMTI3XCI6IFwi5YyW6ZqG5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMjEyOFwiOiBcIuW+quWMluaSkuaLieaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIxMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyMjAwXCI6IFwi5rW35YyX6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjIyMVwiOiBcIumXqOa6kOWbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIyMjJcIjogXCLnpYHov57ljr9cIixcblx0ICAgIFwiNjMyMjIzXCI6IFwi5rW35pmP5Y6/XCIsXG5cdCAgICBcIjYzMjIyNFwiOiBcIuWImuWvn+WOv1wiLFxuXHQgICAgXCI2MzIyMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyMzAwXCI6IFwi6buE5Y2X6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjMyMVwiOiBcIuWQjOS7geWOv1wiLFxuXHQgICAgXCI2MzIzMjJcIjogXCLlsJbmiY7ljr9cIixcblx0ICAgIFwiNjMyMzIzXCI6IFwi5rO95bqT5Y6/XCIsXG5cdCAgICBcIjYzMjMyNFwiOiBcIuays+WNl+iSmeWPpOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIzMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyNTAwXCI6IFwi5rW35Y2X6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjUyMVwiOiBcIuWFseWSjOWOv1wiLFxuXHQgICAgXCI2MzI1MjJcIjogXCLlkIzlvrfljr9cIixcblx0ICAgIFwiNjMyNTIzXCI6IFwi6LS15b635Y6/XCIsXG5cdCAgICBcIjYzMjUyNFwiOiBcIuWFtOa1t+WOv1wiLFxuXHQgICAgXCI2MzI1MjVcIjogXCLotLXljZfljr9cIixcblx0ICAgIFwiNjMyNTI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYzMjYwMFwiOiBcIuaenOa0m+iXj+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI2MzI2MjFcIjogXCLnjpvmsoHljr9cIixcblx0ICAgIFwiNjMyNjIyXCI6IFwi54+t546b5Y6/XCIsXG5cdCAgICBcIjYzMjYyM1wiOiBcIueUmOW+t+WOv1wiLFxuXHQgICAgXCI2MzI2MjRcIjogXCLovr7ml6Xljr9cIixcblx0ICAgIFwiNjMyNjI1XCI6IFwi5LmF5rK75Y6/XCIsXG5cdCAgICBcIjYzMjYyNlwiOiBcIueOm+WkmuWOv1wiLFxuXHQgICAgXCI2MzI2MjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyNzAwXCI6IFwi546J5qCR6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjcyMVwiOiBcIueOieagkeW4glwiLFxuXHQgICAgXCI2MzI3MjJcIjogXCLmnYLlpJrljr9cIixcblx0ICAgIFwiNjMyNzIzXCI6IFwi56ew5aSa5Y6/XCIsXG5cdCAgICBcIjYzMjcyNFwiOiBcIuayu+WkmuWOv1wiLFxuXHQgICAgXCI2MzI3MjVcIjogXCLlm4rosKbljr9cIixcblx0ICAgIFwiNjMyNzI2XCI6IFwi5puy6bq76I6x5Y6/XCIsXG5cdCAgICBcIjYzMjcyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MzI4MDBcIjogXCLmtbfopb/okpnlj6Tml4/ol4/ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNjMyODAxXCI6IFwi5qC85bCU5pyo5biCXCIsXG5cdCAgICBcIjYzMjgwMlwiOiBcIuW+t+S7pOWTiOW4glwiLFxuXHQgICAgXCI2MzI4MjFcIjogXCLkuYzlhbDljr9cIixcblx0ICAgIFwiNjMyODIyXCI6IFwi6YO95YWw5Y6/XCIsXG5cdCAgICBcIjYzMjgyM1wiOiBcIuWkqeWzu+WOv1wiLFxuXHQgICAgXCI2MzI4MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwMDAwXCI6IFwi5a6B5aSP5Zue5peP6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjY0MDEwMFwiOiBcIumTtuW3neW4glwiLFxuXHQgICAgXCI2NDAxMDRcIjogXCLlhbTluobljLpcIixcblx0ICAgIFwiNjQwMTA1XCI6IFwi6KW/5aSP5Yy6XCIsXG5cdCAgICBcIjY0MDEwNlwiOiBcIumHkeWHpOWMulwiLFxuXHQgICAgXCI2NDAxMjFcIjogXCLmsLjlroHljr9cIixcblx0ICAgIFwiNjQwMTIyXCI6IFwi6LS65YWw5Y6/XCIsXG5cdCAgICBcIjY0MDE4MVwiOiBcIueBteatpuW4glwiLFxuXHQgICAgXCI2NDAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwMjAwXCI6IFwi55+z5Zi05bGx5biCXCIsXG5cdCAgICBcIjY0MDIwMlwiOiBcIuWkp+atpuWPo+WMulwiLFxuXHQgICAgXCI2NDAyMDVcIjogXCLmg6DlhpzljLpcIixcblx0ICAgIFwiNjQwMjIxXCI6IFwi5bmz572X5Y6/XCIsXG5cdCAgICBcIjY0MDIyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NDAzMDBcIjogXCLlkLTlv6DluIJcIixcblx0ICAgIFwiNjQwMzAyXCI6IFwi5Yip6YCa5Yy6XCIsXG5cdCAgICBcIjY0MDMwM1wiOiBcIue6ouWvuuWgoeWMulwiLFxuXHQgICAgXCI2NDAzMjNcIjogXCLnm5DmsaDljr9cIixcblx0ICAgIFwiNjQwMzI0XCI6IFwi5ZCM5b+D5Y6/XCIsXG5cdCAgICBcIjY0MDM4MVwiOiBcIumdkumTnOWzoeW4glwiLFxuXHQgICAgXCI2NDAzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwNDAwXCI6IFwi5Zu65Y6f5biCXCIsXG5cdCAgICBcIjY0MDQwMlwiOiBcIuWOn+W3nuWMulwiLFxuXHQgICAgXCI2NDA0MjJcIjogXCLopb/lkInljr9cIixcblx0ICAgIFwiNjQwNDIzXCI6IFwi6ZqG5b635Y6/XCIsXG5cdCAgICBcIjY0MDQyNFwiOiBcIuazvua6kOWOv1wiLFxuXHQgICAgXCI2NDA0MjVcIjogXCLlva3pmLPljr9cIixcblx0ICAgIFwiNjQwNDI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY0MDUwMFwiOiBcIuS4reWNq+W4glwiLFxuXHQgICAgXCI2NDA1MDJcIjogXCLmspnlnaHlpLTljLpcIixcblx0ICAgIFwiNjQwNTIxXCI6IFwi5Lit5a6B5Y6/XCIsXG5cdCAgICBcIjY0MDUyMlwiOiBcIua1t+WOn+WOv1wiLFxuXHQgICAgXCI2NDA1MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUwMDAwXCI6IFwi5paw55aG57u05ZC+5bCU6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjY1MDEwMFwiOiBcIuS5jOmygeacqOm9kOW4glwiLFxuXHQgICAgXCI2NTAxMDJcIjogXCLlpKnlsbHljLpcIixcblx0ICAgIFwiNjUwMTAzXCI6IFwi5rKZ5L6d5be05YWL5Yy6XCIsXG5cdCAgICBcIjY1MDEwNFwiOiBcIuaWsOW4guWMulwiLFxuXHQgICAgXCI2NTAxMDVcIjogXCLmsLTno6jmsp/ljLpcIixcblx0ICAgIFwiNjUwMTA2XCI6IFwi5aS05bGv5rKz5Yy6XCIsXG5cdCAgICBcIjY1MDEwN1wiOiBcIui+vuWdguWfjuWMulwiLFxuXHQgICAgXCI2NTAxMDlcIjogXCLnsbPkuJzljLpcIixcblx0ICAgIFwiNjUwMTIxXCI6IFwi5LmM6bKB5pyo6b2Q5Y6/XCIsXG5cdCAgICBcIjY1MDEyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTAyMDBcIjogXCLlhYvmi4nnjpvkvp3luIJcIixcblx0ICAgIFwiNjUwMjAyXCI6IFwi54us5bGx5a2Q5Yy6XCIsXG5cdCAgICBcIjY1MDIwM1wiOiBcIuWFi+aLieeOm+S+neWMulwiLFxuXHQgICAgXCI2NTAyMDRcIjogXCLnmb3norHmu6nljLpcIixcblx0ICAgIFwiNjUwMjA1XCI6IFwi5LmM5bCU56a+5Yy6XCIsXG5cdCAgICBcIjY1MDIwNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTIxMDBcIjogXCLlkJDpsoHnlarlnLDljLpcIixcblx0ICAgIFwiNjUyMTAxXCI6IFwi5ZCQ6bKB55Wq5biCXCIsXG5cdCAgICBcIjY1MjEyMlwiOiBcIumEr+WWhOWOv1wiLFxuXHQgICAgXCI2NTIxMjNcIjogXCLmiZjlhYvpgIrljr9cIixcblx0ICAgIFwiNjUyMTI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MjIwMFwiOiBcIuWTiOWvhuWcsOWMulwiLFxuXHQgICAgXCI2NTIyMDFcIjogXCLlk4jlr4bluIJcIixcblx0ICAgIFwiNjUyMjIyXCI6IFwi5be06YeM5Z2k5ZOI6JCo5YWL6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjY1MjIyM1wiOiBcIuS8iuWQvuWOv1wiLFxuXHQgICAgXCI2NTIyMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyMzAwXCI6IFwi5piM5ZCJ5Zue5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjMwMVwiOiBcIuaYjOWQieW4glwiLFxuXHQgICAgXCI2NTIzMDJcIjogXCLpmJzlurfluIJcIixcblx0ICAgIFwiNjUyMzIzXCI6IFwi5ZG85Zu+5aOB5Y6/XCIsXG5cdCAgICBcIjY1MjMyNFwiOiBcIueOm+e6s+aWr+WOv1wiLFxuXHQgICAgXCI2NTIzMjVcIjogXCLlpYflj7Dljr9cIixcblx0ICAgIFwiNjUyMzI3XCI6IFwi5ZCJ5pyo6JCo5bCU5Y6/XCIsXG5cdCAgICBcIjY1MjMyOFwiOiBcIuacqOWekuWTiOiQqOWFi+iHquayu+WOv1wiLFxuXHQgICAgXCI2NTIzMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyNzAwXCI6IFwi5Y2a5bCU5aGU5ouJ6JKZ5Y+k6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjcwMVwiOiBcIuWNmuS5kOW4glwiLFxuXHQgICAgXCI2NTI3MDJcIjogXCLpmL/mi4nlsbHlj6PluIJcIixcblx0ICAgIFwiNjUyNzIyXCI6IFwi57K+5rKz5Y6/XCIsXG5cdCAgICBcIjY1MjcyM1wiOiBcIua4qeazieWOv1wiLFxuXHQgICAgXCI2NTI3MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyODAwXCI6IFwi5be06Z+z6YOt5qWe6JKZ5Y+k6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjgwMVwiOiBcIuW6k+WwlOWLkuW4glwiLFxuXHQgICAgXCI2NTI4MjJcIjogXCLova7lj7Dljr9cIixcblx0ICAgIFwiNjUyODIzXCI6IFwi5bCJ54qB5Y6/XCIsXG5cdCAgICBcIjY1MjgyNFwiOiBcIuiLpee+jOWOv1wiLFxuXHQgICAgXCI2NTI4MjVcIjogXCLkuJTmnKvljr9cIixcblx0ICAgIFwiNjUyODI2XCI6IFwi54SJ6ICG5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjY1MjgyN1wiOiBcIuWSjOmdmeWOv1wiLFxuXHQgICAgXCI2NTI4MjhcIjogXCLlkoznoZXljr9cIixcblx0ICAgIFwiNjUyODI5XCI6IFwi5Y2a5rmW5Y6/XCIsXG5cdCAgICBcIjY1MjgzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTI5MDBcIjogXCLpmL/lhYvoi4/lnLDljLpcIixcblx0ICAgIFwiNjUyOTAxXCI6IFwi6Zi/5YWL6IuP5biCXCIsXG5cdCAgICBcIjY1MjkyMlwiOiBcIua4qeWuv+WOv1wiLFxuXHQgICAgXCI2NTI5MjNcIjogXCLlupPovabljr9cIixcblx0ICAgIFwiNjUyOTI0XCI6IFwi5rKZ6ZuF5Y6/XCIsXG5cdCAgICBcIjY1MjkyNVwiOiBcIuaWsOWSjOWOv1wiLFxuXHQgICAgXCI2NTI5MjZcIjogXCLmi5zln47ljr9cIixcblx0ICAgIFwiNjUyOTI3XCI6IFwi5LmM5LuA5Y6/XCIsXG5cdCAgICBcIjY1MjkyOFwiOiBcIumYv+eTpuaPkOWOv1wiLFxuXHQgICAgXCI2NTI5MjlcIjogXCLmn6/lnarljr9cIixcblx0ICAgIFwiNjUyOTMwXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MzAwMFwiOiBcIuWFi+WtnOWLkuiLj+afr+WwlOWFi+WtnOiHquayu+W3nlwiLFxuXHQgICAgXCI2NTMwMDFcIjogXCLpmL/lm77ku4DluIJcIixcblx0ICAgIFwiNjUzMDIyXCI6IFwi6Zi/5YWL6Zm25Y6/XCIsXG5cdCAgICBcIjY1MzAyM1wiOiBcIumYv+WQiOWlh+WOv1wiLFxuXHQgICAgXCI2NTMwMjRcIjogXCLkuYzmgbDljr9cIixcblx0ICAgIFwiNjUzMDI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MzEwMFwiOiBcIuWWgOS7gOWcsOWMulwiLFxuXHQgICAgXCI2NTMxMDFcIjogXCLlloDku4DluIJcIixcblx0ICAgIFwiNjUzMTIxXCI6IFwi55aP6ZmE5Y6/XCIsXG5cdCAgICBcIjY1MzEyMlwiOiBcIueWj+WLkuWOv1wiLFxuXHQgICAgXCI2NTMxMjNcIjogXCLoi7HlkInmspnljr9cIixcblx0ICAgIFwiNjUzMTI0XCI6IFwi5rO95pmu5Y6/XCIsXG5cdCAgICBcIjY1MzEyNVwiOiBcIuiOjui9puWOv1wiLFxuXHQgICAgXCI2NTMxMjZcIjogXCLlj7bln47ljr9cIixcblx0ICAgIFwiNjUzMTI3XCI6IFwi6bqm55uW5o+Q5Y6/XCIsXG5cdCAgICBcIjY1MzEyOFwiOiBcIuWys+aZrua5luWOv1wiLFxuXHQgICAgXCI2NTMxMjlcIjogXCLkvL3luIjljr9cIixcblx0ICAgIFwiNjUzMTMwXCI6IFwi5be05qWa5Y6/XCIsXG5cdCAgICBcIjY1MzEzMVwiOiBcIuWhlOS7gOW6k+WwlOW5suWhlOWQieWFi+iHquayu+WOv1wiLFxuXHQgICAgXCI2NTMxMzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUzMjAwXCI6IFwi5ZKM55Sw5Zyw5Yy6XCIsXG5cdCAgICBcIjY1MzIwMVwiOiBcIuWSjOeUsOW4glwiLFxuXHQgICAgXCI2NTMyMjFcIjogXCLlkoznlLDljr9cIixcblx0ICAgIFwiNjUzMjIyXCI6IFwi5aKo546J5Y6/XCIsXG5cdCAgICBcIjY1MzIyM1wiOiBcIuearuWxseWOv1wiLFxuXHQgICAgXCI2NTMyMjRcIjogXCLmtJvmtabljr9cIixcblx0ICAgIFwiNjUzMjI1XCI6IFwi562W5YuS5Y6/XCIsXG5cdCAgICBcIjY1MzIyNlwiOiBcIuS6jueUsOWOv1wiLFxuXHQgICAgXCI2NTMyMjdcIjogXCLmsJHkuLDljr9cIixcblx0ICAgIFwiNjUzMjI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDAwMFwiOiBcIuS8iueKgeWTiOiQqOWFi+iHquayu+W3nlwiLFxuXHQgICAgXCI2NTQwMDJcIjogXCLkvIrlroHluIJcIixcblx0ICAgIFwiNjU0MDAzXCI6IFwi5aWO5bGv5biCXCIsXG5cdCAgICBcIjY1NDAyMVwiOiBcIuS8iuWugeWOv1wiLFxuXHQgICAgXCI2NTQwMjJcIjogXCLlr5/luIPmn6XlsJTplKHkvK/oh6rmsrvljr9cIixcblx0ICAgIFwiNjU0MDIzXCI6IFwi6ZyN5Z+O5Y6/XCIsXG5cdCAgICBcIjY1NDAyNFwiOiBcIuW3qeeVmeWOv1wiLFxuXHQgICAgXCI2NTQwMjVcIjogXCLmlrDmupDljr9cIixcblx0ICAgIFwiNjU0MDI2XCI6IFwi5pit6IuP5Y6/XCIsXG5cdCAgICBcIjY1NDAyN1wiOiBcIueJueWFi+aWr+WOv1wiLFxuXHQgICAgXCI2NTQwMjhcIjogXCLlsLzli5LlhYvljr9cIixcblx0ICAgIFwiNjU0MDI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDIwMFwiOiBcIuWhlOWfjuWcsOWMulwiLFxuXHQgICAgXCI2NTQyMDFcIjogXCLloZTln47luIJcIixcblx0ICAgIFwiNjU0MjAyXCI6IFwi5LmM6IuP5biCXCIsXG5cdCAgICBcIjY1NDIyMVwiOiBcIumineaVj+WOv1wiLFxuXHQgICAgXCI2NTQyMjNcIjogXCLmspnmub7ljr9cIixcblx0ICAgIFwiNjU0MjI0XCI6IFwi5omY6YeM5Y6/XCIsXG5cdCAgICBcIjY1NDIyNVwiOiBcIuijleawkeWOv1wiLFxuXHQgICAgXCI2NTQyMjZcIjogXCLlkozluIPlhYvotZvlsJTokpnlj6Toh6rmsrvljr9cIixcblx0ICAgIFwiNjU0MjI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDMwMFwiOiBcIumYv+WLkuazsOWcsOWMulwiLFxuXHQgICAgXCI2NTQzMDFcIjogXCLpmL/li5Lms7DluIJcIixcblx0ICAgIFwiNjU0MzIxXCI6IFwi5biD5bCU5rSl5Y6/XCIsXG5cdCAgICBcIjY1NDMyMlwiOiBcIuWvjOiVtOWOv1wiLFxuXHQgICAgXCI2NTQzMjNcIjogXCLnpo/mtbfljr9cIixcblx0ICAgIFwiNjU0MzI0XCI6IFwi5ZOI5be05rKz5Y6/XCIsXG5cdCAgICBcIjY1NDMyNVwiOiBcIumdkuays+WOv1wiLFxuXHQgICAgXCI2NTQzMjZcIjogXCLlkInmnKjkuYPljr9cIixcblx0ICAgIFwiNjU0MzI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1OTAwMVwiOiBcIuefs+ays+WtkOW4glwiLFxuXHQgICAgXCI2NTkwMDJcIjogXCLpmL/mi4nlsJTluIJcIixcblx0ICAgIFwiNjU5MDAzXCI6IFwi5Zu+5pyo6IiS5YWL5biCXCIsXG5cdCAgICBcIjY1OTAwNFwiOiBcIuS6lOWutua4oOW4glwiLFxuXHQgICAgXCI3MTAwMDBcIjogXCLlj7Dmub5cIixcblx0ICAgIFwiNzEwMTAwXCI6IFwi5Y+w5YyX5biCXCIsXG5cdCAgICBcIjcxMDEwMVwiOiBcIuS4reato+WMulwiLFxuXHQgICAgXCI3MTAxMDJcIjogXCLlpKflkIzljLpcIixcblx0ICAgIFwiNzEwMTAzXCI6IFwi5Lit5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDEwNFwiOiBcIuadvuWxseWMulwiLFxuXHQgICAgXCI3MTAxMDVcIjogXCLlpKflronljLpcIixcblx0ICAgIFwiNzEwMTA2XCI6IFwi5LiH5Y2O5Yy6XCIsXG5cdCAgICBcIjcxMDEwN1wiOiBcIuS/oeS5ieWMulwiLFxuXHQgICAgXCI3MTAxMDhcIjogXCLlo6vmnpfljLpcIixcblx0ICAgIFwiNzEwMTA5XCI6IFwi5YyX5oqV5Yy6XCIsXG5cdCAgICBcIjcxMDExMFwiOiBcIuWGhea5luWMulwiLFxuXHQgICAgXCI3MTAxMTFcIjogXCLljZfmuK/ljLpcIixcblx0ICAgIFwiNzEwMTEyXCI6IFwi5paH5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDExM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTAyMDBcIjogXCLpq5jpm4TluIJcIixcblx0ICAgIFwiNzEwMjAxXCI6IFwi5paw5YW05Yy6XCIsXG5cdCAgICBcIjcxMDIwMlwiOiBcIuWJjemHkeWMulwiLFxuXHQgICAgXCI3MTAyMDNcIjogXCLoiqnpm4XljLpcIixcblx0ICAgIFwiNzEwMjA0XCI6IFwi55uQ5Z+V5Yy6XCIsXG5cdCAgICBcIjcxMDIwNVwiOiBcIum8k+WxseWMulwiLFxuXHQgICAgXCI3MTAyMDZcIjogXCLml5fmtKXljLpcIixcblx0ICAgIFwiNzEwMjA3XCI6IFwi5YmN6ZWH5Yy6XCIsXG5cdCAgICBcIjcxMDIwOFwiOiBcIuS4ieawkeWMulwiLFxuXHQgICAgXCI3MTAyMDlcIjogXCLlt6bokKXljLpcIixcblx0ICAgIFwiNzEwMjEwXCI6IFwi5qWg5qKT5Yy6XCIsXG5cdCAgICBcIjcxMDIxMVwiOiBcIuWwj+a4r+WMulwiLFxuXHQgICAgXCI3MTAyMTJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNzEwMjQxXCI6IFwi6IuT6ZuF5Yy6XCIsXG5cdCAgICBcIjcxMDI0MlwiOiBcIuS7geatpuWMulwiLFxuXHQgICAgXCI3MTAyNDNcIjogXCLlpKfnpL7ljLpcIixcblx0ICAgIFwiNzEwMjQ0XCI6IFwi5YaI5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDI0NVwiOiBcIui3r+erueWMulwiLFxuXHQgICAgXCI3MTAyNDZcIjogXCLpmL/ojrLljLpcIixcblx0ICAgIFwiNzEwMjQ3XCI6IFwi55Sw5a+u5Yy6XCIsXG5cdCAgICBcIjcxMDI0OFwiOiBcIueHleW3ouWMulwiLFxuXHQgICAgXCI3MTAyNDlcIjogXCLmoaXlpLTljLpcIixcblx0ICAgIFwiNzEwMjUwXCI6IFwi5qKT5a6Y5Yy6XCIsXG5cdCAgICBcIjcxMDI1MVwiOiBcIuW8pemZgOWMulwiLFxuXHQgICAgXCI3MTAyNTJcIjogXCLmsLjlronljLpcIixcblx0ICAgIFwiNzEwMjUzXCI6IFwi5rmW5YaF5Yy6XCIsXG5cdCAgICBcIjcxMDI1NFwiOiBcIuWHpOWxseWMulwiLFxuXHQgICAgXCI3MTAyNTVcIjogXCLlpKflr67ljLpcIixcblx0ICAgIFwiNzEwMjU2XCI6IFwi5p6X5Zut5Yy6XCIsXG5cdCAgICBcIjcxMDI1N1wiOiBcIum4n+advuWMulwiLFxuXHQgICAgXCI3MTAyNThcIjogXCLlpKfmoJHljLpcIixcblx0ICAgIFwiNzEwMjU5XCI6IFwi5peX5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDI2MFwiOiBcIue+jua1k+WMulwiLFxuXHQgICAgXCI3MTAyNjFcIjogXCLlha3pvp/ljLpcIixcblx0ICAgIFwiNzEwMjYyXCI6IFwi5YaF6Zeo5Yy6XCIsXG5cdCAgICBcIjcxMDI2M1wiOiBcIuadieael+WMulwiLFxuXHQgICAgXCI3MTAyNjRcIjogXCLnlLLku5nljLpcIixcblx0ICAgIFwiNzEwMjY1XCI6IFwi5qGD5rqQ5Yy6XCIsXG5cdCAgICBcIjcxMDI2NlwiOiBcIumCo+eOm+Wkj+WMulwiLFxuXHQgICAgXCI3MTAyNjdcIjogXCLojILmnpfljLpcIixcblx0ICAgIFwiNzEwMjY4XCI6IFwi6IyE6JCj5Yy6XCIsXG5cdCAgICBcIjcxMDMwMFwiOiBcIuWPsOWNl+W4glwiLFxuXHQgICAgXCI3MTAzMDFcIjogXCLkuK3opb/ljLpcIixcblx0ICAgIFwiNzEwMzAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDMwM1wiOiBcIuWNl+WMulwiLFxuXHQgICAgXCI3MTAzMDRcIjogXCLljJfljLpcIixcblx0ICAgIFwiNzEwMzA1XCI6IFwi5a6J5bmz5Yy6XCIsXG5cdCAgICBcIjcxMDMwNlwiOiBcIuWuieWNl+WMulwiLFxuXHQgICAgXCI3MTAzMDdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNzEwMzM5XCI6IFwi5rC45bq35Yy6XCIsXG5cdCAgICBcIjcxMDM0MFwiOiBcIuW9kuS7geWMulwiLFxuXHQgICAgXCI3MTAzNDFcIjogXCLmlrDljJbljLpcIixcblx0ICAgIFwiNzEwMzQyXCI6IFwi5bem6ZWH5Yy6XCIsXG5cdCAgICBcIjcxMDM0M1wiOiBcIueOieS6leWMulwiLFxuXHQgICAgXCI3MTAzNDRcIjogXCLmpaDopb/ljLpcIixcblx0ICAgIFwiNzEwMzQ1XCI6IFwi5Y2X5YyW5Yy6XCIsXG5cdCAgICBcIjcxMDM0NlwiOiBcIuS7geW+t+WMulwiLFxuXHQgICAgXCI3MTAzNDdcIjogXCLlhbPlupnljLpcIixcblx0ICAgIFwiNzEwMzQ4XCI6IFwi6b6Z5bSO5Yy6XCIsXG5cdCAgICBcIjcxMDM0OVwiOiBcIuWumOeUsOWMulwiLFxuXHQgICAgXCI3MTAzNTBcIjogXCLpurvosYbljLpcIixcblx0ICAgIFwiNzEwMzUxXCI6IFwi5L2z6YeM5Yy6XCIsXG5cdCAgICBcIjcxMDM1MlwiOiBcIuilv+a4r+WMulwiLFxuXHQgICAgXCI3MTAzNTNcIjogXCLkuIPogqHljLpcIixcblx0ICAgIFwiNzEwMzU0XCI6IFwi5bCG5Yab5Yy6XCIsXG5cdCAgICBcIjcxMDM1NVwiOiBcIuWtpueUsuWMulwiLFxuXHQgICAgXCI3MTAzNTZcIjogXCLljJfpl6jljLpcIixcblx0ICAgIFwiNzEwMzU3XCI6IFwi5paw6JCl5Yy6XCIsXG5cdCAgICBcIjcxMDM1OFwiOiBcIuWQjuWjgeWMulwiLFxuXHQgICAgXCI3MTAzNTlcIjogXCLnmb3msrPljLpcIixcblx0ICAgIFwiNzEwMzYwXCI6IFwi5Lic5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDM2MVwiOiBcIuWFreeUsuWMulwiLFxuXHQgICAgXCI3MTAzNjJcIjogXCLkuIvokKXljLpcIixcblx0ICAgIFwiNzEwMzYzXCI6IFwi5p+z6JCl5Yy6XCIsXG5cdCAgICBcIjcxMDM2NFwiOiBcIuebkOawtOWMulwiLFxuXHQgICAgXCI3MTAzNjVcIjogXCLlloTljJbljLpcIixcblx0ICAgIFwiNzEwMzY2XCI6IFwi5aSn5YaF5Yy6XCIsXG5cdCAgICBcIjcxMDM2N1wiOiBcIuWxseS4iuWMulwiLFxuXHQgICAgXCI3MTAzNjhcIjogXCLmlrDluILljLpcIixcblx0ICAgIFwiNzEwMzY5XCI6IFwi5a6J5a6a5Yy6XCIsXG5cdCAgICBcIjcxMDQwMFwiOiBcIuWPsOS4reW4glwiLFxuXHQgICAgXCI3MTA0MDFcIjogXCLkuK3ljLpcIixcblx0ICAgIFwiNzEwNDAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDQwM1wiOiBcIuWNl+WMulwiLFxuXHQgICAgXCI3MTA0MDRcIjogXCLopb/ljLpcIixcblx0ICAgIFwiNzEwNDA1XCI6IFwi5YyX5Yy6XCIsXG5cdCAgICBcIjcxMDQwNlwiOiBcIuWMl+Wxr+WMulwiLFxuXHQgICAgXCI3MTA0MDdcIjogXCLopb/lsa/ljLpcIixcblx0ICAgIFwiNzEwNDA4XCI6IFwi5Y2X5bGv5Yy6XCIsXG5cdCAgICBcIjcxMDQwOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTA0MzFcIjogXCLlpKrlubPljLpcIixcblx0ICAgIFwiNzEwNDMyXCI6IFwi5aSn6YeM5Yy6XCIsXG5cdCAgICBcIjcxMDQzM1wiOiBcIumbvuWzsOWMulwiLFxuXHQgICAgXCI3MTA0MzRcIjogXCLkuYzml6XljLpcIixcblx0ICAgIFwiNzEwNDM1XCI6IFwi5Liw5Y6f5Yy6XCIsXG5cdCAgICBcIjcxMDQzNlwiOiBcIuWQjumHjOWMulwiLFxuXHQgICAgXCI3MTA0MzdcIjogXCLnn7PlhojljLpcIixcblx0ICAgIFwiNzEwNDM4XCI6IFwi5Lic5Yq/5Yy6XCIsXG5cdCAgICBcIjcxMDQzOVwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCI3MTA0NDBcIjogXCLmlrDnpL7ljLpcIixcblx0ICAgIFwiNzEwNDQxXCI6IFwi5r2t5a2Q5Yy6XCIsXG5cdCAgICBcIjcxMDQ0MlwiOiBcIuWkp+mbheWMulwiLFxuXHQgICAgXCI3MTA0NDNcIjogXCLnpZ7lhojljLpcIixcblx0ICAgIFwiNzEwNDQ0XCI6IFwi5aSn6IKa5Yy6XCIsXG5cdCAgICBcIjcxMDQ0NVwiOiBcIuaymem5v+WMulwiLFxuXHQgICAgXCI3MTA0NDZcIjogXCLpvpnkupXljLpcIixcblx0ICAgIFwiNzEwNDQ3XCI6IFwi5qKn5qCW5Yy6XCIsXG5cdCAgICBcIjcxMDQ0OFwiOiBcIua4heawtOWMulwiLFxuXHQgICAgXCI3MTA0NDlcIjogXCLlpKfnlLLljLpcIixcblx0ICAgIFwiNzEwNDUwXCI6IFwi5aSW5Z+U5Yy6XCIsXG5cdCAgICBcIjcxMDQ1MVwiOiBcIuWkp+WuieWMulwiLFxuXHQgICAgXCI3MTA1MDBcIjogXCLph5Hpl6jljr9cIixcblx0ICAgIFwiNzEwNTA3XCI6IFwi6YeR5rKZ6ZWHXCIsXG5cdCAgICBcIjcxMDUwOFwiOiBcIumHkea5lumVh1wiLFxuXHQgICAgXCI3MTA1MDlcIjogXCLph5HlroHkuaFcIixcblx0ICAgIFwiNzEwNTEwXCI6IFwi6YeR5Z+O6ZWHXCIsXG5cdCAgICBcIjcxMDUxMVwiOiBcIueDiOWxv+S5oVwiLFxuXHQgICAgXCI3MTA1MTJcIjogXCLkuYzlnbXkuaFcIixcblx0ICAgIFwiNzEwNjAwXCI6IFwi5Y2X5oqV5Y6/XCIsXG5cdCAgICBcIjcxMDYxNFwiOiBcIuWNl+aKleW4glwiLFxuXHQgICAgXCI3MTA2MTVcIjogXCLkuK3lr67kuaFcIixcblx0ICAgIFwiNzEwNjE2XCI6IFwi6I2J5bGv6ZWHXCIsXG5cdCAgICBcIjcxMDYxN1wiOiBcIuWbveWnk+S5oVwiLFxuXHQgICAgXCI3MTA2MThcIjogXCLln5Tph4zplYdcIixcblx0ICAgIFwiNzEwNjE5XCI6IFwi5LuB54ix5LmhXCIsXG5cdCAgICBcIjcxMDYyMFwiOiBcIuWQjemXtOS5oVwiLFxuXHQgICAgXCI3MTA2MjFcIjogXCLpm4bpm4bplYdcIixcblx0ICAgIFwiNzEwNjIyXCI6IFwi5rC06YeM5LmhXCIsXG5cdCAgICBcIjcxMDYyM1wiOiBcIumxvOaxoOS5oVwiLFxuXHQgICAgXCI3MTA2MjRcIjogXCLkv6HkuYnkuaFcIixcblx0ICAgIFwiNzEwNjI1XCI6IFwi56u55bGx6ZWHXCIsXG5cdCAgICBcIjcxMDYyNlwiOiBcIum5v+iwt+S5oVwiLFxuXHQgICAgXCI3MTA3MDBcIjogXCLln7rpmobluIJcIixcblx0ICAgIFwiNzEwNzAxXCI6IFwi5LuB54ix5Yy6XCIsXG5cdCAgICBcIjcxMDcwMlwiOiBcIuS/oeS5ieWMulwiLFxuXHQgICAgXCI3MTA3MDNcIjogXCLkuK3mraPljLpcIixcblx0ICAgIFwiNzEwNzA0XCI6IFwi5Lit5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDcwNVwiOiBcIuWuieS5kOWMulwiLFxuXHQgICAgXCI3MTA3MDZcIjogXCLmmpbmmpbljLpcIixcblx0ICAgIFwiNzEwNzA3XCI6IFwi5LiD5aC15Yy6XCIsXG5cdCAgICBcIjcxMDcwOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTA4MDBcIjogXCLmlrDnq7nluIJcIixcblx0ICAgIFwiNzEwODAxXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDgwMlwiOiBcIuWMl+WMulwiLFxuXHQgICAgXCI3MTA4MDNcIjogXCLpppnlsbHljLpcIixcblx0ICAgIFwiNzEwODA0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjcxMDkwMFwiOiBcIuWYieS5ieW4glwiLFxuXHQgICAgXCI3MTA5MDFcIjogXCLkuJzljLpcIixcblx0ICAgIFwiNzEwOTAyXCI6IFwi6KW/5Yy6XCIsXG5cdCAgICBcIjcxMDkwM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTExMDBcIjogXCLmlrDljJfluIJcIixcblx0ICAgIFwiNzExMTMwXCI6IFwi5LiH6YeM5Yy6XCIsXG5cdCAgICBcIjcxMTEzMVwiOiBcIumHkeWxseWMulwiLFxuXHQgICAgXCI3MTExMzJcIjogXCLmnb/moaXljLpcIixcblx0ICAgIFwiNzExMTMzXCI6IFwi5rGQ5q2i5Yy6XCIsXG5cdCAgICBcIjcxMTEzNFwiOiBcIua3seWdkeWMulwiLFxuXHQgICAgXCI3MTExMzVcIjogXCLnn7PnoofljLpcIixcblx0ICAgIFwiNzExMTM2XCI6IFwi55Ge6Iqz5Yy6XCIsXG5cdCAgICBcIjcxMTEzN1wiOiBcIuW5s+a6quWMulwiLFxuXHQgICAgXCI3MTExMzhcIjogXCLlj4zmuqrljLpcIixcblx0ICAgIFwiNzExMTM5XCI6IFwi6LSh5a+u5Yy6XCIsXG5cdCAgICBcIjcxMTE0MFwiOiBcIuaWsOW6l+WMulwiLFxuXHQgICAgXCI3MTExNDFcIjogXCLlnarmnpfljLpcIixcblx0ICAgIFwiNzExMTQyXCI6IFwi5LmM5p2l5Yy6XCIsXG5cdCAgICBcIjcxMTE0M1wiOiBcIuawuOWSjOWMulwiLFxuXHQgICAgXCI3MTExNDRcIjogXCLkuK3lkozljLpcIixcblx0ICAgIFwiNzExMTQ1XCI6IFwi5Zyf5Z+O5Yy6XCIsXG5cdCAgICBcIjcxMTE0NlwiOiBcIuS4ieWzoeWMulwiLFxuXHQgICAgXCI3MTExNDdcIjogXCLmoJHmnpfljLpcIixcblx0ICAgIFwiNzExMTQ4XCI6IFwi6I665q2M5Yy6XCIsXG5cdCAgICBcIjcxMTE0OVwiOiBcIuS4iemHjeWMulwiLFxuXHQgICAgXCI3MTExNTBcIjogXCLmlrDluoTljLpcIixcblx0ICAgIFwiNzExMTUxXCI6IFwi5rOw5bGx5Yy6XCIsXG5cdCAgICBcIjcxMTE1MlwiOiBcIuael+WPo+WMulwiLFxuXHQgICAgXCI3MTExNTNcIjogXCLoiqbmtLLljLpcIixcblx0ICAgIFwiNzExMTU0XCI6IFwi5LqU6IKh5Yy6XCIsXG5cdCAgICBcIjcxMTE1NVwiOiBcIuWFq+mHjOWMulwiLFxuXHQgICAgXCI3MTExNTZcIjogXCLmt6HmsLTljLpcIixcblx0ICAgIFwiNzExMTU3XCI6IFwi5LiJ6Iqd5Yy6XCIsXG5cdCAgICBcIjcxMTE1OFwiOiBcIuefs+mXqOWMulwiLFxuXHQgICAgXCI3MTEyMDBcIjogXCLlrpzlhbDljr9cIixcblx0ICAgIFwiNzExMjE0XCI6IFwi5a6c5YWw5biCXCIsXG5cdCAgICBcIjcxMTIxNVwiOiBcIuWktOWfjumVh1wiLFxuXHQgICAgXCI3MTEyMTZcIjogXCLnpIHmuqrkuaFcIixcblx0ICAgIFwiNzExMjE3XCI6IFwi5aOu5Zu05LmhXCIsXG5cdCAgICBcIjcxMTIxOFwiOiBcIuWRmOWxseS5oVwiLFxuXHQgICAgXCI3MTEyMTlcIjogXCLnvZfkuJzplYdcIixcblx0ICAgIFwiNzExMjIwXCI6IFwi5LiJ5pif5LmhXCIsXG5cdCAgICBcIjcxMTIyMVwiOiBcIuWkp+WQjOS5oVwiLFxuXHQgICAgXCI3MTEyMjJcIjogXCLkupTnu5PkuaFcIixcblx0ICAgIFwiNzExMjIzXCI6IFwi5Yas5bGx5LmhXCIsXG5cdCAgICBcIjcxMTIyNFwiOiBcIuiLj+a+s+mVh1wiLFxuXHQgICAgXCI3MTEyMjVcIjogXCLljZfmvrPkuaFcIixcblx0ICAgIFwiNzExMjI2XCI6IFwi6ZKT6bG85Y+wXCIsXG5cdCAgICBcIjcxMTMwMFwiOiBcIuaWsOerueWOv1wiLFxuXHQgICAgXCI3MTEzMTRcIjogXCLnq7nljJfluIJcIixcblx0ICAgIFwiNzExMzE1XCI6IFwi5rmW5Y+j5LmhXCIsXG5cdCAgICBcIjcxMTMxNlwiOiBcIuaWsOS4sOS5oVwiLFxuXHQgICAgXCI3MTEzMTdcIjogXCLmlrDln5TplYdcIixcblx0ICAgIFwiNzExMzE4XCI6IFwi5YWz6KW/6ZWHXCIsXG5cdCAgICBcIjcxMTMxOVwiOiBcIuiKjuael+S5oVwiLFxuXHQgICAgXCI3MTEzMjBcIjogXCLlrp3lsbHkuaFcIixcblx0ICAgIFwiNzExMzIxXCI6IFwi56u55Lic6ZWHXCIsXG5cdCAgICBcIjcxMTMyMlwiOiBcIuS6lOWzsOS5oVwiLFxuXHQgICAgXCI3MTEzMjNcIjogXCLmqKrlsbHkuaFcIixcblx0ICAgIFwiNzExMzI0XCI6IFwi5bCW55+z5LmhXCIsXG5cdCAgICBcIjcxMTMyNVwiOiBcIuWMl+WflOS5oVwiLFxuXHQgICAgXCI3MTEzMjZcIjogXCLls6jnnInkuaFcIixcblx0ICAgIFwiNzExNDAwXCI6IFwi5qGD5Zut5Y6/XCIsXG5cdCAgICBcIjcxMTQxNFwiOiBcIuS4reWdnOW4glwiLFxuXHQgICAgXCI3MTE0MTVcIjogXCLlubPplYfluIJcIixcblx0ICAgIFwiNzExNDE2XCI6IFwi6b6Z5r2t5LmhXCIsXG5cdCAgICBcIjcxMTQxN1wiOiBcIuadqOaiheW4glwiLFxuXHQgICAgXCI3MTE0MThcIjogXCLmlrDlsYvkuaFcIixcblx0ICAgIFwiNzExNDE5XCI6IFwi6KeC6Z+z5LmhXCIsXG5cdCAgICBcIjcxMTQyMFwiOiBcIuahg+WbreW4glwiLFxuXHQgICAgXCI3MTE0MjFcIjogXCLpvp/lsbHkuaFcIixcblx0ICAgIFwiNzExNDIyXCI6IFwi5YWr5b635biCXCIsXG5cdCAgICBcIjcxMTQyM1wiOiBcIuWkp+a6qumVh1wiLFxuXHQgICAgXCI3MTE0MjRcIjogXCLlpI3lhbTkuaFcIixcblx0ICAgIFwiNzExNDI1XCI6IFwi5aSn5Zut5LmhXCIsXG5cdCAgICBcIjcxMTQyNlwiOiBcIuiKpuerueS5oVwiLFxuXHQgICAgXCI3MTE1MDBcIjogXCLoi5fmoJfljr9cIixcblx0ICAgIFwiNzExNTE5XCI6IFwi56u55Y2X6ZWHXCIsXG5cdCAgICBcIjcxMTUyMFwiOiBcIuWktOS7vemVh1wiLFxuXHQgICAgXCI3MTE1MjFcIjogXCLkuInmub7kuaFcIixcblx0ICAgIFwiNzExNTIyXCI6IFwi5Y2X5bqE5LmhXCIsXG5cdCAgICBcIjcxMTUyM1wiOiBcIueLrua9reS5oVwiLFxuXHQgICAgXCI3MTE1MjRcIjogXCLlkI7pvpnplYdcIixcblx0ICAgIFwiNzExNTI1XCI6IFwi6YCa6ZyE6ZWHXCIsXG5cdCAgICBcIjcxMTUyNlwiOiBcIuiLkemHjOmVh1wiLFxuXHQgICAgXCI3MTE1MjdcIjogXCLoi5fmoJfluIJcIixcblx0ICAgIFwiNzExNTI4XCI6IFwi6YCg5qGl5LmhXCIsXG5cdCAgICBcIjcxMTUyOVwiOiBcIuWktOWxi+S5oVwiLFxuXHQgICAgXCI3MTE1MzBcIjogXCLlhazppobkuaFcIixcblx0ICAgIFwiNzExNTMxXCI6IFwi5aSn5rmW5LmhXCIsXG5cdCAgICBcIjcxMTUzMlwiOiBcIuazsOWuieS5oVwiLFxuXHQgICAgXCI3MTE1MzNcIjogXCLpk5zplKPkuaFcIixcblx0ICAgIFwiNzExNTM0XCI6IFwi5LiJ5LmJ5LmhXCIsXG5cdCAgICBcIjcxMTUzNVwiOiBcIuilv+a5luS5oVwiLFxuXHQgICAgXCI3MTE1MzZcIjogXCLljZPlhbDplYdcIixcblx0ICAgIFwiNzExNzAwXCI6IFwi5b2w5YyW5Y6/XCIsXG5cdCAgICBcIjcxMTcyN1wiOiBcIuW9sOWMluW4glwiLFxuXHQgICAgXCI3MTE3MjhcIjogXCLoiqzlm63kuaFcIixcblx0ICAgIFwiNzExNzI5XCI6IFwi6Iqx5Z2b5LmhXCIsXG5cdCAgICBcIjcxMTczMFwiOiBcIuengOawtOS5oVwiLFxuXHQgICAgXCI3MTE3MzFcIjogXCLpub/muK/plYdcIixcblx0ICAgIFwiNzExNzMyXCI6IFwi56aP5YW05LmhXCIsXG5cdCAgICBcIjcxMTczM1wiOiBcIue6v+ilv+S5oVwiLFxuXHQgICAgXCI3MTE3MzRcIjogXCLlkoznvo7plYdcIixcblx0ICAgIFwiNzExNzM1XCI6IFwi5Ly45riv5LmhXCIsXG5cdCAgICBcIjcxMTczNlwiOiBcIuWRmOael+mVh1wiLFxuXHQgICAgXCI3MTE3MzdcIjogXCLnpL7lpLTkuaFcIixcblx0ICAgIFwiNzExNzM4XCI6IFwi5rC46Z2W5LmhXCIsXG5cdCAgICBcIjcxMTczOVwiOiBcIuWflOW/g+S5oVwiLFxuXHQgICAgXCI3MTE3NDBcIjogXCLmuqrmuZbplYdcIixcblx0ICAgIFwiNzExNzQxXCI6IFwi5aSn5p2R5LmhXCIsXG5cdCAgICBcIjcxMTc0MlwiOiBcIuWflOebkOS5oVwiLFxuXHQgICAgXCI3MTE3NDNcIjogXCLnlLDkuK3plYdcIixcblx0ICAgIFwiNzExNzQ0XCI6IFwi5YyX5paX6ZWHXCIsXG5cdCAgICBcIjcxMTc0NVwiOiBcIueUsOWwvuS5oVwiLFxuXHQgICAgXCI3MTE3NDZcIjogXCLln6TlpLTkuaFcIixcblx0ICAgIFwiNzExNzQ3XCI6IFwi5rqq5bee5LmhXCIsXG5cdCAgICBcIjcxMTc0OFwiOiBcIuerueWhmOS5oVwiLFxuXHQgICAgXCI3MTE3NDlcIjogXCLkuozmnpfplYdcIixcblx0ICAgIFwiNzExNzUwXCI6IFwi5aSn5Z+O5LmhXCIsXG5cdCAgICBcIjcxMTc1MVwiOiBcIuiKs+iLkeS5oVwiLFxuXHQgICAgXCI3MTE3NTJcIjogXCLkuozmsLTkuaFcIixcblx0ICAgIFwiNzExOTAwXCI6IFwi5ZiJ5LmJ5Y6/XCIsXG5cdCAgICBcIjcxMTkxOVwiOiBcIueVqui3r+S5oVwiLFxuXHQgICAgXCI3MTE5MjBcIjogXCLmooXlsbHkuaFcIixcblx0ICAgIFwiNzExOTIxXCI6IFwi56u55bSO5LmhXCIsXG5cdCAgICBcIjcxMTkyMlwiOiBcIumYv+mHjOWxseS5oVwiLFxuXHQgICAgXCI3MTE5MjNcIjogXCLkuK3ln5TkuaFcIixcblx0ICAgIFwiNzExOTI0XCI6IFwi5aSn5Z+U5LmhXCIsXG5cdCAgICBcIjcxMTkyNVwiOiBcIuawtOS4iuS5oVwiLFxuXHQgICAgXCI3MTE5MjZcIjogXCLpub/ojYnkuaFcIixcblx0ICAgIFwiNzExOTI3XCI6IFwi5aSq5L+d5biCXCIsXG5cdCAgICBcIjcxMTkyOFwiOiBcIuactOWtkOW4glwiLFxuXHQgICAgXCI3MTE5MjlcIjogXCLkuJznn7PkuaFcIixcblx0ICAgIFwiNzExOTMwXCI6IFwi5YWt6ISa5LmhXCIsXG5cdCAgICBcIjcxMTkzMVwiOiBcIuaWsOa4r+S5oVwiLFxuXHQgICAgXCI3MTE5MzJcIjogXCLmsJHpm4TkuaFcIixcblx0ICAgIFwiNzExOTMzXCI6IFwi5aSn5p6X6ZWHXCIsXG5cdCAgICBcIjcxMTkzNFwiOiBcIua6quWPo+S5oVwiLFxuXHQgICAgXCI3MTE5MzVcIjogXCLkuYnnq7nkuaFcIixcblx0ICAgIFwiNzExOTM2XCI6IFwi5biD6KKL6ZWHXCIsXG5cdCAgICBcIjcxMjEwMFwiOiBcIuS6keael+WOv1wiLFxuXHQgICAgXCI3MTIxMjFcIjogXCLmlpfljZfplYdcIixcblx0ICAgIFwiNzEyMTIyXCI6IFwi5aSn5Z+k5LmhXCIsXG5cdCAgICBcIjcxMjEyM1wiOiBcIuiZjuWwvumVh1wiLFxuXHQgICAgXCI3MTIxMjRcIjogXCLlnJ/lupPplYdcIixcblx0ICAgIFwiNzEyMTI1XCI6IFwi6KSS5b+g5LmhXCIsXG5cdCAgICBcIjcxMjEyNlwiOiBcIuS4nOWKv+S5oVwiLFxuXHQgICAgXCI3MTIxMjdcIjogXCLlj7Dopb/kuaFcIixcblx0ICAgIFwiNzEyMTI4XCI6IFwi5LuR6IOM5LmhXCIsXG5cdCAgICBcIjcxMjEyOVwiOiBcIum6puWvruS5oVwiLFxuXHQgICAgXCI3MTIxMzBcIjogXCLmlpflha3luIJcIixcblx0ICAgIFwiNzEyMTMxXCI6IFwi5p6X5YaF5LmhXCIsXG5cdCAgICBcIjcxMjEzMlwiOiBcIuWPpOWdkeS5oVwiLFxuXHQgICAgXCI3MTIxMzNcIjogXCLojr/moZDkuaFcIixcblx0ICAgIFwiNzEyMTM0XCI6IFwi6KW/6J666ZWHXCIsXG5cdCAgICBcIjcxMjEzNVwiOiBcIuS6jOS7keS5oVwiLFxuXHQgICAgXCI3MTIxMzZcIjogXCLljJfmuK/plYdcIixcblx0ICAgIFwiNzEyMTM3XCI6IFwi5rC05p6X5LmhXCIsXG5cdCAgICBcIjcxMjEzOFwiOiBcIuWPo+a5luS5oVwiLFxuXHQgICAgXCI3MTIxMzlcIjogXCLlm5vmuZbkuaFcIixcblx0ICAgIFwiNzEyMTQwXCI6IFwi5YWD6ZW/5LmhXCIsXG5cdCAgICBcIjcxMjQwMFwiOiBcIuWxj+S4nOWOv1wiLFxuXHQgICAgXCI3MTI0MzRcIjogXCLlsY/kuJzluIJcIixcblx0ICAgIFwiNzEyNDM1XCI6IFwi5LiJ5Zyw6Zeo5LmhXCIsXG5cdCAgICBcIjcxMjQzNlwiOiBcIumbvuWPsOS5oVwiLFxuXHQgICAgXCI3MTI0MzdcIjogXCLnjpvlrrbkuaFcIixcblx0ICAgIFwiNzEyNDM4XCI6IFwi5Lmd5aaC5LmhXCIsXG5cdCAgICBcIjcxMjQzOVwiOiBcIumHjOa4r+S5oVwiLFxuXHQgICAgXCI3MTI0NDBcIjogXCLpq5jmoJHkuaFcIixcblx0ICAgIFwiNzEyNDQxXCI6IFwi55uQ5Z+U5LmhXCIsXG5cdCAgICBcIjcxMjQ0MlwiOiBcIumVv+ayu+S5oVwiLFxuXHQgICAgXCI3MTI0NDNcIjogXCLpup/mtJvkuaFcIixcblx0ICAgIFwiNzEyNDQ0XCI6IFwi56u555Sw5LmhXCIsXG5cdCAgICBcIjcxMjQ0NVwiOiBcIuWGheWflOS5oVwiLFxuXHQgICAgXCI3MTI0NDZcIjogXCLkuIfkuLnkuaFcIixcblx0ICAgIFwiNzEyNDQ3XCI6IFwi5r2u5bee6ZWHXCIsXG5cdCAgICBcIjcxMjQ0OFwiOiBcIuazsOatpuS5oVwiLFxuXHQgICAgXCI3MTI0NDlcIjogXCLmnaXkuYnkuaFcIixcblx0ICAgIFwiNzEyNDUwXCI6IFwi5LiH5bOm5LmhXCIsXG5cdCAgICBcIjcxMjQ1MVwiOiBcIuW0gemhtuS5oVwiLFxuXHQgICAgXCI3MTI0NTJcIjogXCLmlrDln6TkuaFcIixcblx0ICAgIFwiNzEyNDUzXCI6IFwi5Y2X5bee5LmhXCIsXG5cdCAgICBcIjcxMjQ1NFwiOiBcIuael+i+ueS5oVwiLFxuXHQgICAgXCI3MTI0NTVcIjogXCLkuJzmuK/plYdcIixcblx0ICAgIFwiNzEyNDU2XCI6IFwi55CJ55CD5LmhXCIsXG5cdCAgICBcIjcxMjQ1N1wiOiBcIuS9s+WGrOS5oVwiLFxuXHQgICAgXCI3MTI0NThcIjogXCLmlrDlm63kuaFcIixcblx0ICAgIFwiNzEyNDU5XCI6IFwi5p6L5a+u5LmhXCIsXG5cdCAgICBcIjcxMjQ2MFwiOiBcIuaei+WxseS5oVwiLFxuXHQgICAgXCI3MTI0NjFcIjogXCLmmKXml6XkuaFcIixcblx0ICAgIFwiNzEyNDYyXCI6IFwi54uu5a2Q5LmhXCIsXG5cdCAgICBcIjcxMjQ2M1wiOiBcIui9puWfjuS5oVwiLFxuXHQgICAgXCI3MTI0NjRcIjogXCLniaHkuLnkuaFcIixcblx0ICAgIFwiNzEyNDY1XCI6IFwi5oGS5pil6ZWHXCIsXG5cdCAgICBcIjcxMjQ2NlwiOiBcIua7oeW3nuS5oVwiLFxuXHQgICAgXCI3MTI1MDBcIjogXCLlj7DkuJzljr9cIixcblx0ICAgIFwiNzEyNTE3XCI6IFwi5Y+w5Lic5biCXCIsXG5cdCAgICBcIjcxMjUxOFwiOiBcIue7v+Wym+S5oVwiLFxuXHQgICAgXCI3MTI1MTlcIjogXCLlhbDlsb/kuaFcIixcblx0ICAgIFwiNzEyNTIwXCI6IFwi5bu25bmz5LmhXCIsXG5cdCAgICBcIjcxMjUyMVwiOiBcIuWNkeWNl+S5oVwiLFxuXHQgICAgXCI3MTI1MjJcIjogXCLpub/ph47kuaFcIixcblx0ICAgIFwiNzEyNTIzXCI6IFwi5YWz5bGx6ZWHXCIsXG5cdCAgICBcIjcxMjUyNFwiOiBcIua1t+err+S5oVwiLFxuXHQgICAgXCI3MTI1MjVcIjogXCLmsaDkuIrkuaFcIixcblx0ICAgIFwiNzEyNTI2XCI6IFwi5Lic5rKz5LmhXCIsXG5cdCAgICBcIjcxMjUyN1wiOiBcIuaIkOWKn+mVh1wiLFxuXHQgICAgXCI3MTI1MjhcIjogXCLplb/mu6jkuaFcIixcblx0ICAgIFwiNzEyNTI5XCI6IFwi6YeR5bOw5LmhXCIsXG5cdCAgICBcIjcxMjUzMFwiOiBcIuWkp+atpuS5oVwiLFxuXHQgICAgXCI3MTI1MzFcIjogXCLovr7ku4HkuaFcIixcblx0ICAgIFwiNzEyNTMyXCI6IFwi5aSq6bq76YeM5LmhXCIsXG5cdCAgICBcIjcxMjYwMFwiOiBcIuiKseiOsuWOv1wiLFxuXHQgICAgXCI3MTI2MTVcIjogXCLoirHojrLluIJcIixcblx0ICAgIFwiNzEyNjE2XCI6IFwi5paw5Z+O5LmhXCIsXG5cdCAgICBcIjcxMjYxN1wiOiBcIuWkqumygemYgVwiLFxuXHQgICAgXCI3MTI2MThcIjogXCLnp4DmnpfkuaFcIixcblx0ICAgIFwiNzEyNjE5XCI6IFwi5ZCJ5a6J5LmhXCIsXG5cdCAgICBcIjcxMjYyMFwiOiBcIuWvv+S4sOS5oVwiLFxuXHQgICAgXCI3MTI2MjFcIjogXCLlh6TmnpfplYdcIixcblx0ICAgIFwiNzEyNjIyXCI6IFwi5YWJ5aSN5LmhXCIsXG5cdCAgICBcIjcxMjYyM1wiOiBcIuS4sOa7qOS5oVwiLFxuXHQgICAgXCI3MTI2MjRcIjogXCLnkZ7nqZfkuaFcIixcblx0ICAgIFwiNzEyNjI1XCI6IFwi5LiH6I2j5LmhXCIsXG5cdCAgICBcIjcxMjYyNlwiOiBcIueOiemHjOmVh1wiLFxuXHQgICAgXCI3MTI2MjdcIjogXCLljZPmuqrkuaFcIixcblx0ICAgIFwiNzEyNjI4XCI6IFwi5a+M6YeM5LmhXCIsXG5cdCAgICBcIjcxMjcwMFwiOiBcIua+jua5luWOv1wiLFxuXHQgICAgXCI3MTI3MDdcIjogXCLpqazlhazluIJcIixcblx0ICAgIFwiNzEyNzA4XCI6IFwi6KW/5bG/5LmhXCIsXG5cdCAgICBcIjcxMjcwOVwiOiBcIuacm+WuieS5oVwiLFxuXHQgICAgXCI3MTI3MTBcIjogXCLkuIPnvo7kuaFcIixcblx0ICAgIFwiNzEyNzExXCI6IFwi55m95rKZ5LmhXCIsXG5cdCAgICBcIjcxMjcxMlwiOiBcIua5luilv+S5oVwiLFxuXHQgICAgXCI3MTI4MDBcIjogXCLov57msZ/ljr9cIixcblx0ICAgIFwiNzEyODA1XCI6IFwi5Y2X56u/5LmhXCIsXG5cdCAgICBcIjcxMjgwNlwiOiBcIuWMl+erv+S5oVwiLFxuXHQgICAgXCI3MTI4MDdcIjogXCLojpLlhYnkuaFcIixcblx0ICAgIFwiNzEyODA4XCI6IFwi5Lic5byV5LmhXCIsXG5cdCAgICBcIjgxMDAwMFwiOiBcIummmea4r+eJueWIq+ihjOaUv+WMulwiLFxuXHQgICAgXCI4MTAxMDBcIjogXCLpppnmuK/lsptcIixcblx0ICAgIFwiODEwMTAxXCI6IFwi5Lit6KW/5Yy6XCIsXG5cdCAgICBcIjgxMDEwMlwiOiBcIua5vuS7lFwiLFxuXHQgICAgXCI4MTAxMDNcIjogXCLkuJzljLpcIixcblx0ICAgIFwiODEwMTA0XCI6IFwi5Y2X5Yy6XCIsXG5cdCAgICBcIjgxMDIwMFwiOiBcIuS5nem+mVwiLFxuXHQgICAgXCI4MTAyMDFcIjogXCLkuZ3pvpnln47ljLpcIixcblx0ICAgIFwiODEwMjAyXCI6IFwi5rK55bCW5pe65Yy6XCIsXG5cdCAgICBcIjgxMDIwM1wiOiBcIua3seawtOWfl+WMulwiLFxuXHQgICAgXCI4MTAyMDRcIjogXCLpu4TlpKfku5nljLpcIixcblx0ICAgIFwiODEwMjA1XCI6IFwi6KeC5aGY5Yy6XCIsXG5cdCAgICBcIjgxMDMwMFwiOiBcIuaWsOeVjFwiLFxuXHQgICAgXCI4MTAzMDFcIjogXCLljJfljLpcIixcblx0ICAgIFwiODEwMzAyXCI6IFwi5aSn5Z+U5Yy6XCIsXG5cdCAgICBcIjgxMDMwM1wiOiBcIuaymeeUsOWMulwiLFxuXHQgICAgXCI4MTAzMDRcIjogXCLopb/otKHljLpcIixcblx0ICAgIFwiODEwMzA1XCI6IFwi5YWD5pyX5Yy6XCIsXG5cdCAgICBcIjgxMDMwNlwiOiBcIuWxr+mXqOWMulwiLFxuXHQgICAgXCI4MTAzMDdcIjogXCLojYPmub7ljLpcIixcblx0ICAgIFwiODEwMzA4XCI6IFwi6JG16Z2S5Yy6XCIsXG5cdCAgICBcIjgxMDMwOVwiOiBcIuemu+Wym+WMulwiLFxuXHQgICAgXCI4MjAwMDBcIjogXCLmvrPpl6jnibnliKvooYzmlL/ljLpcIixcblx0ICAgIFwiODIwMTAwXCI6IFwi5r6z6Zeo5Y2K5bKbXCIsXG5cdCAgICBcIjgyMDIwMFwiOiBcIuemu+Wym1wiLFxuXHQgICAgXCI5OTAwMDBcIjogXCLmtbflpJZcIixcblx0ICAgIFwiOTkwMTAwXCI6IFwi5rW35aSWXCJcblx0fVxuXG5cdC8vIGlkIHBpZC9wYXJlbnRJZCBuYW1lIGNoaWxkcmVuXG5cdGZ1bmN0aW9uIHRyZWUobGlzdCkge1xuXHQgICAgdmFyIG1hcHBlZCA9IHt9XG5cdCAgICBmb3IgKHZhciBpID0gMCwgaXRlbTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICBpdGVtID0gbGlzdFtpXVxuXHQgICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5pZCkgY29udGludWVcblx0ICAgICAgICBtYXBwZWRbaXRlbS5pZF0gPSBpdGVtXG5cdCAgICB9XG5cblx0ICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpc3QubGVuZ3RoOyBpaSsrKSB7XG5cdCAgICAgICAgaXRlbSA9IGxpc3RbaWldXG5cblx0ICAgICAgICBpZiAoIWl0ZW0pIGNvbnRpbnVlXG5cdCAgICAgICAgICAgIC8qIGpzaGludCAtVzA0MSAqL1xuXHQgICAgICAgIGlmIChpdGVtLnBpZCA9PSB1bmRlZmluZWQgJiYgaXRlbS5wYXJlbnRJZCA9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICAgICAgY29udGludWVcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG1hcHBlZFtpdGVtLnBpZF0gfHwgbWFwcGVkW2l0ZW0ucGFyZW50SWRdXG5cdCAgICAgICAgaWYgKCFwYXJlbnQpIGNvbnRpbnVlXG5cdCAgICAgICAgaWYgKCFwYXJlbnQuY2hpbGRyZW4pIHBhcmVudC5jaGlsZHJlbiA9IFtdXG5cdCAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbSlcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHRcblx0fVxuXG5cdHZhciBESUNUX0ZJWEVEID0gZnVuY3Rpb24oKSB7XG5cdCAgICB2YXIgZml4ZWQgPSBbXVxuXHQgICAgZm9yICh2YXIgaWQgaW4gRElDVCkge1xuXHQgICAgICAgIHZhciBwaWQgPSBpZC5zbGljZSgyLCA2KSA9PT0gJzAwMDAnID8gdW5kZWZpbmVkIDpcblx0ICAgICAgICAgICAgaWQuc2xpY2UoNCwgNikgPT0gJzAwJyA/IChpZC5zbGljZSgwLCAyKSArICcwMDAwJykgOlxuXHQgICAgICAgICAgICBpZC5zbGljZSgwLCA0KSArICcwMCdcblx0ICAgICAgICBmaXhlZC5wdXNoKHtcblx0ICAgICAgICAgICAgaWQ6IGlkLFxuXHQgICAgICAgICAgICBwaWQ6IHBpZCxcblx0ICAgICAgICAgICAgbmFtZTogRElDVFtpZF1cblx0ICAgICAgICB9KVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRyZWUoZml4ZWQpXG5cdH0oKVxuXG5cdG1vZHVsZS5leHBvcnRzID0gRElDVF9GSVhFRFxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIE1pc2NlbGxhbmVvdXNcblx0Ki9cblx0dmFyIERJQ1QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHQvLyBEaWNlXG5cdFx0ZDQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA0KVxuXHRcdH0sXG5cdFx0ZDY6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA2KVxuXHRcdH0sXG5cdFx0ZDg6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA4KVxuXHRcdH0sXG5cdFx0ZDEyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLm5hdHVyYWwoMSwgMTIpXG5cdFx0fSxcblx0XHRkMjA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCAyMClcblx0XHR9LFxuXHRcdGQxMDA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCAxMDApXG5cdFx0fSxcblx0XHQvKlxuXHRcdCAgICDpmo/mnLrnlJ/miJDkuIDkuKogR1VJROOAglxuXG5cdFx0ICAgIGh0dHA6Ly93d3cuYnJvb2ZhLmNvbS8yMDA4LzA5L2phdmFzY3JpcHQtdXVpZC1mdW5jdGlvbi9cblx0XHQgICAgW1VVSUQg6KeE6IyDXShodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MTIyLnR4dClcblx0XHQgICAgICAgIFVVSURzIChVbml2ZXJzYWxseSBVbmlxdWUgSURlbnRpZmllcilcblx0XHQgICAgICAgIEdVSURzIChHbG9iYWxseSBVbmlxdWUgSURlbnRpZmllcilcblx0XHQgICAgICAgIFRoZSBmb3JtYWwgZGVmaW5pdGlvbiBvZiB0aGUgVVVJRCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBBQk5GIFs3XTpcblx0XHQgICAgICAgICAgICBVVUlEICAgICAgICAgICAgICAgICAgID0gdGltZS1sb3cgXCItXCIgdGltZS1taWQgXCItXCJcblx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUtaGlnaC1hbmQtdmVyc2lvbiBcIi1cIlxuXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2stc2VxLWFuZC1yZXNlcnZlZFxuXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2stc2VxLWxvdyBcIi1cIiBub2RlXG5cdFx0ICAgICAgICAgICAgdGltZS1sb3cgICAgICAgICAgICAgICA9IDRoZXhPY3RldFxuXHRcdCAgICAgICAgICAgIHRpbWUtbWlkICAgICAgICAgICAgICAgPSAyaGV4T2N0ZXRcblx0XHQgICAgICAgICAgICB0aW1lLWhpZ2gtYW5kLXZlcnNpb24gID0gMmhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgY2xvY2stc2VxLWFuZC1yZXNlcnZlZCA9IGhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgY2xvY2stc2VxLWxvdyAgICAgICAgICA9IGhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgbm9kZSAgICAgICAgICAgICAgICAgICA9IDZoZXhPY3RldFxuXHRcdCAgICAgICAgICAgIGhleE9jdGV0ICAgICAgICAgICAgICAgPSBoZXhEaWdpdCBoZXhEaWdpdFxuXHRcdCAgICAgICAgICAgIGhleERpZ2l0ID1cblx0XHQgICAgICAgICAgICAgICAgXCIwXCIgLyBcIjFcIiAvIFwiMlwiIC8gXCIzXCIgLyBcIjRcIiAvIFwiNVwiIC8gXCI2XCIgLyBcIjdcIiAvIFwiOFwiIC8gXCI5XCIgL1xuXHRcdCAgICAgICAgICAgICAgICBcImFcIiAvIFwiYlwiIC8gXCJjXCIgLyBcImRcIiAvIFwiZVwiIC8gXCJmXCIgL1xuXHRcdCAgICAgICAgICAgICAgICBcIkFcIiAvIFwiQlwiIC8gXCJDXCIgLyBcIkRcIiAvIFwiRVwiIC8gXCJGXCJcblx0XHQgICAgXG5cdFx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS92aWN0b3JxdWlubi9jaGFuY2Vqcy9ibG9iL2RldmVsb3AvY2hhbmNlLmpzI0wxMzQ5XG5cdFx0Ki9cblx0XHRndWlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwb29sID0gXCJhYmNkZWZBQkNERUYxMjM0NTY3ODkwXCIsXG5cdFx0XHRcdGd1aWQgPSB0aGlzLnN0cmluZyhwb29sLCA4KSArICctJyArXG5cdFx0XHRcdHRoaXMuc3RyaW5nKHBvb2wsIDQpICsgJy0nICtcblx0XHRcdFx0dGhpcy5zdHJpbmcocG9vbCwgNCkgKyAnLScgK1xuXHRcdFx0XHR0aGlzLnN0cmluZyhwb29sLCA0KSArICctJyArXG5cdFx0XHRcdHRoaXMuc3RyaW5nKHBvb2wsIDEyKTtcblx0XHRcdHJldHVybiBndWlkXG5cdFx0fSxcblx0XHR1dWlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmd1aWQoKVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAg6ZqP5py655Sf5oiQ5LiA5LiqIDE4IOS9jei6q+S7veivgeOAglxuXG5cdFx0ICAgIFvouqvku73or4FdKGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8xNjk3Lmh0bSM0KVxuXHRcdCAgICAgICAg5Zyw5Z2A56CBIDYgKyDlh7rnlJ/ml6XmnJ/noIEgOCArIOmhuuW6j+eggSAzICsg5qCh6aqM56CBIDFcblx0XHQgICAgW+OAiuS4reWNjuS6uuawkeWFseWSjOWbveihjOaUv+WMuuWIkuS7o+eggeOAi+WbveWutuagh+WHhihHQi9UMjI2MCldKGh0dHA6Ly96aGlkYW8uYmFpZHUuY29tL3F1ZXN0aW9uLzE5NTQ1NjEuaHRtbClcblx0XHQqL1xuXHRcdGlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpZCxcblx0XHRcdFx0c3VtID0gMCxcblx0XHRcdFx0cmFuayA9IFtcblx0XHRcdFx0XHRcIjdcIiwgXCI5XCIsIFwiMTBcIiwgXCI1XCIsIFwiOFwiLCBcIjRcIiwgXCIyXCIsIFwiMVwiLCBcIjZcIiwgXCIzXCIsIFwiN1wiLCBcIjlcIiwgXCIxMFwiLCBcIjVcIiwgXCI4XCIsIFwiNFwiLCBcIjJcIlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRsYXN0ID0gW1xuXHRcdFx0XHRcdFwiMVwiLCBcIjBcIiwgXCJYXCIsIFwiOVwiLCBcIjhcIiwgXCI3XCIsIFwiNlwiLCBcIjVcIiwgXCI0XCIsIFwiM1wiLCBcIjJcIlxuXHRcdFx0XHRdXG5cblx0XHRcdGlkID0gdGhpcy5waWNrKERJQ1QpLmlkICtcblx0XHRcdFx0dGhpcy5kYXRlKCd5eXl5TU1kZCcpICtcblx0XHRcdFx0dGhpcy5zdHJpbmcoJ251bWJlcicsIDMpXG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c3VtICs9IGlkW2ldICogcmFua1tpXTtcblx0XHRcdH1cblx0XHRcdGlkICs9IGxhc3Rbc3VtICUgMTFdO1xuXG5cdFx0XHRyZXR1cm4gaWRcblx0XHR9LFxuXG5cdFx0Lypcblx0XHQgICAg55Sf5oiQ5LiA5Liq5YWo5bGA55qE6Ieq5aKe5pW05pWw44CCXG5cdFx0ICAgIOexu+S8vOiHquWinuS4u+mUru+8iGF1dG8gaW5jcmVtZW50IHByaW1hcnkga2V577yJ44CCXG5cdFx0Ki9cblx0XHRpbmNyZW1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGtleSA9IDBcblx0XHRcdHJldHVybiBmdW5jdGlvbihzdGVwKSB7XG5cdFx0XHRcdHJldHVybiBrZXkgKz0gKCtzdGVwIHx8IDEpIC8vIHN0ZXA/XG5cdFx0XHR9XG5cdFx0fSgpLFxuXHRcdGluYzogZnVuY3Rpb24oc3RlcCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5jcmVtZW50KHN0ZXApXG5cdFx0fVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgUGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSlcblx0dmFyIEhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHRQYXJzZXI6IFBhcnNlcixcblx0XHRIYW5kbGVyOiBIYW5kbGVyXG5cdH1cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9udXlzb2Z0L3JlZ2V4cFxuXHQvLyBmb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvcmVnZXhwXG5cblx0ZnVuY3Rpb24gcGFyc2Uobikge1xuXHQgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIG4pIHtcblx0ICAgICAgICB2YXIgbCA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgcmVnZXhwIHRvIHBhcnNlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXCIpO1xuXHQgICAgICAgIHRocm93IGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gaW5kZXggPSAxLCBjZ3MgPSB7fSwgcGFyc2VyLnBhcnNlKG4pO1xuXHR9XG5cblx0ZnVuY3Rpb24gVG9rZW4obikge1xuXHQgICAgdGhpcy50eXBlID0gbiwgdGhpcy5vZmZzZXQgPSBUb2tlbi5vZmZzZXQoKSwgdGhpcy50ZXh0ID0gVG9rZW4udGV4dCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gQWx0ZXJuYXRlKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJhbHRlcm5hdGVcIiksIHRoaXMubGVmdCA9IG4sIHRoaXMucmlnaHQgPSBsO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWF0Y2gobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcIm1hdGNoXCIpLCB0aGlzLmJvZHkgPSBuLmZpbHRlcihCb29sZWFuKTtcblx0fVxuXG5cdGZ1bmN0aW9uIEdyb3VwKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgbiksIHRoaXMuYm9keSA9IGw7XG5cdH1cblxuXHRmdW5jdGlvbiBDYXB0dXJlR3JvdXAobikge1xuXHQgICAgR3JvdXAuY2FsbCh0aGlzLCBcImNhcHR1cmUtZ3JvdXBcIiksIHRoaXMuaW5kZXggPSBjZ3NbdGhpcy5vZmZzZXRdIHx8IChjZ3NbdGhpcy5vZmZzZXRdID0gaW5kZXgrKyksIFxuXHQgICAgdGhpcy5ib2R5ID0gbjtcblx0fVxuXG5cdGZ1bmN0aW9uIFF1YW50aWZpZWQobiwgbCkge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcInF1YW50aWZpZWRcIiksIHRoaXMuYm9keSA9IG4sIHRoaXMucXVhbnRpZmllciA9IGw7XG5cdH1cblxuXHRmdW5jdGlvbiBRdWFudGlmaWVyKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJxdWFudGlmaWVyXCIpLCB0aGlzLm1pbiA9IG4sIHRoaXMubWF4ID0gbCwgdGhpcy5ncmVlZHkgPSAhMDtcblx0fVxuXG5cdGZ1bmN0aW9uIENoYXJTZXQobiwgbCkge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImNoYXJzZXRcIiksIHRoaXMuaW52ZXJ0ID0gbiwgdGhpcy5ib2R5ID0gbDtcblx0fVxuXG5cdGZ1bmN0aW9uIENoYXJhY3RlclJhbmdlKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJyYW5nZVwiKSwgdGhpcy5zdGFydCA9IG4sIHRoaXMuZW5kID0gbDtcblx0fVxuXG5cdGZ1bmN0aW9uIExpdGVyYWwobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImxpdGVyYWxcIiksIHRoaXMuYm9keSA9IG4sIHRoaXMuZXNjYXBlZCA9IHRoaXMuYm9keSAhPSB0aGlzLnRleHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBVbmljb2RlKG4pIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJ1bmljb2RlXCIpLCB0aGlzLmNvZGUgPSBuLnRvVXBwZXJDYXNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBIZXgobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImhleFwiKSwgdGhpcy5jb2RlID0gbi50b1VwcGVyQ2FzZSgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gT2N0YWwobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcIm9jdGFsXCIpLCB0aGlzLmNvZGUgPSBuLnRvVXBwZXJDYXNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBCYWNrUmVmZXJlbmNlKG4pIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJiYWNrLXJlZmVyZW5jZVwiKSwgdGhpcy5jb2RlID0gbi50b1VwcGVyQ2FzZSgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gQ29udHJvbENoYXJhY3RlcihuKSB7XG5cdCAgICBUb2tlbi5jYWxsKHRoaXMsIFwiY29udHJvbC1jaGFyYWN0ZXJcIiksIHRoaXMuY29kZSA9IG4udG9VcHBlckNhc2UoKTtcblx0fVxuXG5cdHZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcblx0ICAgIGZ1bmN0aW9uIG4obiwgbCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIHUoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB1LnByb3RvdHlwZSA9IGwucHJvdG90eXBlLCBuLnByb3RvdHlwZSA9IG5ldyB1KCk7XG5cdCAgICB9XG5cdCAgICBmdW5jdGlvbiBsKG4sIGwsIHUsIHQsIHIpIHtcblx0ICAgICAgICBmdW5jdGlvbiBlKG4sIGwpIHtcblx0ICAgICAgICAgICAgZnVuY3Rpb24gdShuKSB7XG5cdCAgICAgICAgICAgICAgICBmdW5jdGlvbiBsKG4pIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXHgwOC9nLCBcIlxcXFxiXCIpLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLnJlcGxhY2UoL1xcZi9nLCBcIlxcXFxmXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpLnJlcGxhY2UoL1tcXHgwMC1cXHgwN1xceDBCXFx4MEVcXHgwRl0vZywgZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlxcXFx4MFwiICsgbChuKTtcblx0ICAgICAgICAgICAgICAgIH0pLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDgwLVxceEZGXS9nLCBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXHhcIiArIGwobik7XG5cdCAgICAgICAgICAgICAgICB9KS5yZXBsYWNlKC9bXFx1MDE4MC1cXHUwRkZGXS9nLCBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXHUwXCIgKyBsKG4pO1xuXHQgICAgICAgICAgICAgICAgfSkucmVwbGFjZSgvW1xcdTEwODAtXFx1RkZGRl0vZywgZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlxcXFx1XCIgKyBsKG4pO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHQsIHI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAobi5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICBjYXNlIDA6XG5cdCAgICAgICAgICAgICAgICB0ID0gXCJlbmQgb2YgaW5wdXRcIjtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgICAgICAgICAgY2FzZSAxOlxuXHQgICAgICAgICAgICAgICAgdCA9IG5bMF07XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblxuXHQgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0ID0gbi5zbGljZSgwLCAtMSkuam9pbihcIiwgXCIpICsgXCIgb3IgXCIgKyBuW24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHIgPSBsID8gJ1wiJyArIHUobCkgKyAnXCInIDogXCJlbmQgb2YgaW5wdXRcIiwgXCJFeHBlY3RlZCBcIiArIHQgKyBcIiBidXQgXCIgKyByICsgXCIgZm91bmQuXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBuLCB0aGlzLmZvdW5kID0gbCwgdGhpcy5vZmZzZXQgPSB1LCB0aGlzLmxpbmUgPSB0LCB0aGlzLmNvbHVtbiA9IHIsIFxuXHQgICAgICAgIHRoaXMubmFtZSA9IFwiU3ludGF4RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gZShuLCBsKTtcblx0ICAgIH1cblx0ICAgIGZ1bmN0aW9uIHUobikge1xuXHQgICAgICAgIGZ1bmN0aW9uIHUoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuLnN1YnN0cmluZyhMdCwgcXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB0KCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHIobCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiB1KGwsIHUsIHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciByLCBlO1xuXHQgICAgICAgICAgICAgICAgZm9yIChyID0gdTsgdCA+IHI7IHIrKykgZSA9IG4uY2hhckF0KHIpLCBcIlxcblwiID09PSBlID8gKGwuc2VlbkNSIHx8IGwubGluZSsrLCBsLmNvbHVtbiA9IDEsIFxuXHQgICAgICAgICAgICAgICAgbC5zZWVuQ1IgPSAhMSkgOiBcIlxcclwiID09PSBlIHx8IFwiXFx1MjAyOFwiID09PSBlIHx8IFwiXFx1MjAyOVwiID09PSBlID8gKGwubGluZSsrLCBsLmNvbHVtbiA9IDEsIFxuXHQgICAgICAgICAgICAgICAgbC5zZWVuQ1IgPSAhMCkgOiAobC5jb2x1bW4rKywgbC5zZWVuQ1IgPSAhMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIE10ICE9PSBsICYmIChNdCA+IGwgJiYgKE10ID0gMCwgRHQgPSB7XG5cdCAgICAgICAgICAgICAgICBsaW5lOiAxLFxuXHQgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuXHQgICAgICAgICAgICAgICAgc2VlbkNSOiAhMVxuXHQgICAgICAgICAgICB9KSwgdShEdCwgTXQsIGwpLCBNdCA9IGwpLCBEdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZShuKSB7XG5cdCAgICAgICAgICAgIEh0ID4gcXQgfHwgKHF0ID4gSHQgJiYgKEh0ID0gcXQsIE90ID0gW10pLCBPdC5wdXNoKG4pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gbyhuKSB7XG5cdCAgICAgICAgICAgIHZhciBsID0gMDtcblx0ICAgICAgICAgICAgZm9yIChuLnNvcnQoKTsgbCA8IG4ubGVuZ3RoOyApIG5bbCAtIDFdID09PSBuW2xdID8gbi5zcGxpY2UobCwgMSkgOiBsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGMoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCB1ID0gaSgpLCBudWxsICE9PSB1ID8gKHQgPSBxdCwgMTI0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBmbCwgXG5cdCAgICAgICAgICAgIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKHNsKSksIG51bGwgIT09IHIgPyAobyA9IGMoKSwgbnVsbCAhPT0gbyA/IChyID0gWyByLCBvIF0sIFxuXHQgICAgICAgICAgICB0ID0gcikgOiAocXQgPSB0LCB0ID0gaWwpKSA6IChxdCA9IHQsIHQgPSBpbCksIG51bGwgPT09IHQgJiYgKHQgPSBhbCksIG51bGwgIT09IHQgPyAoTHQgPSBsLCBcblx0ICAgICAgICAgICAgdSA9IGhsKHUsIHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gaSgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIGlmIChuID0gcXQsIGwgPSBmKCksIG51bGwgPT09IGwgJiYgKGwgPSBhbCksIG51bGwgIT09IGwpIGlmICh1ID0gcXQsIFd0KyssIHQgPSBkKCksIFxuXHQgICAgICAgICAgICBXdC0tLCBudWxsID09PSB0ID8gdSA9IGFsIDogKHF0ID0gdSwgdSA9IGlsKSwgbnVsbCAhPT0gdSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh0ID0gW10sIHIgPSBoKCksIG51bGwgPT09IHIgJiYgKHIgPSBhKCkpOyBudWxsICE9PSByOyApIHQucHVzaChyKSwgciA9IGgoKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSByICYmIChyID0gYSgpKTtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHQgPyAociA9IHMoKSwgbnVsbCA9PT0gciAmJiAociA9IGFsKSwgbnVsbCAhPT0gciA/IChMdCA9IG4sIGwgPSBkbChsLCB0LCByKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSBsID8gKHF0ID0gbiwgbiA9IGwpIDogbiA9IGwpIDogKHF0ID0gbiwgbiA9IGlsKSkgOiAocXQgPSBuLCBuID0gaWwpO1xuXHQgICAgICAgICAgICB9IGVsc2UgcXQgPSBuLCBuID0gaWw7IGVsc2UgcXQgPSBuLCBuID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBhKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSB4KCksIG51bGwgPT09IG4gJiYgKG4gPSBRKCksIG51bGwgPT09IG4gJiYgKG4gPSBCKCkpKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDk0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBwbCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUodmwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IHdsKCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHMoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAzNiA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gQWwsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKENsKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBnbCgpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBoKCkge1xuXHQgICAgICAgICAgICB2YXIgbiwgbCwgdTtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBxdCwgbCA9IGEoKSwgbnVsbCAhPT0gbCA/ICh1ID0gZCgpLCBudWxsICE9PSB1ID8gKEx0ID0gbiwgbCA9IGJsKGwsIHUpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbCA/IChxdCA9IG4sIG4gPSBsKSA6IG4gPSBsKSA6IChxdCA9IG4sIG4gPSBpbCkpIDogKHF0ID0gbiwgbiA9IGlsKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZCgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBuID0gcXQsIGwgPSBwKCksIG51bGwgIT09IGwgPyAodSA9IGsoKSwgbnVsbCA9PT0gdSAmJiAodSA9IGFsKSwgbnVsbCAhPT0gdSA/IChMdCA9IG4sIFxuXHQgICAgICAgICAgICBsID0gVGwobCwgdSksIG51bGwgPT09IGwgPyAocXQgPSBuLCBuID0gbCkgOiBuID0gbCkgOiAocXQgPSBuLCBuID0gaWwpKSA6IChxdCA9IG4sIFxuXHQgICAgICAgICAgICBuID0gaWwpLCBXdC0tLCBudWxsID09PSBuICYmIChsID0gbnVsbCwgMCA9PT0gV3QgJiYgZShrbCkpLCBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBwKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSB2KCksIG51bGwgPT09IG4gJiYgKG4gPSB3KCksIG51bGwgPT09IG4gJiYgKG4gPSBBKCksIG51bGwgPT09IG4gJiYgKG4gPSBDKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gZygpLCBudWxsID09PSBuICYmIChuID0gYigpKSkpKSksIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHYoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvLCBjO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAxMjMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IHhsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh5bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/ICh0ID0gVCgpLCBudWxsICE9PSB0ID8gKDQ0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBtbCwgcXQrKykgOiAociA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKFJsKSksIG51bGwgIT09IHIgPyAobyA9IFQoKSwgbnVsbCAhPT0gbyA/ICgxMjUgPT09IG4uY2hhckNvZGVBdChxdCkgPyAoYyA9IEZsLCBcblx0ICAgICAgICAgICAgcXQrKykgOiAoYyA9IG51bGwsIDAgPT09IFd0ICYmIGUoUWwpKSwgbnVsbCAhPT0gYyA/IChMdCA9IGwsIHUgPSBTbCh0LCBvKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB3KCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdSwgdCwgcjtcblx0ICAgICAgICAgICAgcmV0dXJuIGwgPSBxdCwgMTIzID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSB4bCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoeWwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IFQoKSwgbnVsbCAhPT0gdCA/IChuLnN1YnN0cihxdCwgMikgPT09IFVsID8gKHIgPSBVbCwgcXQgKz0gMikgOiAociA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKEVsKSksIG51bGwgIT09IHIgPyAoTHQgPSBsLCB1ID0gR2wodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEEoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAxMjMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IHhsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh5bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/ICh0ID0gVCgpLCBudWxsICE9PSB0ID8gKDEyNSA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/IChyID0gRmwsIHF0KyspIDogKHIgPSBudWxsLCBcblx0ICAgICAgICAgICAgMCA9PT0gV3QgJiYgZShRbCkpLCBudWxsICE9PSByID8gKEx0ID0gbCwgdSA9IEJsKHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBDKCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdTtcblx0ICAgICAgICAgICAgcmV0dXJuIGwgPSBxdCwgNDMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IGpsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSgkbCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gcWwoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDQyID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBMbCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoTWwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IERsKCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGIoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA2MyA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gSGwsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKE9sKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBXbCgpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBrKCkge1xuXHQgICAgICAgICAgICB2YXIgbDtcblx0ICAgICAgICAgICAgcmV0dXJuIDYzID09PSBuLmNoYXJDb2RlQXQocXQpID8gKGwgPSBIbCwgcXQrKykgOiAobCA9IG51bGwsIDAgPT09IFd0ICYmIGUoT2wpKSwgXG5cdCAgICAgICAgICAgIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFQoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICBpZiAobCA9IHF0LCB1ID0gW10sIHpsLnRlc3Qobi5jaGFyQXQocXQpKSA/ICh0ID0gbi5jaGFyQXQocXQpLCBxdCsrKSA6ICh0ID0gbnVsbCwgXG5cdCAgICAgICAgICAgIDAgPT09IFd0ICYmIGUoSWwpKSwgbnVsbCAhPT0gdCkgZm9yICg7bnVsbCAhPT0gdDsgKSB1LnB1c2godCksIHpsLnRlc3Qobi5jaGFyQXQocXQpKSA/ICh0ID0gbi5jaGFyQXQocXQpLCBcblx0ICAgICAgICAgICAgcXQrKykgOiAodCA9IG51bGwsIDAgPT09IFd0ICYmIGUoSWwpKTsgZWxzZSB1ID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBKbCh1KSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgXG5cdCAgICAgICAgICAgIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHgoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA0MCA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gS2wsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKE5sKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ID8gKHQgPSBSKCksIG51bGwgPT09IHQgJiYgKHQgPSBGKCksIG51bGwgPT09IHQgJiYgKHQgPSBtKCksIG51bGwgPT09IHQgJiYgKHQgPSB5KCkpKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKDQxID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBQbCwgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVmwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHIgPyAoTHQgPSBsLCB1ID0gWGwodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHkoKSB7XG5cdCAgICAgICAgICAgIHZhciBuLCBsO1xuXHQgICAgICAgICAgICByZXR1cm4gbiA9IHF0LCBsID0gYygpLCBudWxsICE9PSBsICYmIChMdCA9IG4sIGwgPSBZbChsKSksIG51bGwgPT09IGwgPyAocXQgPSBuLCBcblx0ICAgICAgICAgICAgbiA9IGwpIDogbiA9IGwsIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG0oKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IFpsID8gKHUgPSBabCwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoX2wpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBudSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFIoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IGx1ID8gKHUgPSBsdSwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUodXUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSB0dSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEYoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IHJ1ID8gKHUgPSBydSwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZXUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBvdSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFEoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvO1xuXHQgICAgICAgICAgICBpZiAoV3QrKywgbCA9IHF0LCA5MSA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gaXUsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKGF1KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1KSBpZiAoOTQgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodCA9IHBsLCBxdCsrKSA6ICh0ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh2bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gdCAmJiAodCA9IGFsKSwgbnVsbCAhPT0gdCkge1xuXHQgICAgICAgICAgICAgICAgZm9yIChyID0gW10sIG8gPSBTKCksIG51bGwgPT09IG8gJiYgKG8gPSBVKCkpOyBudWxsICE9PSBvOyApIHIucHVzaChvKSwgbyA9IFMoKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSBvICYmIChvID0gVSgpKTtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHIgPyAoOTMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAobyA9IGZ1LCBxdCsrKSA6IChvID0gbnVsbCwgMCA9PT0gV3QgJiYgZShzdSkpLCBcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IG8gPyAoTHQgPSBsLCB1ID0gaHUodCwgciksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHF0ID0gbCwgbCA9IGlsOyBlbHNlIHF0ID0gbCwgbCA9IGlsO1xuXHQgICAgICAgICAgICByZXR1cm4gV3QtLSwgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoY3UpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gUygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBsID0gcXQsIHUgPSBVKCksIG51bGwgIT09IHUgPyAoNDUgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodCA9IHB1LCBxdCsrKSA6ICh0ID0gbnVsbCwgXG5cdCAgICAgICAgICAgIDAgPT09IFd0ICYmIGUodnUpKSwgbnVsbCAhPT0gdCA/IChyID0gVSgpLCBudWxsICE9PSByID8gKEx0ID0gbCwgdSA9IHd1KHUsIHIpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBXdC0tLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZHUpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVSgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGw7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBuID0gRygpLCBudWxsID09PSBuICYmIChuID0gRSgpKSwgV3QtLSwgbnVsbCA9PT0gbiAmJiAobCA9IG51bGwsIDAgPT09IFd0ICYmIGUoQXUpKSwgXG5cdCAgICAgICAgICAgIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEUoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBDdS50ZXN0KG4uY2hhckF0KHF0KSkgPyAodSA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZ3UpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IGJ1KHUpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBHKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBMKCksIG51bGwgPT09IG4gJiYgKG4gPSBZKCksIG51bGwgPT09IG4gJiYgKG4gPSBIKCksIG51bGwgPT09IG4gJiYgKG4gPSBPKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gVygpLCBudWxsID09PSBuICYmIChuID0geigpLCBudWxsID09PSBuICYmIChuID0gSSgpLCBudWxsID09PSBuICYmIChuID0gSigpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IEsoKSwgbnVsbCA9PT0gbiAmJiAobiA9IE4oKSwgbnVsbCA9PT0gbiAmJiAobiA9IFAoKSwgbnVsbCA9PT0gbiAmJiAobiA9IFYoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSBYKCksIG51bGwgPT09IG4gJiYgKG4gPSBfKCksIG51bGwgPT09IG4gJiYgKG4gPSBubCgpLCBudWxsID09PSBuICYmIChuID0gbGwoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSB1bCgpLCBudWxsID09PSBuICYmIChuID0gdGwoKSkpKSkpKSkpKSkpKSkpKSkpLCBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBCKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBqKCksIG51bGwgPT09IG4gJiYgKG4gPSBxKCksIG51bGwgPT09IG4gJiYgKG4gPSAkKCkpKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gaigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDQ2ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBrdSwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoVHUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IHh1KCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uICQoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gV3QrKywgbCA9IHF0LCBtdS50ZXN0KG4uY2hhckF0KHF0KSkgPyAodSA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodSA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKFJ1KSksIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IGJ1KHUpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBcblx0ICAgICAgICAgICAgV3QtLSwgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoeXUpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gcSgpIHtcblx0ICAgICAgICAgICAgdmFyIG47XG5cdCAgICAgICAgICAgIHJldHVybiBuID0gTSgpLCBudWxsID09PSBuICYmIChuID0gRCgpLCBudWxsID09PSBuICYmIChuID0gWSgpLCBudWxsID09PSBuICYmIChuID0gSCgpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IE8oKSwgbnVsbCA9PT0gbiAmJiAobiA9IFcoKSwgbnVsbCA9PT0gbiAmJiAobiA9IHooKSwgbnVsbCA9PT0gbiAmJiAobiA9IEkoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSBKKCksIG51bGwgPT09IG4gJiYgKG4gPSBLKCksIG51bGwgPT09IG4gJiYgKG4gPSBOKCksIG51bGwgPT09IG4gJiYgKG4gPSBQKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gVigpLCBudWxsID09PSBuICYmIChuID0gWCgpLCBudWxsID09PSBuICYmIChuID0gWigpLCBudWxsID09PSBuICYmIChuID0gXygpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IG5sKCksIG51bGwgPT09IG4gJiYgKG4gPSBsbCgpLCBudWxsID09PSBuICYmIChuID0gdWwoKSwgbnVsbCA9PT0gbiAmJiAobiA9IHRsKCkpKSkpKSkpKSkpKSkpKSkpKSkpLCBcblx0ICAgICAgICAgICAgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRnUgPyAodSA9IEZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShRdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gU3UoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRnUgPyAodSA9IEZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShRdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gVXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gRCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRXUgPyAodSA9IEV1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShHdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gQnUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0ganUgPyAodSA9IGp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSgkdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gcXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gTHUgPyAodSA9IEx1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShNdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gRHUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gSHUgPyAodSA9IEh1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShPdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gV3UoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24geigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0genUgPyAodSA9IHp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShJdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gSnUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gS3UgPyAodSA9IEt1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShOdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gUHUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVnUgPyAodSA9IFZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShYdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gWXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gWnUgPyAodSA9IFp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShfdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gbnQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gbHQgPyAodSA9IGx0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh1dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gdHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gUCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gcnQgPyAodSA9IHJ0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShldCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gb3QoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gY3QgPyAodSA9IGN0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShpdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gYXQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gZnQgPyAodSA9IGZ0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShzdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gaHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQ7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gZHQgPyAodSA9IGR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShwdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/IChuLmxlbmd0aCA+IHF0ID8gKHQgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHQgPSBudWxsLCAwID09PSBXdCAmJiBlKHZ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IHd0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQ7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDkyID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBBdCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoQ3QpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAoZ3QudGVzdChuLmNoYXJBdChxdCkpID8gKHQgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHQgPSBudWxsLCAwID09PSBXdCAmJiBlKGJ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IGt0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gXygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIGlmIChsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVHQgPyAodSA9IFR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh4dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHQgPSBbXSwgeXQudGVzdChuLmNoYXJBdChxdCkpID8gKHIgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKG10KSksIFxuXHQgICAgICAgICAgICAgICAgbnVsbCAhPT0gcikgZm9yICg7bnVsbCAhPT0gcjsgKSB0LnB1c2gociksIHl0LnRlc3Qobi5jaGFyQXQocXQpKSA/IChyID0gbi5jaGFyQXQocXQpLCBcblx0ICAgICAgICAgICAgICAgIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKG10KSk7IGVsc2UgdCA9IGlsO1xuXHQgICAgICAgICAgICAgICAgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBSdCh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICAgICAgbCA9IGlsKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHF0ID0gbCwgbCA9IGlsO1xuXHQgICAgICAgICAgICByZXR1cm4gbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gbmwoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICBpZiAobCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IEZ0ID8gKHUgPSBGdCwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoUXQpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0ID0gW10sIFN0LnRlc3Qobi5jaGFyQXQocXQpKSA/IChyID0gbi5jaGFyQXQocXQpLCBxdCsrKSA6IChyID0gbnVsbCwgMCA9PT0gV3QgJiYgZShVdCkpLCBcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHIpIGZvciAoO251bGwgIT09IHI7ICkgdC5wdXNoKHIpLCBTdC50ZXN0KG4uY2hhckF0KHF0KSkgPyAociA9IG4uY2hhckF0KHF0KSwgXG5cdCAgICAgICAgICAgICAgICBxdCsrKSA6IChyID0gbnVsbCwgMCA9PT0gV3QgJiYgZShVdCkpOyBlbHNlIHQgPSBpbDtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHQgPyAoTHQgPSBsLCB1ID0gRXQodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgICAgIGwgPSBpbCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBxdCA9IGwsIGwgPSBpbDtcblx0ICAgICAgICAgICAgcmV0dXJuIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGxsKCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdSwgdCwgcjtcblx0ICAgICAgICAgICAgaWYgKGwgPSBxdCwgbi5zdWJzdHIocXQsIDIpID09PSBHdCA/ICh1ID0gR3QsIHF0ICs9IDIpIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKEJ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodCA9IFtdLCBTdC50ZXN0KG4uY2hhckF0KHF0KSkgPyAociA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVXQpKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsICE9PSByKSBmb3IgKDtudWxsICE9PSByOyApIHQucHVzaChyKSwgU3QudGVzdChuLmNoYXJBdChxdCkpID8gKHIgPSBuLmNoYXJBdChxdCksIFxuXHQgICAgICAgICAgICAgICAgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVXQpKTsgZWxzZSB0ID0gaWw7XG5cdCAgICAgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IGp0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgICAgICBsID0gaWwpO1xuXHQgICAgICAgICAgICB9IGVsc2UgcXQgPSBsLCBsID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB1bCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVHQgPyAodSA9IFR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh4dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gJHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gdGwoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA5MiA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gQXQsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKEN0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ID8gKG4ubGVuZ3RoID4gcXQgPyAodCA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodCA9IG51bGwsIDAgPT09IFd0ICYmIGUodnQpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHQgPyAoTHQgPSBsLCB1ID0gYnUodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmwsIGVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB7fSwgb2wgPSB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogY1xuXHQgICAgICAgIH0sIGNsID0gYywgaWwgPSBudWxsLCBhbCA9IFwiXCIsIGZsID0gXCJ8XCIsIHNsID0gJ1wifFwiJywgaGwgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBsID8gbmV3IEFsdGVybmF0ZShuLCBsWzFdKSA6IG47XG5cdCAgICAgICAgfSwgZGwgPSBmdW5jdGlvbihuLCBsLCB1KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgTWF0Y2goWyBuIF0uY29uY2F0KGwpLmNvbmNhdChbIHUgXSkpO1xuXHQgICAgICAgIH0sIHBsID0gXCJeXCIsIHZsID0gJ1wiXlwiJywgd2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcInN0YXJ0XCIpO1xuXHQgICAgICAgIH0sIEFsID0gXCIkXCIsIENsID0gJ1wiJFwiJywgZ2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImVuZFwiKTtcblx0ICAgICAgICB9LCBibCA9IGZ1bmN0aW9uKG4sIGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWFudGlmaWVkKG4sIGwpO1xuXHQgICAgICAgIH0sIGtsID0gXCJRdWFudGlmaWVyXCIsIFRsID0gZnVuY3Rpb24obiwgbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbCAmJiAobi5ncmVlZHkgPSAhMSksIG47XG5cdCAgICAgICAgfSwgeGwgPSBcIntcIiwgeWwgPSAnXCJ7XCInLCBtbCA9IFwiLFwiLCBSbCA9ICdcIixcIicsIEZsID0gXCJ9XCIsIFFsID0gJ1wifVwiJywgU2wgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcihuLCBsKTtcblx0ICAgICAgICB9LCBVbCA9IFwiLH1cIiwgRWwgPSAnXCIsfVwiJywgR2wgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcihuLCAxLzApO1xuXHQgICAgICAgIH0sIEJsID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFF1YW50aWZpZXIobiwgbik7XG5cdCAgICAgICAgfSwgamwgPSBcIitcIiwgJGwgPSAnXCIrXCInLCBxbCA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFF1YW50aWZpZXIoMSwgMS8wKTtcblx0ICAgICAgICB9LCBMbCA9IFwiKlwiLCBNbCA9ICdcIipcIicsIERsID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcigwLCAxLzApO1xuXHQgICAgICAgIH0sIEhsID0gXCI/XCIsIE9sID0gJ1wiP1wiJywgV2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWFudGlmaWVyKDAsIDEpO1xuXHQgICAgICAgIH0sIHpsID0gL15bMC05XS8sIElsID0gXCJbMC05XVwiLCBKbCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuICtuLmpvaW4oXCJcIik7XG5cdCAgICAgICAgfSwgS2wgPSBcIihcIiwgTmwgPSAnXCIoXCInLCBQbCA9IFwiKVwiLCBWbCA9ICdcIilcIicsIFhsID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbjtcblx0ICAgICAgICB9LCBZbCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXB0dXJlR3JvdXAobik7XG5cdCAgICAgICAgfSwgWmwgPSBcIj86XCIsIF9sID0gJ1wiPzpcIicsIG51ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEdyb3VwKFwibm9uLWNhcHR1cmUtZ3JvdXBcIiwgbik7XG5cdCAgICAgICAgfSwgbHUgPSBcIj89XCIsIHV1ID0gJ1wiPz1cIicsIHR1ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEdyb3VwKFwicG9zaXRpdmUtbG9va2FoZWFkXCIsIG4pO1xuXHQgICAgICAgIH0sIHJ1ID0gXCI/IVwiLCBldSA9ICdcIj8hXCInLCBvdSA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBHcm91cChcIm5lZ2F0aXZlLWxvb2thaGVhZFwiLCBuKTtcblx0ICAgICAgICB9LCBjdSA9IFwiQ2hhcmFjdGVyU2V0XCIsIGl1ID0gXCJbXCIsIGF1ID0gJ1wiW1wiJywgZnUgPSBcIl1cIiwgc3UgPSAnXCJdXCInLCBodSA9IGZ1bmN0aW9uKG4sIGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFyU2V0KCEhbiwgbCk7XG5cdCAgICAgICAgfSwgZHUgPSBcIkNoYXJhY3RlclJhbmdlXCIsIHB1ID0gXCItXCIsIHZ1ID0gJ1wiLVwiJywgd3UgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ2hhcmFjdGVyUmFuZ2UobiwgbCk7XG5cdCAgICAgICAgfSwgQXUgPSBcIkNoYXJhY3RlclwiLCBDdSA9IC9eW15cXFxcXFxdXS8sIGd1ID0gXCJbXlxcXFxcXFxcXFxcXF1dXCIsIGJ1ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwobik7XG5cdCAgICAgICAgfSwga3UgPSBcIi5cIiwgVHUgPSAnXCIuXCInLCB4dSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwiYW55LWNoYXJhY3RlclwiKTtcblx0ICAgICAgICB9LCB5dSA9IFwiTGl0ZXJhbFwiLCBtdSA9IC9eW158XFxcXFxcLy5bKCk/KyokXFxeXS8sIFJ1ID0gXCJbXnxcXFxcXFxcXFxcXFwvLlsoKT8rKiRcXFxcXl1cIiwgRnUgPSBcIlxcXFxiXCIsIFF1ID0gJ1wiXFxcXFxcXFxiXCInLCBTdSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwiYmFja3NwYWNlXCIpO1xuXHQgICAgICAgIH0sIFV1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3b3JkLWJvdW5kYXJ5XCIpO1xuXHQgICAgICAgIH0sIEV1ID0gXCJcXFxcQlwiLCBHdSA9ICdcIlxcXFxcXFxcQlwiJywgQnUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi13b3JkLWJvdW5kYXJ5XCIpO1xuXHQgICAgICAgIH0sIGp1ID0gXCJcXFxcZFwiLCAkdSA9ICdcIlxcXFxcXFxcZFwiJywgcXUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImRpZ2l0XCIpO1xuXHQgICAgICAgIH0sIEx1ID0gXCJcXFxcRFwiLCBNdSA9ICdcIlxcXFxcXFxcRFwiJywgRHUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi1kaWdpdFwiKTtcblx0ICAgICAgICB9LCBIdSA9IFwiXFxcXGZcIiwgT3UgPSAnXCJcXFxcXFxcXGZcIicsIFd1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJmb3JtLWZlZWRcIik7XG5cdCAgICAgICAgfSwgenUgPSBcIlxcXFxuXCIsIEl1ID0gJ1wiXFxcXFxcXFxuXCInLCBKdSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwibGluZS1mZWVkXCIpO1xuXHQgICAgICAgIH0sIEt1ID0gXCJcXFxcclwiLCBOdSA9ICdcIlxcXFxcXFxcclwiJywgUHUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImNhcnJpYWdlLXJldHVyblwiKTtcblx0ICAgICAgICB9LCBWdSA9IFwiXFxcXHNcIiwgWHUgPSAnXCJcXFxcXFxcXHNcIicsIFl1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3aGl0ZS1zcGFjZVwiKTtcblx0ICAgICAgICB9LCBadSA9IFwiXFxcXFNcIiwgX3UgPSAnXCJcXFxcXFxcXFNcIicsIG50ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJub24td2hpdGUtc3BhY2VcIik7XG5cdCAgICAgICAgfSwgbHQgPSBcIlxcXFx0XCIsIHV0ID0gJ1wiXFxcXFxcXFx0XCInLCB0dCA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwidGFiXCIpO1xuXHQgICAgICAgIH0sIHJ0ID0gXCJcXFxcdlwiLCBldCA9ICdcIlxcXFxcXFxcdlwiJywgb3QgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcInZlcnRpY2FsLXRhYlwiKTtcblx0ICAgICAgICB9LCBjdCA9IFwiXFxcXHdcIiwgaXQgPSAnXCJcXFxcXFxcXHdcIicsIGF0ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3b3JkXCIpO1xuXHQgICAgICAgIH0sIGZ0ID0gXCJcXFxcV1wiLCBzdCA9ICdcIlxcXFxcXFxcV1wiJywgaHQgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi13b3JkXCIpO1xuXHQgICAgICAgIH0sIGR0ID0gXCJcXFxcY1wiLCBwdCA9ICdcIlxcXFxcXFxcY1wiJywgdnQgPSBcImFueSBjaGFyYWN0ZXJcIiwgd3QgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29udHJvbENoYXJhY3RlcihuKTtcblx0ICAgICAgICB9LCBBdCA9IFwiXFxcXFwiLCBDdCA9ICdcIlxcXFxcXFxcXCInLCBndCA9IC9eWzEtOV0vLCBidCA9IFwiWzEtOV1cIiwga3QgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQmFja1JlZmVyZW5jZShuKTtcblx0ICAgICAgICB9LCBUdCA9IFwiXFxcXDBcIiwgeHQgPSAnXCJcXFxcXFxcXDBcIicsIHl0ID0gL15bMC03XS8sIG10ID0gXCJbMC03XVwiLCBSdCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBPY3RhbChuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sIEZ0ID0gXCJcXFxceFwiLCBRdCA9ICdcIlxcXFxcXFxceFwiJywgU3QgPSAvXlswLTlhLWZBLUZdLywgVXQgPSBcIlswLTlhLWZBLUZdXCIsIEV0ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEhleChuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sIEd0ID0gXCJcXFxcdVwiLCBCdCA9ICdcIlxcXFxcXFxcdVwiJywganQgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVW5pY29kZShuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sICR0ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJudWxsLWNoYXJhY3RlclwiKTtcblx0ICAgICAgICB9LCBxdCA9IDAsIEx0ID0gMCwgTXQgPSAwLCBEdCA9IHtcblx0ICAgICAgICAgICAgbGluZTogMSxcblx0ICAgICAgICAgICAgY29sdW1uOiAxLFxuXHQgICAgICAgICAgICBzZWVuQ1I6ICExXG5cdCAgICAgICAgfSwgSHQgPSAwLCBPdCA9IFtdLCBXdCA9IDA7XG5cdCAgICAgICAgaWYgKFwic3RhcnRSdWxlXCIgaW4gZWwpIHtcblx0ICAgICAgICAgICAgaWYgKCEoZWwuc3RhcnRSdWxlIGluIG9sKSkgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgXFxcIlwiICsgZWwuc3RhcnRSdWxlICsgJ1wiLicpO1xuXHQgICAgICAgICAgICBjbCA9IG9sW2VsLnN0YXJ0UnVsZV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb2tlbi5vZmZzZXQgPSB0LCBUb2tlbi50ZXh0ID0gdSwgcmwgPSBjbCgpLCBudWxsICE9PSBybCAmJiBxdCA9PT0gbi5sZW5ndGgpIHJldHVybiBybDtcblx0ICAgICAgICB0aHJvdyBvKE90KSwgTHQgPSBNYXRoLm1heChxdCwgSHQpLCBuZXcgbChPdCwgTHQgPCBuLmxlbmd0aCA/IG4uY2hhckF0KEx0KSA6IG51bGwsIEx0LCByKEx0KS5saW5lLCByKEx0KS5jb2x1bW4pO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIG4obCwgRXJyb3IpLCB7XG5cdCAgICAgICAgU3ludGF4RXJyb3I6IGwsXG5cdCAgICAgICAgcGFyc2U6IHVcblx0ICAgIH07XG5cdH0oKSwgaW5kZXggPSAxLCBjZ3MgPSB7fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHBhcnNlclxuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIFJlZ0V4cCBIYW5kbGVyXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JiZXNMaW5kZXNheS9yZWdleHBcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kbWFqZGEvcGVnanNcblx0ICAgIGh0dHA6Ly93d3cucmVnZXhwZXIuY29tL1xuXG5cdCAgICDmr4/kuKroioLngrnnmoTnu5PmnoRcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIHR5cGU6ICcnLFxuXHQgICAgICAgICAgICBvZmZzZXQ6IG51bWJlcixcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGJvZHk6IHt9LFxuXHQgICAgICAgICAgICBlc2NhcGVkOiB0cnVlL2ZhbHNlXG5cdCAgICAgICAgfVxuXG5cdCAgICB0eXBlIOWPr+mAieWAvFxuXHQgICAgICAgIGFsdGVybmF0ZSAgICAgICAgICAgICB8ICAgICAgICAg6YCJ5oupXG5cdCAgICAgICAgbWF0Y2ggICAgICAgICAgICAgICAgIOWMuemFjVxuXHQgICAgICAgIGNhcHR1cmUtZ3JvdXAgICAgICAgICAoKSAgICAgICAg5o2V6I6357uEXG5cdCAgICAgICAgbm9uLWNhcHR1cmUtZ3JvdXAgICAgICg/Oi4uLikgICDpnZ7mjZXojrfnu4Rcblx0ICAgICAgICBwb3NpdGl2ZS1sb29rYWhlYWQgICAgKD89cCkgICAgIOmbtuWuveato+WQkeWFiOihjOaWreiogFxuXHQgICAgICAgIG5lZ2F0aXZlLWxvb2thaGVhZCAgICAoPyFwKSAgICAg6Zu25a696LSf5ZCR5YWI6KGM5pat6KiAXG5cdCAgICAgICAgcXVhbnRpZmllZCAgICAgICAgICAgIGEqICAgICAgICDph43lpI3oioLngrlcblx0ICAgICAgICBxdWFudGlmaWVyICAgICAgICAgICAgKiAgICAgICAgIOmHj+ivjVxuXHQgICAgICAgIGNoYXJzZXQgICAgICAgICAgICAgICBbXSAgICAgICAg5a2X56ym6ZuGXG5cdCAgICAgICAgcmFuZ2UgICAgICAgICAgICAgICAgIHttLCBufSAgICDojIPlm7Rcblx0ICAgICAgICBsaXRlcmFsICAgICAgICAgICAgICAgYSAgICAgICAgIOebtOaOpemHj+Wtl+esplxuXHQgICAgICAgIHVuaWNvZGUgICAgICAgICAgICAgICBcXHV4eHh4ICAgIFVuaWNvZGVcblx0ICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgXFx4ICAgICAgICDljYHlha3ov5vliLZcblx0ICAgICAgICBvY3RhbCAgICAgICAgICAgICAgICAg5YWr6L+b5Yi2XG5cdCAgICAgICAgYmFjay1yZWZlcmVuY2UgICAgICAgIFxcbiAgICAgICAg5Y+N5ZCR5byV55SoXG5cdCAgICAgICAgY29udHJvbC1jaGFyYWN0ZXIgICAgIFxcY1ggICAgICAg5o6n5Yi25a2X56ymXG5cblx0ICAgICAgICAvLyBUb2tlblxuXHQgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICAgXiAgICAgICDlvIDlpLRcblx0ICAgICAgICBlbmQgICAgICAgICAgICAgICAgICQgICAgICAg57uT5bC+XG5cdCAgICAgICAgYW55LWNoYXJhY3RlciAgICAgICAuICAgICAgIOS7u+aEj+Wtl+esplxuXHQgICAgICAgIGJhY2tzcGFjZSAgICAgICAgICAgW1xcYl0gICAg6YCA5qC855u05o6l6YePXG5cdCAgICAgICAgd29yZC1ib3VuZGFyeSAgICAgICBcXGIgICAgICDljZXor43ovrnnlYxcblx0ICAgICAgICBub24td29yZC1ib3VuZGFyeSAgIFxcQiAgICAgIOmdnuWNleivjei+ueeVjFxuXHQgICAgICAgIGRpZ2l0ICAgICAgICAgICAgICAgXFxkICAgICAgQVNDSUkg5pWw5a2X77yMWzAtOV1cblx0ICAgICAgICBub24tZGlnaXQgICAgICAgICAgIFxcRCAgICAgIOmdniBBU0NJSSDmlbDlrZfvvIxbXjAtOV1cblx0ICAgICAgICBmb3JtLWZlZWQgICAgICAgICAgIFxcZiAgICAgIOaNoumhteesplxuXHQgICAgICAgIGxpbmUtZmVlZCAgICAgICAgICAgXFxuICAgICAg5o2i6KGM56ymXG5cdCAgICAgICAgY2FycmlhZ2UtcmV0dXJuICAgICBcXHIgICAgICDlm57ovabnrKZcblx0ICAgICAgICB3aGl0ZS1zcGFjZSAgICAgICAgIFxccyAgICAgIOepuueZveesplxuXHQgICAgICAgIG5vbi13aGl0ZS1zcGFjZSAgICAgXFxTICAgICAg6Z2e56m655m956ymXG5cdCAgICAgICAgdGFiICAgICAgICAgICAgICAgICBcXHQgICAgICDliLbooajnrKZcblx0ICAgICAgICB2ZXJ0aWNhbC10YWIgICAgICAgIFxcdiAgICAgIOWeguebtOWItuihqOesplxuXHQgICAgICAgIHdvcmQgICAgICAgICAgICAgICAgXFx3ICAgICAgQVNDSUkg5a2X56ym77yMW2EtekEtWjAtOV1cblx0ICAgICAgICBub24td29yZCAgICAgICAgICAgIFxcVyAgICAgIOmdniBBU0NJSSDlrZfnrKbvvIxbXmEtekEtWjAtOV1cblx0ICAgICAgICBudWxsLWNoYXJhY3RlciAgICAgIFxcbyAgICAgIE5VTCDlrZfnrKZcblx0ICovXG5cblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cdCAgICAvKlxuXHQgICAgICAgIFxuXHQgICAgKi9cblx0dmFyIEhhbmRsZXIgPSB7XG5cdCAgICBleHRlbmQ6IFV0aWwuZXh0ZW5kXG5cdH1cblxuXHQvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FTQ0lJI0FTQ0lJX3ByaW50YWJsZV9jb2RlX2NoYXJ0XG5cdC8qdmFyIEFTQ0lJX0NPTlRST0xfQ09ERV9DSEFSVCA9IHtcblx0ICAgICdAJzogWydcXHUwMDAwJ10sXG5cdCAgICBBOiBbJ1xcdTAwMDEnXSxcblx0ICAgIEI6IFsnXFx1MDAwMiddLFxuXHQgICAgQzogWydcXHUwMDAzJ10sXG5cdCAgICBEOiBbJ1xcdTAwMDQnXSxcblx0ICAgIEU6IFsnXFx1MDAwNSddLFxuXHQgICAgRjogWydcXHUwMDA2J10sXG5cdCAgICBHOiBbJ1xcdTAwMDcnLCAnXFxhJ10sXG5cdCAgICBIOiBbJ1xcdTAwMDgnLCAnXFxiJ10sXG5cdCAgICBJOiBbJ1xcdTAwMDknLCAnXFx0J10sXG5cdCAgICBKOiBbJ1xcdTAwMEEnLCAnXFxuJ10sXG5cdCAgICBLOiBbJ1xcdTAwMEInLCAnXFx2J10sXG5cdCAgICBMOiBbJ1xcdTAwMEMnLCAnXFxmJ10sXG5cdCAgICBNOiBbJ1xcdTAwMEQnLCAnXFxyJ10sXG5cdCAgICBOOiBbJ1xcdTAwMEUnXSxcblx0ICAgIE86IFsnXFx1MDAwRiddLFxuXHQgICAgUDogWydcXHUwMDEwJ10sXG5cdCAgICBROiBbJ1xcdTAwMTEnXSxcblx0ICAgIFI6IFsnXFx1MDAxMiddLFxuXHQgICAgUzogWydcXHUwMDEzJ10sXG5cdCAgICBUOiBbJ1xcdTAwMTQnXSxcblx0ICAgIFU6IFsnXFx1MDAxNSddLFxuXHQgICAgVjogWydcXHUwMDE2J10sXG5cdCAgICBXOiBbJ1xcdTAwMTcnXSxcblx0ICAgIFg6IFsnXFx1MDAxOCddLFxuXHQgICAgWTogWydcXHUwMDE5J10sXG5cdCAgICBaOiBbJ1xcdTAwMUEnXSxcblx0ICAgICdbJzogWydcXHUwMDFCJywgJ1xcZSddLFxuXHQgICAgJ1xcXFwnOiBbJ1xcdTAwMUMnXSxcblx0ICAgICddJzogWydcXHUwMDFEJ10sXG5cdCAgICAnXic6IFsnXFx1MDAxRSddLFxuXHQgICAgJ18nOiBbJ1xcdTAwMUYnXVxuXHR9Ki9cblxuXHQvLyBBU0NJSSBwcmludGFibGUgY29kZSBjaGFydFxuXHQvLyB2YXIgTE9XRVIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cdC8vIHZhciBVUFBFUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidcblx0Ly8gdmFyIE5VTUJFUiA9ICcwMTIzNDU2Nzg5J1xuXHQvLyB2YXIgU1lNQk9MID0gJyAhXCIjJCUmXFwnKCkqKywtLi8nICsgJzo7PD0+P0AnICsgJ1tcXFxcXV5fYCcgKyAne3x9fidcblx0dmFyIExPV0VSID0gYXNjaWkoOTcsIDEyMilcblx0dmFyIFVQUEVSID0gYXNjaWkoNjUsIDkwKVxuXHR2YXIgTlVNQkVSID0gYXNjaWkoNDgsIDU3KVxuXHR2YXIgT1RIRVIgPSBhc2NpaSgzMiwgNDcpICsgYXNjaWkoNTgsIDY0KSArIGFzY2lpKDkxLCA5NikgKyBhc2NpaSgxMjMsIDEyNikgLy8g5o6S6ZmkIDk1IF8gYXNjaWkoOTEsIDk0KSArIGFzY2lpKDk2LCA5Nilcblx0dmFyIFBSSU5UQUJMRSA9IGFzY2lpKDMyLCAxMjYpXG5cdHZhciBTUEFDRSA9ICcgXFxmXFxuXFxyXFx0XFx2XFx1MDBBMFxcdTIwMjhcXHUyMDI5J1xuXHR2YXIgQ0hBUkFDVEVSX0NMQVNTRVMgPSB7XG5cdCAgICAnXFxcXHcnOiBMT1dFUiArIFVQUEVSICsgTlVNQkVSICsgJ18nLCAvLyBhc2NpaSg5NSwgOTUpXG5cdCAgICAnXFxcXFcnOiBPVEhFUi5yZXBsYWNlKCdfJywgJycpLFxuXHQgICAgJ1xcXFxzJzogU1BBQ0UsXG5cdCAgICAnXFxcXFMnOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gUFJJTlRBQkxFXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBTUEFDRS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShTUEFDRVtpXSwgJycpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0oKSxcblx0ICAgICdcXFxcZCc6IE5VTUJFUixcblx0ICAgICdcXFxcRCc6IExPV0VSICsgVVBQRVIgKyBPVEhFUlxuXHR9XG5cblx0ZnVuY3Rpb24gYXNjaWkoZnJvbSwgdG8pIHtcblx0ICAgIHZhciByZXN1bHQgPSAnJ1xuXHQgICAgZm9yICh2YXIgaSA9IGZyb207IGkgPD0gdG87IGkrKykge1xuXHQgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyB2YXIgYXN0ID0gUmVnRXhwUGFyc2VyLnBhcnNlKHJlZ2V4cC5zb3VyY2UpXG5cdEhhbmRsZXIuZ2VuID0gZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgY2FjaGUgPSBjYWNoZSB8fCB7XG5cdCAgICAgICAgZ3VpZDogMVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIEhhbmRsZXJbbm9kZS50eXBlXSA/IEhhbmRsZXJbbm9kZS50eXBlXShub2RlLCByZXN1bHQsIGNhY2hlKSA6XG5cdCAgICAgICAgSGFuZGxlci50b2tlbihub2RlLCByZXN1bHQsIGNhY2hlKVxuXHR9XG5cblx0SGFuZGxlci5leHRlbmQoe1xuXHQgICAgLyoganNoaW50IHVudXNlZDpmYWxzZSAqL1xuXHQgICAgdG9rZW46IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICdzdGFydCc6XG5cdCAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gJydcblx0ICAgICAgICAgICAgY2FzZSAnYW55LWNoYXJhY3Rlcic6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLmNoYXJhY3RlcigpXG5cdCAgICAgICAgICAgIGNhc2UgJ2JhY2tzcGFjZSc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gJydcblx0ICAgICAgICAgICAgY2FzZSAnd29yZC1ib3VuZGFyeSc6IC8vIFRPRE9cblx0ICAgICAgICAgICAgICAgIHJldHVybiAnJ1xuXHQgICAgICAgICAgICBjYXNlICdub24td29yZC1ib3VuZGFyeSc6IC8vIFRPRE9cblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ2RpZ2l0Jzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBOVU1CRVIuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ25vbi1kaWdpdCc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soXG5cdCAgICAgICAgICAgICAgICAgICAgKExPV0VSICsgVVBQRVIgKyBPVEhFUikuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ2Zvcm0tZmVlZCc6XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICdsaW5lLWZlZWQnOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keSB8fCBub2RlLnRleHRcblx0ICAgICAgICAgICAgY2FzZSAnY2FycmlhZ2UtcmV0dXJuJzpcblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ3doaXRlLXNwYWNlJzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBTUEFDRS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbm9uLXdoaXRlLXNwYWNlJzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICAoTE9XRVIgKyBVUFBFUiArIE5VTUJFUikuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ3RhYic6XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbC10YWInOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAnd29yZCc6IC8vIFxcdyBbYS16QS1aMC05XVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmRvbS5waWNrKFxuXHQgICAgICAgICAgICAgICAgICAgIChMT1dFUiArIFVQUEVSICsgTlVNQkVSKS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbm9uLXdvcmQnOiAvLyBcXFcgW15hLXpBLVowLTldXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soXG5cdCAgICAgICAgICAgICAgICAgICAgT1RIRVIucmVwbGFjZSgnXycsICcnKS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbnVsbC1jaGFyYWN0ZXInOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG5vZGUuYm9keSB8fCBub2RlLnRleHRcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgdHlwZTogJ2FsdGVybmF0ZScsXG5cdCAgICAgICAgICAgIG9mZnNldDogMCxcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGxlZnQ6IHtcblx0ICAgICAgICAgICAgICAgIGJveWQ6IFtdXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIHJpZ2h0OiB7XG5cdCAgICAgICAgICAgICAgICBib3lkOiBbXVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIGFsdGVybmF0ZTogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUubGVmdC9yaWdodCB7fVxuXHQgICAgICAgIHJldHVybiB0aGlzLmdlbihcblx0ICAgICAgICAgICAgUmFuZG9tLmJvb2xlYW4oKSA/IG5vZGUubGVmdCA6IG5vZGUucmlnaHQsXG5cdCAgICAgICAgICAgIHJlc3VsdCxcblx0ICAgICAgICAgICAgY2FjaGVcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLypcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIHR5cGU6ICdtYXRjaCcsXG5cdCAgICAgICAgICAgIG9mZnNldDogMCxcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGJvZHk6IFtdXG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIG1hdGNoOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgcmVzdWx0ID0gJydcblx0ICAgICAgICAgICAgLy8gbm9kZS5ib2R5IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmJvZHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZ2VuKG5vZGUuYm9keVtpXSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8vICgpXG5cdCAgICAnY2FwdHVyZS1ncm91cCc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICAvLyBub2RlLmJvZHkge31cblx0ICAgICAgICByZXN1bHQgPSB0aGlzLmdlbihub2RlLmJvZHksIHJlc3VsdCwgY2FjaGUpXG5cdCAgICAgICAgY2FjaGVbY2FjaGUuZ3VpZCsrXSA9IHJlc3VsdFxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICAvLyAoPzouLi4pXG5cdCAgICAnbm9uLWNhcHR1cmUtZ3JvdXAnOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgLy8gbm9kZS5ib2R5IHt9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2VuKG5vZGUuYm9keSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgIH0sXG5cdCAgICAvLyAoPz1wKVxuXHQgICAgJ3Bvc2l0aXZlLWxvb2thaGVhZCc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICAvLyBub2RlLmJvZHlcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZW4obm9kZS5ib2R5LCByZXN1bHQsIGNhY2hlKVxuXHQgICAgfSxcblx0ICAgIC8vICg/IXApXG5cdCAgICAnbmVnYXRpdmUtbG9va2FoZWFkJzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUuYm9keVxuXHQgICAgICAgIHJldHVybiAnJ1xuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICB0eXBlOiAncXVhbnRpZmllZCcsXG5cdCAgICAgICAgICAgIG9mZnNldDogMyxcblx0ICAgICAgICAgICAgdGV4dDogJ2MqJyxcblx0ICAgICAgICAgICAgYm9keToge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0OiAzLFxuXHQgICAgICAgICAgICAgICAgdGV4dDogJ2MnLFxuXHQgICAgICAgICAgICAgICAgYm9keTogJ2MnLFxuXHQgICAgICAgICAgICAgICAgZXNjYXBlZDogZmFsc2Vcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgcXVhbnRpZmllcjoge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogJ3F1YW50aWZpZXInLFxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0OiA0LFxuXHQgICAgICAgICAgICAgICAgdGV4dDogJyonLFxuXHQgICAgICAgICAgICAgICAgbWluOiAwLFxuXHQgICAgICAgICAgICAgICAgbWF4OiBJbmZpbml0eSxcblx0ICAgICAgICAgICAgICAgIGdyZWVkeTogdHJ1ZVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIHF1YW50aWZpZWQ6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXN1bHQgPSAnJ1xuXHQgICAgICAgICAgICAvLyBub2RlLnF1YW50aWZpZXIge31cblx0ICAgICAgICB2YXIgY291bnQgPSB0aGlzLnF1YW50aWZpZXIobm9kZS5xdWFudGlmaWVyKTtcblx0ICAgICAgICAvLyBub2RlLmJvZHkge31cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZ2VuKG5vZGUuYm9keSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgcXVhbnRpZmllcjoge1xuXHQgICAgICAgICAgICB0eXBlOiAncXVhbnRpZmllcicsXG5cdCAgICAgICAgICAgIG9mZnNldDogNCxcblx0ICAgICAgICAgICAgdGV4dDogJyonLFxuXHQgICAgICAgICAgICBtaW46IDAsXG5cdCAgICAgICAgICAgIG1heDogSW5maW5pdHksXG5cdCAgICAgICAgICAgIGdyZWVkeTogdHJ1ZVxuXHQgICAgICAgIH1cblx0ICAgICovXG5cdCAgICBxdWFudGlmaWVyOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgdmFyIG1pbiA9IE1hdGgubWF4KG5vZGUubWluLCAwKVxuXHQgICAgICAgIHZhciBtYXggPSBpc0Zpbml0ZShub2RlLm1heCkgPyBub2RlLm1heCA6XG5cdCAgICAgICAgICAgIG1pbiArIFJhbmRvbS5pbnRlZ2VyKDMsIDcpXG5cdCAgICAgICAgcmV0dXJuIFJhbmRvbS5pbnRlZ2VyKG1pbiwgbWF4KVxuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgXG5cdCAgICAqL1xuXHQgICAgY2hhcnNldDogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUuaW52ZXJ0XG5cdCAgICAgICAgaWYgKG5vZGUuaW52ZXJ0KSByZXR1cm4gdGhpc1snaW52ZXJ0LWNoYXJzZXQnXShub2RlLCByZXN1bHQsIGNhY2hlKVxuXG5cdCAgICAgICAgLy8gbm9kZS5ib2R5IFtdXG5cdCAgICAgICAgdmFyIGxpdGVyYWwgPSBSYW5kb20ucGljayhub2RlLmJvZHkpXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2VuKGxpdGVyYWwsIHJlc3VsdCwgY2FjaGUpXG5cdCAgICB9LFxuXHQgICAgJ2ludmVydC1jaGFyc2V0JzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIHZhciBwb29sID0gUFJJTlRBQkxFXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDAsIGl0ZW07IGkgPCBub2RlLmJvZHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlbSA9IG5vZGUuYm9keVtpXVxuXHQgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XG5cdCAgICAgICAgICAgICAgICAgICAgcG9vbCA9IHBvb2wucmVwbGFjZShpdGVtLmJvZHksICcnKVxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuZ2VuKGl0ZW0uc3RhcnQsIHJlc3VsdCwgY2FjaGUpLmNoYXJDb2RlQXQoKVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLmdlbihpdGVtLmVuZCwgcmVzdWx0LCBjYWNoZSkuY2hhckNvZGVBdCgpXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSBtaW47IGlpIDw9IG1heDsgaWkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwb29sID0gcG9vbC5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoaWkpLCAnJylcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVycyA9IENIQVJBQ1RFUl9DTEFTU0VTW2l0ZW0udGV4dF1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaWkgPSAwOyBpaWkgPD0gY2hhcmFjdGVycy5sZW5ndGg7IGlpaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sID0gcG9vbC5yZXBsYWNlKGNoYXJhY3RlcnNbaWlpXSwgJycpXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFJhbmRvbS5waWNrKHBvb2wuc3BsaXQoJycpKVxuXHQgICAgfSxcblx0ICAgIHJhbmdlOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgLy8gbm9kZS5zdGFydCwgbm9kZS5lbmRcblx0ICAgICAgICB2YXIgbWluID0gdGhpcy5nZW4obm9kZS5zdGFydCwgcmVzdWx0LCBjYWNoZSkuY2hhckNvZGVBdCgpXG5cdCAgICAgICAgdmFyIG1heCA9IHRoaXMuZ2VuKG5vZGUuZW5kLCByZXN1bHQsIGNhY2hlKS5jaGFyQ29kZUF0KClcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgUmFuZG9tLmludGVnZXIobWluLCBtYXgpXG5cdCAgICAgICAgKVxuXHQgICAgfSxcblx0ICAgIGxpdGVyYWw6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gbm9kZS5lc2NhcGVkID8gbm9kZS5ib2R5IDogbm9kZS50ZXh0XG5cdCAgICB9LFxuXHQgICAgLy8gVW5pY29kZSBcXHVcblx0ICAgIHVuaWNvZGU6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCAxNilcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g5Y2B5YWt6L+b5Yi2IFxceEZGXG5cdCAgICBoZXg6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCAxNilcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g5YWr6L+b5Yi2IFxcMFxuXHQgICAgb2N0YWw6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCA4KVxuXHQgICAgICAgIClcblx0ICAgIH0sXG5cdCAgICAvLyDlj43lkJHlvJXnlKhcblx0ICAgICdiYWNrLXJlZmVyZW5jZSc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gY2FjaGVbbm9kZS5jb2RlXSB8fCAnJ1xuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DMF9hbmRfQzFfY29udHJvbF9jb2Rlc1xuXHQgICAgKi9cblx0ICAgIENPTlRST0xfQ0hBUkFDVEVSX01BUDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIENPTlRST0xfQ0hBUkFDVEVSID0gJ0AgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIFsgXFxcXCBdIF4gXycuc3BsaXQoJyAnKVxuXHQgICAgICAgIHZhciBDT05UUk9MX0NIQVJBQ1RFUl9VTklDT0RFID0gJ1xcdTAwMDAgXFx1MDAwMSBcXHUwMDAyIFxcdTAwMDMgXFx1MDAwNCBcXHUwMDA1IFxcdTAwMDYgXFx1MDAwNyBcXHUwMDA4IFxcdTAwMDkgXFx1MDAwQSBcXHUwMDBCIFxcdTAwMEMgXFx1MDAwRCBcXHUwMDBFIFxcdTAwMEYgXFx1MDAxMCBcXHUwMDExIFxcdTAwMTIgXFx1MDAxMyBcXHUwMDE0IFxcdTAwMTUgXFx1MDAxNiBcXHUwMDE3IFxcdTAwMTggXFx1MDAxOSBcXHUwMDFBIFxcdTAwMUIgXFx1MDAxQyBcXHUwMDFEIFxcdTAwMUUgXFx1MDAxRicuc3BsaXQoJyAnKVxuXHQgICAgICAgIHZhciBtYXAgPSB7fVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ09OVFJPTF9DSEFSQUNURVIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgbWFwW0NPTlRST0xfQ0hBUkFDVEVSW2ldXSA9IENPTlRST0xfQ0hBUkFDVEVSX1VOSUNPREVbaV1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1hcFxuXHQgICAgfSgpLFxuXHQgICAgJ2NvbnRyb2wtY2hhcmFjdGVyJzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkNPTlRST0xfQ0hBUkFDVEVSX01BUFtub2RlLmNvZGVdXG5cdCAgICB9XG5cdH0pXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBIYW5kbGVyXG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpXG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgdG9KU09OU2NoZW1hXG5cblx0ICAgIOaKiiBNb2NrLmpzIOmjjuagvOeahOaVsOaNruaooeadv+i9rOaNouaIkCBKU09OIFNjaGVtYeOAglxuXG5cdCAgICA+IFtKU09OIFNjaGVtYV0oaHR0cDovL2pzb24tc2NoZW1hLm9yZy8pXG5cdCAqL1xuXHR2YXIgQ29uc3RhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG5cdHZhciBVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuXHR2YXIgUGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVxuXG5cdGZ1bmN0aW9uIHRvSlNPTlNjaGVtYSh0ZW1wbGF0ZSwgbmFtZSwgcGF0aCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0ICAgIC8vIHR5cGUgcnVsZSBwcm9wZXJ0aWVzIGl0ZW1zXG5cdCAgICBwYXRoID0gcGF0aCB8fCBbXVxuXHQgICAgdmFyIHJlc3VsdCA9IHtcblx0ICAgICAgICBuYW1lOiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBuYW1lLnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKSA6IG5hbWUsXG5cdCAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICAgIHR5cGU6IFV0aWwudHlwZSh0ZW1wbGF0ZSksIC8vIOWPr+iDveS4jeWHhuehru+8jOS+i+WmgiB7ICduYW1lfDEnOiBbe30sIHt9IC4uLl0gfVxuXHQgICAgICAgIHJ1bGU6IFBhcnNlci5wYXJzZShuYW1lKVxuXHQgICAgfVxuXHQgICAgcmVzdWx0LnBhdGggPSBwYXRoLnNsaWNlKDApXG5cdCAgICByZXN1bHQucGF0aC5wdXNoKG5hbWUgPT09IHVuZGVmaW5lZCA/ICdST09UJyA6IHJlc3VsdC5uYW1lKVxuXG5cdCAgICBzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG5cdCAgICAgICAgY2FzZSAnYXJyYXknOlxuXHQgICAgICAgICAgICByZXN1bHQuaXRlbXMgPSBbXVxuXHQgICAgICAgICAgICBVdGlsLmVhY2godGVtcGxhdGUsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuXHQgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZW1zLnB1c2goXG5cdCAgICAgICAgICAgICAgICAgICAgdG9KU09OU2NoZW1hKHZhbHVlLCBpbmRleCwgcmVzdWx0LnBhdGgpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgY2FzZSAnb2JqZWN0Jzpcblx0ICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMgPSBbXVxuXHQgICAgICAgICAgICBVdGlsLmVhY2godGVtcGxhdGUsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5wdXNoKFxuXHQgICAgICAgICAgICAgICAgICAgIHRvSlNPTlNjaGVtYSh2YWx1ZSwgbmFtZSwgcmVzdWx0LnBhdGgpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIGJyZWFrXG5cdCAgICB9XG5cblx0ICAgIHJldHVybiByZXN1bHRcblxuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB0b0pTT05TY2hlbWFcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KVxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIHZhbGlkKHRlbXBsYXRlLCBkYXRhKVxuXG5cdCAgICDmoKHpqoznnJ/lrp7mlbDmja4gZGF0YSDmmK/lkKbkuI7mlbDmja7mqKHmnb8gdGVtcGxhdGUg5Yy56YWN44CCXG5cdCAgICBcblx0ICAgIOWunueOsOaAnei3r++8mlxuXHQgICAgMS4g6Kej5p6Q6KeE5YiZ44CCXG5cdCAgICAgICAg5YWI5oqK5pWw5o2u5qih5p2/IHRlbXBsYXRlIOino+aekOS4uuabtOaWueS+v+acuuWZqOino+aekOeahCBKU09OLVNjaGFtZVxuXHQgICAgICAgIG5hbWUgICAgICAgICAgICAgICDlsZ7mgKflkI0gXG5cdCAgICAgICAgdHlwZSAgICAgICAgICAgICAgIOWxnuaAp+WAvOexu+Wei1xuXHQgICAgICAgIHRlbXBsYXRlICAgICAgICAgICDlsZ7mgKflgLzmqKHmnb9cblx0ICAgICAgICBwcm9wZXJ0aWVzICAgICAgICAg5a+56LGh5bGe5oCn5pWw57uEXG5cdCAgICAgICAgaXRlbXMgICAgICAgICAgICAgIOaVsOe7hOWFg+e0oOaVsOe7hFxuXHQgICAgICAgIHJ1bGUgICAgICAgICAgICAgICDlsZ7mgKflgLznlJ/miJDop4TliJlcblx0ICAgIDIuIOmAkuW9kumqjOivgeinhOWImeOAglxuXHQgICAgICAgIOeEtuWQjueUqCBKU09OLVNjaGVtYSDmoKHpqoznnJ/lrp7mlbDmja7vvIzmoKHpqozpobnljIXmi6zlsZ7mgKflkI3jgIHlgLznsbvlnovjgIHlgLzjgIHlgLznlJ/miJDop4TliJnjgIJcblxuXHQgICAg5o+Q56S65L+h5oGvIFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZnZS9qc29uLXNjaGVtYS12YWxpZGF0b3IvYmxvYi9tYXN0ZXIvc3JjL21haW4vcmVzb3VyY2VzL2NvbS9naXRodWIvZmdlL2pzb25zY2hlbWEvdmFsaWRhdG9yL3ZhbGlkYXRpb24ucHJvcGVydGllc1xuXHQgICAgW0pTT04tU2NoYW1hIHZhbGlkYXRvcl0oaHR0cDovL2pzb24tc2NoZW1hLXZhbGlkYXRvci5oZXJva3VhcHAuY29tLylcblx0ICAgIFtSZWdleHAgRGVtb10oaHR0cDovL2RlbW9zLmZvcmJlc2xpbmRlc2F5LmNvLnVrL3JlZ2V4cC8pXG5cdCovXG5cdHZhciBDb25zdGFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMilcblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciB0b0pTT05TY2hlbWEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXG5cdGZ1bmN0aW9uIHZhbGlkKHRlbXBsYXRlLCBkYXRhKSB7XG5cdCAgICB2YXIgc2NoZW1hID0gdG9KU09OU2NoZW1hKHRlbXBsYXRlKVxuXHQgICAgdmFyIHJlc3VsdCA9IERpZmYuZGlmZihzY2hlbWEsIGRhdGEpXG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgIC8vIGNvbnNvbGUubG9nKHRlbXBsYXRlLCBkYXRhKVxuXHQgICAgICAgIC8vIGNvbnNvbGUud2FybihBc3NlcnQubWVzc2FnZShyZXN1bHRbaV0pKVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0Lypcblx0ICAgICMjIG5hbWVcblx0ICAgICAgICDmnInnlJ/miJDop4TliJnvvJrmr5TovoPop6PmnpDlkI7nmoQgbmFtZVxuXHQgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muebtOaOpeavlOi+g1xuXHQgICAgIyMgdHlwZVxuXHQgICAgICAgIOaXoOexu+Wei+i9rOaNou+8muebtOaOpeavlOi+g1xuXHQgICAgICAgIOacieexu+Wei+i9rOaNou+8muWFiOivleedgOino+aekCB0ZW1wbGF0Ze+8jOeEtuWQjuWGjeajgOafpe+8n1xuXHQgICAgIyMgdmFsdWUgdnMuIHRlbXBsYXRlXG5cdCAgICAgICAg5Z+65pys57G75Z6LXG5cdCAgICAgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muebtOaOpeavlOi+g1xuXHQgICAgICAgICAgICDmnInnlJ/miJDop4TliJnvvJpcblx0ICAgICAgICAgICAgICAgIG51bWJlclxuXHQgICAgICAgICAgICAgICAgICAgIG1pbi1tYXguZG1pbi1kbWF4XG5cdCAgICAgICAgICAgICAgICAgICAgbWluLW1heC5kY291bnRcblx0ICAgICAgICAgICAgICAgICAgICBjb3VudC5kbWluLWRtYXhcblx0ICAgICAgICAgICAgICAgICAgICBjb3VudC5kY291bnRcblx0ICAgICAgICAgICAgICAgICAgICArc3RlcFxuXHQgICAgICAgICAgICAgICAgICAgIOaVtOaVsOmDqOWIhlxuXHQgICAgICAgICAgICAgICAgICAgIOWwj+aVsOmDqOWIhlxuXHQgICAgICAgICAgICAgICAgYm9vbGVhbiBcblx0ICAgICAgICAgICAgICAgIHN0cmluZyAgXG5cdCAgICAgICAgICAgICAgICAgICAgbWluLW1heFxuXHQgICAgICAgICAgICAgICAgICAgIGNvdW50XG5cdCAgICAjIyBwcm9wZXJ0aWVzXG5cdCAgICAgICAg5a+56LGhXG5cdCAgICAgICAgICAgIOacieeUn+aIkOinhOWIme+8muajgOa1i+acn+acm+eahOWxnuaAp+S4quaVsO+8jOe7p+e7remAkuW9klxuXHQgICAgICAgICAgICDml6DnlJ/miJDop4TliJnvvJrmo4DmtYvlhajpg6jnmoTlsZ7mgKfkuKrmlbDvvIznu6fnu63pgJLlvZJcblx0ICAgICMjIGl0ZW1zXG5cdCAgICAgICAg5pWw57uEXG5cdCAgICAgICAgICAgIOacieeUn+aIkOinhOWIme+8mlxuXHQgICAgICAgICAgICAgICAgYCduYW1lfDEnOiBbe30sIHt9IC4uLl1gICAgICAgICAgICAg5YW25Lit5LmL5LiA77yM57un57ut6YCS5b2SXG5cdCAgICAgICAgICAgICAgICBgJ25hbWV8KzEnOiBbe30sIHt9IC4uLl1gICAgICAgICAgICDpobrluo/mo4DmtYvvvIznu6fnu63pgJLlvZJcblx0ICAgICAgICAgICAgICAgIGAnbmFtZXxtaW4tbWF4JzogW3t9LCB7fSAuLi5dYCAgICAgIOajgOa1i+S4quaVsO+8jOe7p+e7remAkuW9klxuXHQgICAgICAgICAgICAgICAgYCduYW1lfGNvdW50JzogW3t9LCB7fSAuLi5dYCAgICAgICAg5qOA5rWL5Liq5pWw77yM57un57ut6YCS5b2SXG5cdCAgICAgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muajgOa1i+WFqOmDqOeahOWFg+e0oOS4quaVsO+8jOe7p+e7remAkuW9klxuXHQqL1xuXHR2YXIgRGlmZiA9IHtcblx0ICAgIGRpZmY6IGZ1bmN0aW9uIGRpZmYoc2NoZW1hLCBkYXRhLCBuYW1lIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXG5cdCAgICAgICAgLy8g5YWI5qOA5rWL5ZCN56ewIG5hbWUg5ZKM57G75Z6LIHR5cGXvvIzlpoLmnpzljLnphY3vvIzmiY3mnInlv4XopoHnu6fnu63mo4DmtYtcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIHRoaXMubmFtZShzY2hlbWEsIGRhdGEsIG5hbWUsIHJlc3VsdCkgJiZcblx0ICAgICAgICAgICAgdGhpcy50eXBlKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KVxuXHQgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMoc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpXG5cdCAgICAgICAgICAgIHRoaXMuaXRlbXMoc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8qIGpzaGludCB1bnVzZWQ6ZmFsc2UgKi9cblx0ICAgIG5hbWU6IGZ1bmN0aW9uKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KSB7XG5cdCAgICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGhcblxuXHQgICAgICAgIEFzc2VydC5lcXVhbCgnbmFtZScsIHNjaGVtYS5wYXRoLCBuYW1lICsgJycsIHNjaGVtYS5uYW1lICsgJycsIHJlc3VsdClcblxuXHQgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgIH0sXG5cdCAgICB0eXBlOiBmdW5jdGlvbihzY2hlbWEsIGRhdGEsIG5hbWUsIHJlc3VsdCkge1xuXHQgICAgICAgIHZhciBsZW5ndGggPSByZXN1bHQubGVuZ3RoXG5cblx0ICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cdCAgICAgICAgICAgICAgICAvLyDot7Pov4flkKvmnInjgI7ljaDkvY3nrKbjgI/nmoTlsZ7mgKflgLzvvIzlm6DkuLrjgI7ljaDkvY3nrKbjgI/ov5Tlm57lgLznmoTnsbvlnovlj6/og73lkozmqKHmnb/kuI3kuIDoh7TvvIzkvovlpoIgJ0BpbnQnIOS8mui/lOWbnuS4gOS4quaVtOW9ouWAvFxuXHQgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS50ZW1wbGF0ZS5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikpIHJldHVybiB0cnVlXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICdhcnJheSc6XG5cdCAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLnJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIG5hbWV8Y291bnQ6IGFycmF5XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5ydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYS5ydWxlLm1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOi3s+i/hyBuYW1lfDE6IGFycmF577yM5Zug5Li65pyA57uI5YC855qE57G75Z6L77yI5b6I5Y+v6IO977yJ5LiN5piv5pWw57uE77yM5Lmf5LiN5LiA5a6a5LiOIGBhcnJheWAg5Lit55qE57G75Z6L5LiA6Ie0XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEucnVsZS5jb3VudCA9PT0gMSkgcmV0dXJuIHRydWVcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLy8g6Lez6L+HIG5hbWV8K2luYzogYXJyYXlcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLnJ1bGUucGFyYW1ldGVyc1syXSkgcmV0dXJuIHRydWVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcblx0ICAgICAgICAgICAgICAgIC8vIOi3s+i/hyBgJ25hbWUnOiBmdW5jdGlvbmDvvIzlm6DkuLrlh73mlbDlj6/ku6Xov5Tlm57ku7vkvZXnsbvlnovnmoTlgLzjgIJcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgQXNzZXJ0LmVxdWFsKCd0eXBlJywgc2NoZW1hLnBhdGgsIFV0aWwudHlwZShkYXRhKSwgc2NoZW1hLnR5cGUsIHJlc3VsdClcblxuXHQgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24oc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpIHtcblx0ICAgICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aFxuXG5cdCAgICAgICAgdmFyIHJ1bGUgPSBzY2hlbWEucnVsZVxuXHQgICAgICAgIHZhciB0ZW1wbGF0ZVR5cGUgPSBzY2hlbWEudHlwZVxuXHQgICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdvYmplY3QnIHx8IHRlbXBsYXRlVHlwZSA9PT0gJ2FycmF5JyB8fCB0ZW1wbGF0ZVR5cGUgPT09ICdmdW5jdGlvbicpIHJldHVybiB0cnVlXG5cblx0ICAgICAgICAvLyDml6DnlJ/miJDop4TliJlcblx0ICAgICAgICBpZiAoIXJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubWF0Y2goJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIGRhdGEsIHNjaGVtYS50ZW1wbGF0ZSwgcmVzdWx0KVxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cdCAgICAgICAgICAgICAgICAgICAgLy8g5ZCM5qC36Lez6L+H5ZCr5pyJ44CO5Y2g5L2N56ym44CP55qE5bGe5oCn5YC877yM5Zug5Li644CO5Y2g5L2N56ym44CP55qE6L+U5Zue5YC85Lya6YCa5bi45Lya5LiO5qih5p2/5LiN5LiA6Ie0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS50ZW1wbGF0ZS5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikpIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIEFzc2VydC5lcXVhbCgndmFsdWUnLCBzY2hlbWEucGF0aCwgZGF0YSwgc2NoZW1hLnRlbXBsYXRlLCByZXN1bHQpXG5cdCAgICAgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmnInnlJ/miJDop4TliJlcblx0ICAgICAgICB2YXIgYWN0dWFsUmVwZWF0Q291bnRcblx0ICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlVHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICdudW1iZXInOlxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gKGRhdGEgKyAnJykuc3BsaXQoJy4nKVxuXHQgICAgICAgICAgICAgICAgcGFydHNbMF0gPSArcGFydHNbMF1cblxuXHQgICAgICAgICAgICAgICAgLy8g5pW05pWw6YOo5YiGXG5cdCAgICAgICAgICAgICAgICAvLyB8bWluLW1heFxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIEFzc2VydC5ncmVhdGVyVGhhbk9yRXF1YWxUbygndmFsdWUnLCBzY2hlbWEucGF0aCwgcGFydHNbMF0sIE1hdGgubWluKHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gLCAnbnVtZXJpYyBpbnN0YW5jZSBpcyBsb3dlciB0aGFuIHRoZSByZXF1aXJlZCBtaW5pbXVtIChtaW5pbXVtOiB7ZXhwZWN0ZWR9LCBmb3VuZDoge2FjdHVhbH0pJylcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubGVzc1RoYW5PckVxdWFsVG8oJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzBdLCBNYXRoLm1heChydWxlLm1pbiwgcnVsZS5tYXgpLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzBdLCBydWxlLm1pbiwgcmVzdWx0LCAnW3ZhbHVlXSAnICsgbmFtZSlcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8g5bCP5pWw6YOo5YiGXG5cdCAgICAgICAgICAgICAgICBpZiAocnVsZS5kZWNpbWFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gfGRtaW4tZG1heFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmRtaW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLmRtYXggIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzFdLmxlbmd0aCwgcnVsZS5kbWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygndmFsdWUnLCBzY2hlbWEucGF0aCwgcGFydHNbMV0ubGVuZ3RoLCBydWxlLmRtYXgsIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gfGRjb3VudFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmRtaW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLmRtYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzFdLmxlbmd0aCwgcnVsZS5kbWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXG5cdCAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblxuXHQgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuXHQgICAgICAgICAgICAgICAgLy8gJ2FhYScubWF0Y2goL2EvZylcblx0ICAgICAgICAgICAgICAgIGFjdHVhbFJlcGVhdENvdW50ID0gZGF0YS5tYXRjaChuZXcgUmVnRXhwKHNjaGVtYS50ZW1wbGF0ZSwgJ2cnKSlcblx0ICAgICAgICAgICAgICAgIGFjdHVhbFJlcGVhdENvdW50ID0gYWN0dWFsUmVwZWF0Q291bnQgPyBhY3R1YWxSZXBlYXRDb3VudC5sZW5ndGggOiAwXG5cblx0ICAgICAgICAgICAgICAgIC8vIHxtaW4tbWF4XG5cdCAgICAgICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmdyZWF0ZXJUaGFuT3JFcXVhbFRvKCdyZXBlYXQgY291bnQnLCBzY2hlbWEucGF0aCwgYWN0dWFsUmVwZWF0Q291bnQsIHJ1bGUubWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgQXNzZXJ0Lmxlc3NUaGFuT3JFcXVhbFRvKCdyZXBlYXQgY291bnQnLCBzY2hlbWEucGF0aCwgYWN0dWFsUmVwZWF0Q291bnQsIHJ1bGUubWF4LCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5taW4sIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblxuXHQgICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuXHQgICAgICAgICAgICAgICAgYWN0dWFsUmVwZWF0Q291bnQgPSBkYXRhLm1hdGNoKG5ldyBSZWdFeHAoc2NoZW1hLnRlbXBsYXRlLnNvdXJjZS5yZXBsYWNlKC9eXFxefFxcJCQvZywgJycpLCAnZycpKVxuXHQgICAgICAgICAgICAgICAgYWN0dWFsUmVwZWF0Q291bnQgPSBhY3R1YWxSZXBlYXRDb3VudCA/IGFjdHVhbFJlcGVhdENvdW50Lmxlbmd0aCA6IDBcblxuXHQgICAgICAgICAgICAgICAgLy8gfG1pbi1tYXhcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5taW4sIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubGVzc1RoYW5PckVxdWFsVG8oJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5tYXgsIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vIHxjb3VudFxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIEFzc2VydC5lcXVhbCgncmVwZWF0IGNvdW50Jywgc2NoZW1hLnBhdGgsIGFjdHVhbFJlcGVhdENvdW50LCBydWxlLm1pbiwgcmVzdWx0KVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gbGVuZ3RoXG5cdCAgICB9LFxuXHQgICAgcHJvcGVydGllczogZnVuY3Rpb24oc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpIHtcblx0ICAgICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aFxuXG5cdCAgICAgICAgdmFyIHJ1bGUgPSBzY2hlbWEucnVsZVxuXHQgICAgICAgIHZhciBrZXlzID0gVXRpbC5rZXlzKGRhdGEpXG5cdCAgICAgICAgaWYgKCFzY2hlbWEucHJvcGVydGllcykgcmV0dXJuXG5cblx0ICAgICAgICAvLyDml6DnlJ/miJDop4TliJlcblx0ICAgICAgICBpZiAoIXNjaGVtYS5ydWxlLnBhcmFtZXRlcnMpIHtcblx0ICAgICAgICAgICAgQXNzZXJ0LmVxdWFsKCdwcm9wZXJ0aWVzIGxlbmd0aCcsIHNjaGVtYS5wYXRoLCBrZXlzLmxlbmd0aCwgc2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoLCByZXN1bHQpXG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8g5pyJ55Sf5oiQ6KeE5YiZXG5cdCAgICAgICAgICAgIC8vIHxtaW4tbWF4XG5cdCAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5ncmVhdGVyVGhhbk9yRXF1YWxUbygncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIE1hdGgubWluKHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIE1hdGgubWF4KHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gfDEsIHw+MVxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY291bnQgIT09IDEpIEFzc2VydC5lcXVhbCgncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIHJ1bGUubWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaC5hcHBseShcblx0ICAgICAgICAgICAgICAgIHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlmZihcblx0ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFV0aWwuZWFjaChzY2hlbWEucHJvcGVydGllcywgZnVuY3Rpb24oaXRlbSAvKiwgaW5kZXgqLyApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT09IGtleXNbaV0pIHByb3BlcnR5ID0gaXRlbVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkgfHwgc2NoZW1hLnByb3BlcnRpZXNbaV1cblx0ICAgICAgICAgICAgICAgICAgICB9KCksXG5cdCAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXlzW2ldXSxcblx0ICAgICAgICAgICAgICAgICAgICBrZXlzW2ldXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gbGVuZ3RoXG5cdCAgICB9LFxuXHQgICAgaXRlbXM6IGZ1bmN0aW9uKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KSB7XG5cdCAgICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGhcblxuXHQgICAgICAgIGlmICghc2NoZW1hLml0ZW1zKSByZXR1cm5cblxuXHQgICAgICAgIHZhciBydWxlID0gc2NoZW1hLnJ1bGVcblxuXHQgICAgICAgIC8vIOaXoOeUn+aIkOinhOWImVxuXHQgICAgICAgIGlmICghc2NoZW1hLnJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ2l0ZW1zIGxlbmd0aCcsIHNjaGVtYS5wYXRoLCBkYXRhLmxlbmd0aCwgc2NoZW1hLml0ZW1zLmxlbmd0aCwgcmVzdWx0KVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vIOacieeUn+aIkOinhOWImVxuXHQgICAgICAgICAgICAvLyB8bWluLW1heFxuXHQgICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ2l0ZW1zJywgc2NoZW1hLnBhdGgsIGRhdGEubGVuZ3RoLCAoTWF0aC5taW4ocnVsZS5taW4sIHJ1bGUubWF4KSAqIHNjaGVtYS5pdGVtcy5sZW5ndGgpLCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgJ1t7dXR5cGV9XSBhcnJheSBpcyB0b28gc2hvcnQ6IHtwYXRofSBtdXN0IGhhdmUgYXQgbGVhc3Qge2V4cGVjdGVkfSBlbGVtZW50cyBidXQgaW5zdGFuY2UgaGFzIHthY3R1YWx9IGVsZW1lbnRzJylcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygnaXRlbXMnLCBzY2hlbWEucGF0aCwgZGF0YS5sZW5ndGgsIChNYXRoLm1heChydWxlLm1pbiwgcnVsZS5tYXgpICogc2NoZW1hLml0ZW1zLmxlbmd0aCksIHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAnW3t1dHlwZX1dIGFycmF5IGlzIHRvbyBsb25nOiB7cGF0aH0gbXVzdCBoYXZlIGF0IG1vc3Qge2V4cGVjdGVkfSBlbGVtZW50cyBidXQgaW5zdGFuY2UgaGFzIHthY3R1YWx9IGVsZW1lbnRzJylcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gfDEsIHw+MVxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY291bnQgPT09IDEpIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgIGVsc2UgQXNzZXJ0LmVxdWFsKCdpdGVtcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwgZGF0YS5sZW5ndGgsIChydWxlLm1pbiAqIHNjaGVtYS5pdGVtcy5sZW5ndGgpLCByZXN1bHQpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gfCtpbmNcblx0ICAgICAgICAgICAgaWYgKHJ1bGUucGFyYW1ldGVyc1syXSkgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IGxlbmd0aFxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZVxuXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KFxuXHQgICAgICAgICAgICAgICAgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgdGhpcy5kaWZmKFxuXHQgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5pdGVtc1tpICUgc2NoZW1hLml0ZW1zLmxlbmd0aF0sXG5cdCAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSxcblx0ICAgICAgICAgICAgICAgICAgICBpICUgc2NoZW1hLml0ZW1zLmxlbmd0aFxuXHQgICAgICAgICAgICAgICAgKVxuXHQgICAgICAgICAgICApXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IGxlbmd0aFxuXHQgICAgfVxuXHR9XG5cblx0Lypcblx0ICAgIOWujOWWhOOAgeWPi+WlveeahOaPkOekuuS/oeaBr1xuXHQgICAgXG5cdCAgICBFcXVhbCwgbm90IGVxdWFsIHRvLCBncmVhdGVyIHRoYW4sIGxlc3MgdGhhbiwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvLCBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cblx0ICAgIOi3r+W+hCDpqozor4Hnsbvlnosg5o+P6L+wIFxuXG5cdCAgICBFeHBlY3QgcGF0aC5uYW1lIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBleHBlY3RlZCwgYnV0IHBhdGgubmFtZSBpcyBhY3R1YWwuXG5cblx0ICAgIEV4cGVjdCBwYXRoLm5hbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGV4cGVjdGVkLCBidXQgcGF0aC5uYW1lIGlzIGFjdHVhbC5cblx0ICAgIEV4cGVjdCBwYXRoLm5hbWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGV4cGVjdGVkLCBidXQgcGF0aC5uYW1lIGlzIGFjdHVhbC5cblxuXHQqL1xuXHR2YXIgQXNzZXJ0ID0ge1xuXHQgICAgbWVzc2FnZTogZnVuY3Rpb24oaXRlbSkge1xuXHQgICAgICAgIHJldHVybiAoaXRlbS5tZXNzYWdlIHx8XG5cdCAgICAgICAgICAgICAgICAnW3t1dHlwZX1dIEV4cGVjdCB7cGF0aH1cXCd7bHR5cGV9IHthY3Rpb259IHtleHBlY3RlZH0sIGJ1dCBpcyB7YWN0dWFsfScpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7dXR5cGV9JywgaXRlbS50eXBlLnRvVXBwZXJDYXNlKCkpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7bHR5cGV9JywgaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7cGF0aH0nLCBVdGlsLmlzQXJyYXkoaXRlbS5wYXRoKSAmJiBpdGVtLnBhdGguam9pbignLicpIHx8IGl0ZW0ucGF0aClcblx0ICAgICAgICAgICAgLnJlcGxhY2UoJ3thY3Rpb259JywgaXRlbS5hY3Rpb24pXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7ZXhwZWN0ZWR9JywgaXRlbS5leHBlY3RlZClcblx0ICAgICAgICAgICAgLnJlcGxhY2UoJ3thY3R1YWx9JywgaXRlbS5hY3R1YWwpXG5cdCAgICB9LFxuXHQgICAgZXF1YWw6IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICd0eXBlJzpcblx0ICAgICAgICAgICAgICAgIC8vIOato+WImeaooeadvyA9PT0g5a2X56ym5Liy5pyA57uI5YC8XG5cdCAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQgPT09ICdyZWdleHAnICYmIGFjdHVhbCA9PT0gJ3N0cmluZycpIHJldHVybiB0cnVlXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBlcXVhbCB0bycsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2Vcblx0ICAgICAgICB9XG5cdCAgICAgICAgaXRlbS5tZXNzYWdlID0gQXNzZXJ0Lm1lc3NhZ2UoaXRlbSlcblx0ICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuXHQgICAgICAgIHJldHVybiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIC8vIGFjdHVhbCBtYXRjaGVzIGV4cGVjdGVkXG5cdCAgICBtYXRjaDogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGV4cGVjdGVkLnRlc3QoYWN0dWFsKSkgcmV0dXJuIHRydWVcblxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdtYXRjaGVzJyxcblx0ICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpdGVtLm1lc3NhZ2UgPSBBc3NlcnQubWVzc2FnZShpdGVtKVxuXHQgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG5cdCAgICAgICAgcmV0dXJuIGZhbHNlXG5cdCAgICB9LFxuXHQgICAgbm90RXF1YWw6IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBub3QgZXF1YWwgdG8nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBncmVhdGVyVGhhbjogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGFjdHVhbCA+IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBncmVhdGVyIHRoYW4nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBsZXNzVGhhbjogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGFjdHVhbCA8IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBsZXNzIHRvJyxcblx0ICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpdGVtLm1lc3NhZ2UgPSBBc3NlcnQubWVzc2FnZShpdGVtKVxuXHQgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG5cdCAgICAgICAgcmV0dXJuIGZhbHNlXG5cdCAgICB9LFxuXHQgICAgZ3JlYXRlclRoYW5PckVxdWFsVG86IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgPj0gZXhwZWN0ZWQpIHJldHVybiB0cnVlXG5cdCAgICAgICAgdmFyIGl0ZW0gPSB7XG5cdCAgICAgICAgICAgIHBhdGg6IHBhdGgsXG5cdCAgICAgICAgICAgIHR5cGU6IHR5cGUsXG5cdCAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuXHQgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG5cdCAgICAgICAgICAgIGFjdGlvbjogJ2lzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2Vcblx0ICAgICAgICB9XG5cdCAgICAgICAgaXRlbS5tZXNzYWdlID0gQXNzZXJ0Lm1lc3NhZ2UoaXRlbSlcblx0ICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuXHQgICAgICAgIHJldHVybiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIGxlc3NUaGFuT3JFcXVhbFRvOiBmdW5jdGlvbih0eXBlLCBwYXRoLCBhY3R1YWwsIGV4cGVjdGVkLCByZXN1bHQsIG1lc3NhZ2UpIHtcblx0ICAgICAgICBpZiAoYWN0dWFsIDw9IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH1cblx0fVxuXG5cdHZhbGlkLkRpZmYgPSBEaWZmXG5cdHZhbGlkLkFzc2VydCA9IEFzc2VydFxuXG5cdG1vZHVsZS5leHBvcnRzID0gdmFsaWRcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOClcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qIGdsb2JhbCB3aW5kb3csIGRvY3VtZW50LCBsb2NhdGlvbiwgRXZlbnQsIHNldFRpbWVvdXQgKi9cblx0Lypcblx0ICAgICMjIE1vY2tYTUxIdHRwUmVxdWVzdFxuXG5cdCAgICDmnJ/mnJvnmoTlip/og73vvJpcblx0ICAgIDEuIOWujOaVtOWcsOimhuebluWOn+eUnyBYSFIg55qE6KGM5Li6XG5cdCAgICAyLiDlrozmlbTlnLDmqKHmi5/ljp/nlJ8gWEhSIOeahOihjOS4ulxuXHQgICAgMy4g5Zyo5Y+R6LW36K+35rGC5pe277yM6Ieq5Yqo5qOA5rWL5piv5ZCm6ZyA6KaB5oum5oiqXG5cdCAgICA0LiDlpoLmnpzkuI3lv4Xmi6bmiKrvvIzliJnmiafooYzljp/nlJ8gWEhSIOeahOihjOS4ulxuXHQgICAgNS4g5aaC5p6c6ZyA6KaB5oum5oiq77yM5YiZ5omn6KGM6Jma5oufIFhIUiDnmoTooYzkuLpcblx0ICAgIDYuIOWFvOWuuSBYTUxIdHRwUmVxdWVzdCDlkowgQWN0aXZlWE9iamVjdFxuXHQgICAgICAgIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKVxuXHQgICAgICAgIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxIVFRQXCIpXG5cblx0ICAgIOWFs+mUruaWueazleeahOmAu+i+ke+8mlxuXHQgICAgKiBuZXcgICDmraTml7blsJrml6Dms5Xnoa7lrprmmK/lkKbpnIDopoHmi6bmiKrvvIzmiYDku6XliJvlu7rljp/nlJ8gWEhSIOWvueixoeaYr+W/hemhu+eahOOAglxuXHQgICAgKiBvcGVuICDmraTml7blj6/ku6Xlj5bliLAgVVJM77yM5Y+v5Lul5Yaz5a6a5piv5ZCm6L+b6KGM5oum5oiq44CCXG5cdCAgICAqIHNlbmQgIOatpOaXtuW3sue7j+ehruWumuS6huivt+axguaWueW8j+OAglxuXG5cdCAgICDop4TojIPvvJpcblx0ICAgIGh0dHA6Ly94aHIuc3BlYy53aGF0d2cub3JnL1xuXHQgICAgaHR0cDovL3d3dy53My5vcmcvVFIvWE1MSHR0cFJlcXVlc3QyL1xuXG5cdCAgICDlj4LogIPlrp7njrDvvJpcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaWtvbi9Nb2NrSHR0cFJlcXVlc3QvYmxvYi9tYXN0ZXIvbGliL21vY2suanNcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90cmVrL0Zha2VYTUxIdHRwUmVxdWVzdC9ibG9iL21hc3Rlci9mYWtlX3htbF9odHRwX3JlcXVlc3QuanNcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9pbGluc2t5L3htbGh0dHByZXF1ZXN0L2Jsb2IvbWFzdGVyL1hNTEh0dHBSZXF1ZXN0LmpzXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vZmlyZWJ1Zy9maXJlYnVnLWxpdGUvYmxvYi9tYXN0ZXIvY29udGVudC9saXRlL3hoci5qc1xuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL3RoeC9SQVAvYmxvYi9tYXN0ZXIvbGFiL3JhcC5wbHVnaW4ueGluZ2xpZS5qc1xuXG5cdCAgICAqKumcgOS4jemcgOimgeWFqOmdoumHjeWGmSBYTUxIdHRwUmVxdWVzdO+8nyoqXG5cdCAgICAgICAgaHR0cDovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS14bWxodHRwcmVxdWVzdFxuXHQgICAgICAgIOWFs+mUruWxnuaApyByZWFkeVN0YXRl44CBc3RhdHVz44CBc3RhdHVzVGV4dOOAgXJlc3BvbnNl44CBcmVzcG9uc2VUZXh044CBcmVzcG9uc2VYTUwg5pivIHJlYWRvbmx577yM5omA5Lul77yM6K+V5Zu+6YCa6L+H5L+u5pS56L+Z5Lqb54q25oCB77yM5p2l5qih5ouf5ZON5bqU5piv5LiN5Y+v6KGM55qE44CCXG5cdCAgICAgICAg5Zug5q2k77yM5ZSv5LiA55qE5Yqe5rOV5piv5qih5ouf5pW05LiqIFhNTEh0dHBSZXF1ZXN077yM5bCx5YOPIGpRdWVyeSDlr7nkuovku7bmqKHlnovnmoTlsIHoo4XjgIJcblxuXHQgICAgLy8gRXZlbnQgaGFuZGxlcnNcblx0ICAgIG9ubG9hZHN0YXJ0ICAgICAgICAgbG9hZHN0YXJ0XG5cdCAgICBvbnByb2dyZXNzICAgICAgICAgIHByb2dyZXNzXG5cdCAgICBvbmFib3J0ICAgICAgICAgICAgIGFib3J0XG5cdCAgICBvbmVycm9yICAgICAgICAgICAgIGVycm9yXG5cdCAgICBvbmxvYWQgICAgICAgICAgICAgIGxvYWRcblx0ICAgIG9udGltZW91dCAgICAgICAgICAgdGltZW91dFxuXHQgICAgb25sb2FkZW5kICAgICAgICAgICBsb2FkZW5kXG5cdCAgICBvbnJlYWR5c3RhdGVjaGFuZ2UgIHJlYWR5c3RhdGVjaGFuZ2Vcblx0ICovXG5cblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cblx0Ly8g5aSH5Lu95Y6f55SfIFhNTEh0dHBSZXF1ZXN0XG5cdHdpbmRvdy5fWE1MSHR0cFJlcXVlc3QgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3Rcblx0d2luZG93Ll9BY3RpdmVYT2JqZWN0ID0gd2luZG93LkFjdGl2ZVhPYmplY3RcblxuXHQvKlxuXHQgICAgUGhhbnRvbUpTXG5cdCAgICBUeXBlRXJyb3I6ICdbb2JqZWN0IEV2ZW50Q29uc3RydWN0b3JdJyBpcyBub3QgYSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IEV2ZW50KFwicmVhZHlzdGF0ZWNoYW5nZVwiKScpXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlcmFpbC90d2l0dGVyLWJvb3RzdHJhcC1yYWlscy1jb25maXJtL2lzc3Vlcy8xOFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTEyODlcblx0Ki9cblx0dHJ5IHtcblx0ICAgIG5ldyB3aW5kb3cuRXZlbnQoJ2N1c3RvbScpXG5cdH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuXHQgICAgd2luZG93LkV2ZW50ID0gZnVuY3Rpb24odHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50JykgLy8gTVVTVCBiZSAnQ3VzdG9tRXZlbnQnXG5cdCAgICAgICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbClcblx0ICAgICAgICByZXR1cm4gZXZlbnRcblx0ICAgIH1cblx0fVxuXG5cdHZhciBYSFJfU1RBVEVTID0ge1xuXHQgICAgLy8gVGhlIG9iamVjdCBoYXMgYmVlbiBjb25zdHJ1Y3RlZC5cblx0ICAgIFVOU0VOVDogMCxcblx0ICAgIC8vIFRoZSBvcGVuKCkgbWV0aG9kIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnZva2VkLlxuXHQgICAgT1BFTkVEOiAxLFxuXHQgICAgLy8gQWxsIHJlZGlyZWN0cyAoaWYgYW55KSBoYXZlIGJlZW4gZm9sbG93ZWQgYW5kIGFsbCBIVFRQIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlIGhhdmUgYmVlbiByZWNlaXZlZC5cblx0ICAgIEhFQURFUlNfUkVDRUlWRUQ6IDIsXG5cdCAgICAvLyBUaGUgcmVzcG9uc2UncyBib2R5IGlzIGJlaW5nIHJlY2VpdmVkLlxuXHQgICAgTE9BRElORzogMyxcblx0ICAgIC8vIFRoZSBkYXRhIHRyYW5zZmVyIGhhcyBiZWVuIGNvbXBsZXRlZCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgdGhlIHRyYW5zZmVyIChlLmcuIGluZmluaXRlIHJlZGlyZWN0cykuXG5cdCAgICBET05FOiA0XG5cdH1cblxuXHR2YXIgWEhSX0VWRU5UUyA9ICdyZWFkeXN0YXRlY2hhbmdlIGxvYWRzdGFydCBwcm9ncmVzcyBhYm9ydCBlcnJvciBsb2FkIHRpbWVvdXQgbG9hZGVuZCcuc3BsaXQoJyAnKVxuXHR2YXIgWEhSX1JFUVVFU1RfUFJPUEVSVElFUyA9ICd0aW1lb3V0IHdpdGhDcmVkZW50aWFscycuc3BsaXQoJyAnKVxuXHR2YXIgWEhSX1JFU1BPTlNFX1BST1BFUlRJRVMgPSAncmVhZHlTdGF0ZSByZXNwb25zZVVSTCBzdGF0dXMgc3RhdHVzVGV4dCByZXNwb25zZVR5cGUgcmVzcG9uc2UgcmVzcG9uc2VUZXh0IHJlc3BvbnNlWE1MJy5zcGxpdCgnICcpXG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RyZWsvRmFrZVhNTEh0dHBSZXF1ZXN0L2Jsb2IvbWFzdGVyL2Zha2VfeG1sX2h0dHBfcmVxdWVzdC5qcyNMMzJcblx0dmFyIEhUVFBfU1RBVFVTX0NPREVTID0ge1xuXHQgICAgMTAwOiBcIkNvbnRpbnVlXCIsXG5cdCAgICAxMDE6IFwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFxuXHQgICAgMjAwOiBcIk9LXCIsXG5cdCAgICAyMDE6IFwiQ3JlYXRlZFwiLFxuXHQgICAgMjAyOiBcIkFjY2VwdGVkXCIsXG5cdCAgICAyMDM6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcblx0ICAgIDIwNDogXCJObyBDb250ZW50XCIsXG5cdCAgICAyMDU6IFwiUmVzZXQgQ29udGVudFwiLFxuXHQgICAgMjA2OiBcIlBhcnRpYWwgQ29udGVudFwiLFxuXHQgICAgMzAwOiBcIk11bHRpcGxlIENob2ljZVwiLFxuXHQgICAgMzAxOiBcIk1vdmVkIFBlcm1hbmVudGx5XCIsXG5cdCAgICAzMDI6IFwiRm91bmRcIixcblx0ICAgIDMwMzogXCJTZWUgT3RoZXJcIixcblx0ICAgIDMwNDogXCJOb3QgTW9kaWZpZWRcIixcblx0ICAgIDMwNTogXCJVc2UgUHJveHlcIixcblx0ICAgIDMwNzogXCJUZW1wb3JhcnkgUmVkaXJlY3RcIixcblx0ICAgIDQwMDogXCJCYWQgUmVxdWVzdFwiLFxuXHQgICAgNDAxOiBcIlVuYXV0aG9yaXplZFwiLFxuXHQgICAgNDAyOiBcIlBheW1lbnQgUmVxdWlyZWRcIixcblx0ICAgIDQwMzogXCJGb3JiaWRkZW5cIixcblx0ICAgIDQwNDogXCJOb3QgRm91bmRcIixcblx0ICAgIDQwNTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcblx0ICAgIDQwNjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuXHQgICAgNDA3OiBcIlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCIsXG5cdCAgICA0MDg6IFwiUmVxdWVzdCBUaW1lb3V0XCIsXG5cdCAgICA0MDk6IFwiQ29uZmxpY3RcIixcblx0ICAgIDQxMDogXCJHb25lXCIsXG5cdCAgICA0MTE6IFwiTGVuZ3RoIFJlcXVpcmVkXCIsXG5cdCAgICA0MTI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuXHQgICAgNDEzOiBcIlJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZVwiLFxuXHQgICAgNDE0OiBcIlJlcXVlc3QtVVJJIFRvbyBMb25nXCIsXG5cdCAgICA0MTU6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuXHQgICAgNDE2OiBcIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGVcIixcblx0ICAgIDQxNzogXCJFeHBlY3RhdGlvbiBGYWlsZWRcIixcblx0ICAgIDQyMjogXCJVbnByb2Nlc3NhYmxlIEVudGl0eVwiLFxuXHQgICAgNTAwOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuXHQgICAgNTAxOiBcIk5vdCBJbXBsZW1lbnRlZFwiLFxuXHQgICAgNTAyOiBcIkJhZCBHYXRld2F5XCIsXG5cdCAgICA1MDM6IFwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFxuXHQgICAgNTA0OiBcIkdhdGV3YXkgVGltZW91dFwiLFxuXHQgICAgNTA1OiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCJcblx0fVxuXG5cdC8qXG5cdCAgICBNb2NrWE1MSHR0cFJlcXVlc3Rcblx0Ki9cblxuXHRmdW5jdGlvbiBNb2NrWE1MSHR0cFJlcXVlc3QoKSB7XG5cdCAgICAvLyDliJ3lp4vljJYgY3VzdG9tIOWvueixoe+8jOeUqOS6juWtmOWCqOiHquWumuS5ieWxnuaAp1xuXHQgICAgdGhpcy5jdXN0b20gPSB7XG5cdCAgICAgICAgZXZlbnRzOiB7fSxcblx0ICAgICAgICByZXF1ZXN0SGVhZGVyczoge30sXG5cdCAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiB7fVxuXHQgICAgfVxuXHR9XG5cblx0TW9ja1hNTEh0dHBSZXF1ZXN0Ll9zZXR0aW5ncyA9IHtcblx0ICAgIHRpbWVvdXQ6ICcxMC0xMDAnLFxuXHQgICAgLypcblx0ICAgICAgICB0aW1lb3V0OiA1MCxcblx0ICAgICAgICB0aW1lb3V0OiAnMTAtMTAwJyxcblx0ICAgICAqL1xuXHR9XG5cblx0TW9ja1hNTEh0dHBSZXF1ZXN0LnNldHVwID0gZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0ICAgIFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdC5fc2V0dGluZ3MsIHNldHRpbmdzKVxuXHQgICAgcmV0dXJuIE1vY2tYTUxIdHRwUmVxdWVzdC5fc2V0dGluZ3Ncblx0fVxuXG5cdFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdCwgWEhSX1NUQVRFUylcblx0VXRpbC5leHRlbmQoTW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgWEhSX1NUQVRFUylcblxuXHQvLyDmoIforrDlvZPliY3lr7nosaHkuLogTW9ja1hNTEh0dHBSZXF1ZXN0XG5cdE1vY2tYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUubW9jayA9IHRydWVcblxuXHQvLyDmmK/lkKbmi6bmiKogQWpheCDor7fmsYJcblx0TW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5tYXRjaCA9IGZhbHNlXG5cblx0Ly8g5Yid5aeL5YyWIFJlcXVlc3Qg55u45YWz55qE5bGe5oCn5ZKM5pa55rOVXG5cdFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIHtcblx0ICAgIC8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLW9wZW4oKS1tZXRob2Rcblx0ICAgIC8vIFNldHMgdGhlIHJlcXVlc3QgbWV0aG9kLCByZXF1ZXN0IFVSTCwgYW5kIHN5bmNocm9ub3VzIGZsYWcuXG5cdCAgICBvcGVuOiBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCkge1xuXHQgICAgICAgIHZhciB0aGF0ID0gdGhpc1xuXG5cdCAgICAgICAgVXRpbC5leHRlbmQodGhpcy5jdXN0b20sIHtcblx0ICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG5cdCAgICAgICAgICAgIHVybDogdXJsLFxuXHQgICAgICAgICAgICBhc3luYzogdHlwZW9mIGFzeW5jID09PSAnYm9vbGVhbicgPyBhc3luYyA6IHRydWUsXG5cdCAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcblx0ICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuXHQgICAgICAgICAgICBvcHRpb25zOiB7XG5cdCAgICAgICAgICAgICAgICB1cmw6IHVybCxcblx0ICAgICAgICAgICAgICAgIHR5cGU6IG1ldGhvZFxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSlcblxuXHQgICAgICAgIHRoaXMuY3VzdG9tLnRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicpIHJldHVybiB0aW1lb3V0XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZW91dCA9PT0gJ3N0cmluZycgJiYgIX50aW1lb3V0LmluZGV4T2YoJy0nKSkgcmV0dXJuIHBhcnNlSW50KHRpbWVvdXQsIDEwKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVvdXQgPT09ICdzdHJpbmcnICYmIH50aW1lb3V0LmluZGV4T2YoJy0nKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRpbWVvdXQuc3BsaXQoJy0nKVxuXHQgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHBhcnNlSW50KHRtcFswXSwgMTApXG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcGFyc2VJbnQodG1wWzFdLCAxMClcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW5cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0oTW9ja1hNTEh0dHBSZXF1ZXN0Ll9zZXR0aW5ncy50aW1lb3V0KVxuXG5cdCAgICAgICAgLy8g5p+l5om+5LiO6K+35rGC5Y+C5pWw5Yy56YWN55qE5pWw5o2u5qih5p2/XG5cdCAgICAgICAgdmFyIGl0ZW0gPSBmaW5kKHRoaXMuY3VzdG9tLm9wdGlvbnMpXG5cblx0ICAgICAgICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcblx0ICAgICAgICAgICAgLy8g5ZCM5q2l5bGe5oCnIE5hdGl2ZVhNTEh0dHBSZXF1ZXN0ID0+IE1vY2tYTUxIdHRwUmVxdWVzdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFhIUl9SRVNQT05TRV9QUk9QRVJUSUVTLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoYXRbWEhSX1JFU1BPTlNFX1BST1BFUlRJRVNbaV1dID0geGhyW1hIUl9SRVNQT05TRV9QUk9QRVJUSUVTW2ldXVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyDop6blj5EgTW9ja1hNTEh0dHBSZXF1ZXN0IOS4iueahOWQjOWQjeS6i+S7tlxuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGV2ZW50LnR5cGUgLyosIGZhbHNlLCBmYWxzZSwgdGhhdCovICkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5aaC5p6c5pyq5om+5Yiw5Yy56YWN55qE5pWw5o2u5qih5p2/77yM5YiZ6YeH55So5Y6f55SfIFhIUiDlj5HpgIHor7fmsYLjgIJcblx0ICAgICAgICBpZiAoIWl0ZW0pIHtcblx0ICAgICAgICAgICAgLy8g5Yib5bu65Y6f55SfIFhIUiDlr7nosaHvvIzosIPnlKjljp/nlJ8gb3Blbigp77yM55uR5ZCs5omA5pyJ5Y6f55Sf5LqL5Lu2XG5cdCAgICAgICAgICAgIHZhciB4aHIgPSBjcmVhdGVOYXRpdmVYTUxIdHRwUmVxdWVzdCgpXG5cdCAgICAgICAgICAgIHRoaXMuY3VzdG9tLnhociA9IHhoclxuXG5cdCAgICAgICAgICAgIC8vIOWIneWni+WMluaJgOacieS6i+S7tu+8jOeUqOS6juebkeWQrOWOn+eUnyBYSFIg5a+56LGh55qE5LqL5Lu2XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgWEhSX0VWRU5UUy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoWEhSX0VWRU5UU1tpXSwgaGFuZGxlKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8geGhyLm9wZW4oKVxuXHQgICAgICAgICAgICBpZiAodXNlcm5hbWUpIHhoci5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlcm5hbWUsIHBhc3N3b3JkKVxuXHQgICAgICAgICAgICBlbHNlIHhoci5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYylcblxuXHQgICAgICAgICAgICAvLyDlkIzmraXlsZ7mgKcgTW9ja1hNTEh0dHBSZXF1ZXN0ID0+IE5hdGl2ZVhNTEh0dHBSZXF1ZXN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgWEhSX1JFUVVFU1RfUFJPUEVSVElFUy5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICB4aHJbWEhSX1JFUVVFU1RfUFJPUEVSVElFU1tqXV0gPSB0aGF0W1hIUl9SRVFVRVNUX1BST1BFUlRJRVNbal1dXG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5om+5Yiw5LqG5Yy56YWN55qE5pWw5o2u5qih5p2/77yM5byA5aeL5oum5oiqIFhIUiDor7fmsYJcblx0ICAgICAgICB0aGlzLm1hdGNoID0gdHJ1ZVxuXHQgICAgICAgIHRoaXMuY3VzdG9tLnRlbXBsYXRlID0gaXRlbVxuXHQgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5PUEVORURcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGlzKi8gKSlcblx0ICAgIH0sXG5cdCAgICAvLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1zZXRyZXF1ZXN0aGVhZGVyKCktbWV0aG9kXG5cdCAgICAvLyBDb21iaW5lcyBhIGhlYWRlciBpbiBhdXRob3IgcmVxdWVzdCBoZWFkZXJzLlxuXHQgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VzdG9tLnhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gdGhpcy5jdXN0b20ucmVxdWVzdEhlYWRlcnNcblx0ICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnNbbmFtZV0pIHJlcXVlc3RIZWFkZXJzW25hbWVdICs9ICcsJyArIHZhbHVlXG5cdCAgICAgICAgZWxzZSByZXF1ZXN0SGVhZGVyc1tuYW1lXSA9IHZhbHVlXG5cdCAgICB9LFxuXHQgICAgdGltZW91dDogMCxcblx0ICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG5cdCAgICB1cGxvYWQ6IHt9LFxuXHQgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyN0aGUtc2VuZCgpLW1ldGhvZFxuXHQgICAgLy8gSW5pdGlhdGVzIHRoZSByZXF1ZXN0LlxuXHQgICAgc2VuZDogZnVuY3Rpb24gc2VuZChkYXRhKSB7XG5cdCAgICAgICAgdmFyIHRoYXQgPSB0aGlzXG5cdCAgICAgICAgdGhpcy5jdXN0b20ub3B0aW9ucy5ib2R5ID0gZGF0YVxuXG5cdCAgICAgICAgLy8g5Y6f55SfIFhIUlxuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCkge1xuXHQgICAgICAgICAgICB0aGlzLmN1c3RvbS54aHIuc2VuZChkYXRhKVxuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cblx0ICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHQgICAgICAgIHRoaXMuc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdNb2NrWE1MSHR0cFJlcXVlc3QnKVxuXG5cdCAgICAgICAgLy8gbG9hZHN0YXJ0IFRoZSBmZXRjaCBpbml0aWF0ZXMuXG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZHN0YXJ0JyAvKiwgZmFsc2UsIGZhbHNlLCB0aGlzKi8gKSlcblxuXHQgICAgICAgIGlmICh0aGlzLmN1c3RvbS5hc3luYykgc2V0VGltZW91dChkb25lLCB0aGlzLmN1c3RvbS50aW1lb3V0KSAvLyDlvILmraVcblx0ICAgICAgICBlbHNlIGRvbmUoKSAvLyDlkIzmraVcblxuXHQgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG5cdCAgICAgICAgICAgIHRoYXQucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEXG5cdCAgICAgICAgICAgIHRoYXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3JlYWR5c3RhdGVjaGFuZ2UnIC8qLCBmYWxzZSwgZmFsc2UsIHRoYXQqLyApKVxuXHQgICAgICAgICAgICB0aGF0LnJlYWR5U3RhdGUgPSBNb2NrWE1MSHR0cFJlcXVlc3QuTE9BRElOR1xuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSlcblxuXHQgICAgICAgICAgICB0aGF0LnN0YXR1cyA9IDIwMFxuXHQgICAgICAgICAgICB0aGF0LnN0YXR1c1RleHQgPSBIVFRQX1NUQVRVU19DT0RFU1syMDBdXG5cblx0ICAgICAgICAgICAgLy8gZml4ICM5MiAjOTMgYnkgQHFkZGVndHlhXG5cdCAgICAgICAgICAgIHRoYXQucmVzcG9uc2UgPSB0aGF0LnJlc3BvbnNlVGV4dCA9IEpTT04uc3RyaW5naWZ5KFxuXHQgICAgICAgICAgICAgICAgY29udmVydCh0aGF0LmN1c3RvbS50ZW1wbGF0ZSwgdGhhdC5jdXN0b20ub3B0aW9ucyksXG5cdCAgICAgICAgICAgICAgICBudWxsLCA0XG5cdCAgICAgICAgICAgIClcblxuXHQgICAgICAgICAgICB0aGF0LnJlYWR5U3RhdGUgPSBNb2NrWE1MSHR0cFJlcXVlc3QuRE9ORVxuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSlcblx0ICAgICAgICAgICAgdGhhdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcgLyosIGZhbHNlLCBmYWxzZSwgdGhhdCovICkpO1xuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2FkZW5kJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSxcblx0ICAgIC8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLWFib3J0KCktbWV0aG9kXG5cdCAgICAvLyBDYW5jZWxzIGFueSBuZXR3b3JrIGFjdGl2aXR5LlxuXHQgICAgYWJvcnQ6IGZ1bmN0aW9uIGFib3J0KCkge1xuXHQgICAgICAgIC8vIOWOn+eUnyBYSFJcblx0ICAgICAgICBpZiAoIXRoaXMubWF0Y2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5jdXN0b20ueGhyLmFib3J0KClcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5oum5oiqIFhIUlxuXHQgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5VTlNFTlRcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdhYm9ydCcsIGZhbHNlLCBmYWxzZSwgdGhpcykpXG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InLCBmYWxzZSwgZmFsc2UsIHRoaXMpKVxuXHQgICAgfVxuXHR9KVxuXG5cdC8vIOWIneWni+WMliBSZXNwb25zZSDnm7jlhbPnmoTlsZ7mgKflkozmlrnms5Vcblx0VXRpbC5leHRlbmQoTW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHQgICAgcmVzcG9uc2VVUkw6ICcnLFxuXHQgICAgc3RhdHVzOiBNb2NrWE1MSHR0cFJlcXVlc3QuVU5TRU5ULFxuXHQgICAgc3RhdHVzVGV4dDogJycsXG5cdCAgICAvLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1nZXRyZXNwb25zZWhlYWRlcigpLW1ldGhvZFxuXHQgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbS54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tLnJlc3BvbnNlSGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldXG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyN0aGUtZ2V0YWxscmVzcG9uc2VoZWFkZXJzKCktbWV0aG9kXG5cdCAgICAvLyBodHRwOi8vd3d3LnV0ZjgtY2hhcnRhYmxlLmRlL1xuXHQgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbS54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9IHRoaXMuY3VzdG9tLnJlc3BvbnNlSGVhZGVyc1xuXHQgICAgICAgIHZhciBoZWFkZXJzID0gJydcblx0ICAgICAgICBmb3IgKHZhciBoIGluIHJlc3BvbnNlSGVhZGVycykge1xuXHQgICAgICAgICAgICBpZiAoIXJlc3BvbnNlSGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoKSkgY29udGludWVcblx0ICAgICAgICAgICAgaGVhZGVycyArPSBoICsgJzogJyArIHJlc3BvbnNlSGVhZGVyc1toXSArICdcXHJcXG4nXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBoZWFkZXJzXG5cdCAgICB9LFxuXHQgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIC8qbWltZSovICkge30sXG5cdCAgICByZXNwb25zZVR5cGU6ICcnLCAvLyAnJywgJ3RleHQnLCAnYXJyYXlidWZmZXInLCAnYmxvYicsICdkb2N1bWVudCcsICdqc29uJ1xuXHQgICAgcmVzcG9uc2U6IG51bGwsXG5cdCAgICByZXNwb25zZVRleHQ6ICcnLFxuXHQgICAgcmVzcG9uc2VYTUw6IG51bGxcblx0fSlcblxuXHQvLyBFdmVudFRhcmdldFxuXHRVdGlsLmV4dGVuZChNb2NrWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCB7XG5cdCAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZSkge1xuXHQgICAgICAgIHZhciBldmVudHMgPSB0aGlzLmN1c3RvbS5ldmVudHNcblx0ICAgICAgICBpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0gW11cblx0ICAgICAgICBldmVudHNbdHlwZV0ucHVzaChoYW5kbGUpXG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGUpIHtcblx0ICAgICAgICB2YXIgaGFuZGxlcyA9IHRoaXMuY3VzdG9tLmV2ZW50c1t0eXBlXSB8fCBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoaGFuZGxlc1tpXSA9PT0gaGFuZGxlKSB7XG5cdCAgICAgICAgICAgICAgICBoYW5kbGVzLnNwbGljZShpLS0sIDEpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuXHQgICAgICAgIHZhciBoYW5kbGVzID0gdGhpcy5jdXN0b20uZXZlbnRzW2V2ZW50LnR5cGVdIHx8IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGhhbmRsZXNbaV0uY2FsbCh0aGlzLCBldmVudClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgb250eXBlID0gJ29uJyArIGV2ZW50LnR5cGVcblx0ICAgICAgICBpZiAodGhpc1tvbnR5cGVdKSB0aGlzW29udHlwZV0oZXZlbnQpXG5cdCAgICB9XG5cdH0pXG5cblx0Ly8gSW5zcGlyZWQgYnkgalF1ZXJ5XG5cdGZ1bmN0aW9uIGNyZWF0ZU5hdGl2ZVhNTEh0dHBSZXF1ZXN0KCkge1xuXHQgICAgdmFyIGlzTG9jYWwgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokL1xuXHQgICAgICAgIHZhciBydXJsID0gL14oW1xcdy4rLV0rOikoPzpcXC9cXC8oW15cXC8/IzpdKikoPzo6KFxcZCspfCl8KS9cblx0ICAgICAgICB2YXIgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZlxuXHQgICAgICAgIHZhciBhamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkpIHx8IFtdXG5cdCAgICAgICAgcmV0dXJuIHJsb2NhbFByb3RvY29sLnRlc3QoYWpheExvY1BhcnRzWzFdKVxuXHQgICAgfSgpXG5cblx0ICAgIHJldHVybiB3aW5kb3cuQWN0aXZlWE9iamVjdCA/XG5cdCAgICAgICAgKCFpc0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCkpIDogY3JlYXRlU3RhbmRhcmRYSFIoKVxuXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5fWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuX0FjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTtcblx0ICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgfVxuXHR9XG5cblxuXHQvLyDmn6Xmib7kuI7or7fmsYLlj4LmlbDljLnphY3nmoTmlbDmja7mqKHmnb/vvJpVUkzvvIxUeXBlXG5cdGZ1bmN0aW9uIGZpbmQob3B0aW9ucykge1xuXG5cdCAgICBmb3IgKHZhciBzVXJsVHlwZSBpbiBNb2NrWE1MSHR0cFJlcXVlc3QuTW9jay5fbW9ja2VkKSB7XG5cdCAgICAgICAgdmFyIGl0ZW0gPSBNb2NrWE1MSHR0cFJlcXVlc3QuTW9jay5fbW9ja2VkW3NVcmxUeXBlXVxuXHQgICAgICAgIGlmIChcblx0ICAgICAgICAgICAgKCFpdGVtLnJ1cmwgfHwgbWF0Y2goaXRlbS5ydXJsLCBvcHRpb25zLnVybCkpICYmXG5cdCAgICAgICAgICAgICghaXRlbS5ydHlwZSB8fCBtYXRjaChpdGVtLnJ0eXBlLCBvcHRpb25zLnR5cGUudG9Mb3dlckNhc2UoKSkpXG5cdCAgICAgICAgKSB7XG5cdCAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdbbW9ja10nLCBvcHRpb25zLnVybCwgJz4nLCBpdGVtLnJ1cmwpXG5cdCAgICAgICAgICAgIHJldHVybiBpdGVtXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBtYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7XG5cdCAgICAgICAgaWYgKFV0aWwudHlwZShleHBlY3RlZCkgPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gYWN0dWFsXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChVdGlsLnR5cGUoZXhwZWN0ZWQpID09PSAncmVnZXhwJykge1xuXHQgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdH1cblxuXHQvLyDmlbDmja7mqKHmnb8g77ydPiDlk43lupTmlbDmja5cblx0ZnVuY3Rpb24gY29udmVydChpdGVtLCBvcHRpb25zKSB7XG5cdCAgICByZXR1cm4gVXRpbC5pc0Z1bmN0aW9uKGl0ZW0udGVtcGxhdGUpID9cblx0ICAgICAgICBpdGVtLnRlbXBsYXRlKG9wdGlvbnMpIDogTW9ja1hNTEh0dHBSZXF1ZXN0Lk1vY2subW9jayhpdGVtLnRlbXBsYXRlKVxuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBNb2NrWE1MSHR0cFJlcXVlc3RcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pXG59KTtcbjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFFBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js\n");

/***/ }),

/***/ "./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js":
/*!*******************************************************************************!*\
  !*** ./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js ***!
  \*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX25vZGUtbGlicy1icm93c2VyQDIuMi4xQG5vZGUtbGlicy1icm93c2VyL21vY2svZW1wdHkuanMuanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js\n");

/***/ }),

/***/ "./node_modules/_object-is@1.0.1@object-is/index.js":
/*!**********************************************************!*\
  !*** ./node_modules/_object-is@1.0.1@object-is/index.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/* https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.is */\n\nvar NumberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t} else if (a === b) {\n\t\treturn true;\n\t} else if (NumberIsNaN(a) && NumberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1pc0AxLjAuMUBvYmplY3QtaXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX29iamVjdC1pc0AxLjAuMUBvYmplY3QtaXMvaW5kZXguanM/MTMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW9iamVjdC5pcyAqL1xuXG52YXIgTnVtYmVySXNOYU4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuXHRpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG5cdFx0cmV0dXJuIDEgLyBhID09PSAxIC8gYjtcblx0fSBlbHNlIGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoTnVtYmVySXNOYU4oYSkgJiYgTnVtYmVySXNOYU4oYikpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_object-is@1.0.1@object-is/index.js\n");

/***/ }),

/***/ "./node_modules/_object-keys@1.1.1@object-keys/implementation.js":
/*!***********************************************************************!*\
  !*** ./node_modules/_object-keys@1.1.1@object-keys/implementation.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(/*! ./isArguments */ \"./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\"); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pbXBsZW1lbnRhdGlvbi5qcz9jMmIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/implementation.js\n");

/***/ }),

/***/ "./node_modules/_object-keys@1.1.1@object-keys/index.js":
/*!**************************************************************!*\
  !*** ./node_modules/_object-keys@1.1.1@object-keys/index.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(/*! ./isArguments */ \"./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\");\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(/*! ./implementation */ \"./node_modules/_object-keys@1.1.1@object-keys/implementation.js\");\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pbmRleC5qcz8wOTkzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/index.js\n");

/***/ }),

/***/ "./node_modules/_object-keys@1.1.1@object-keys/isArguments.js":
/*!********************************************************************!*\
  !*** ./node_modules/_object-keys@1.1.1@object-keys/isArguments.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2lzQXJndW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcz81N2MyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\n");

/***/ }),

/***/ "./node_modules/_process@0.11.10@process/browser.js":
/*!**********************************************************!*\
  !*** ./node_modules/_process@0.11.10@process/browser.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Byb2Nlc3NAMC4xMS4xMEBwcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3Byb2Nlc3NAMC4xMS4xMEBwcm9jZXNzL2Jyb3dzZXIuanM/NGMzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_process@0.11.10@process/browser.js\n");

/***/ }),

/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js ***!
  \*********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar toObject = Object;\nvar TypeErr = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== toObject(this)) {\n\t\tthrow new TypeErr('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzY1MjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9PYmplY3QgPSBPYmplY3Q7XG52YXIgVHlwZUVyciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGFncygpIHtcblx0aWYgKHRoaXMgIT0gbnVsbCAmJiB0aGlzICE9PSB0b09iamVjdCh0aGlzKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdSZWdFeHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYWxsZWQgb24gbm9uLW9iamVjdCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSAnJztcblx0aWYgKHRoaXMuZ2xvYmFsKSB7XG5cdFx0cmVzdWx0ICs9ICdnJztcblx0fVxuXHRpZiAodGhpcy5pZ25vcmVDYXNlKSB7XG5cdFx0cmVzdWx0ICs9ICdpJztcblx0fVxuXHRpZiAodGhpcy5tdWx0aWxpbmUpIHtcblx0XHRyZXN1bHQgKz0gJ20nO1xuXHR9XG5cdGlmICh0aGlzLmRvdEFsbCkge1xuXHRcdHJlc3VsdCArPSAncyc7XG5cdH1cblx0aWYgKHRoaXMudW5pY29kZSkge1xuXHRcdHJlc3VsdCArPSAndSc7XG5cdH1cblx0aWYgKHRoaXMuc3RpY2t5KSB7XG5cdFx0cmVzdWx0ICs9ICd5Jztcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\n");

/***/ }),

/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js":
/*!************************************************************************************!*\
  !*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js ***!
  \************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar define = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\");\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\");\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\");\nvar shim = __webpack_require__(/*! ./shim */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js\");\n\nvar flagsBound = Function.call.bind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL2luZGV4LmpzPzQ2MzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaW1wbGVtZW50YXRpb24pO1xuXG5kZWZpbmUoZmxhZ3NCb3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhZ3NCb3VuZDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js\n");

/***/ }),

/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\");\n\nvar supportsDescriptors = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\").supportsDescriptors;\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar TypeErr = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif (/a/mig.flags === 'gim') {\n\t\tvar descriptor = gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL3BvbHlmaWxsLmpzP2NlM2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdSZWdFeHAucHJvdG90eXBlLmZsYWdzIHJlcXVpcmVzIGEgdHJ1ZSBFUzUgZW52aXJvbm1lbnQgdGhhdCBzdXBwb3J0cyBwcm9wZXJ0eSBkZXNjcmlwdG9ycycpO1xuXHR9XG5cdGlmICgvYS9taWcuZmxhZ3MgPT09ICdnaW0nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycpO1xuXHRcdGlmIChkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgKC9hLykuZG90QWxsID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiBkZXNjcmlwdG9yLmdldDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\n");

/***/ }),

/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js ***!
  \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nvar supportsDescriptors = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\").supportsDescriptors;\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9zaGltLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19yZWdleHAucHJvdG90eXBlLmZsYWdzQDEuMi4wQHJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Mvc2hpbS5qcz9kNjY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpLnN1cHBvcnRzRGVzY3JpcHRvcnM7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgVHlwZUVyciA9IFR5cGVFcnJvcjtcbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciByZWdleCA9IC9hLztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltRmxhZ3MoKSB7XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycyB8fCAhZ2V0UHJvdG8pIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycignUmVnRXhwLnByb3RvdHlwZS5mbGFncyByZXF1aXJlcyBhIHRydWUgRVM1IGVudmlyb25tZW50IHRoYXQgc3VwcG9ydHMgcHJvcGVydHkgZGVzY3JpcHRvcnMnKTtcblx0fVxuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHR2YXIgcHJvdG8gPSBnZXRQcm90byhyZWdleCk7XG5cdHZhciBkZXNjcmlwdG9yID0gZ09QRChwcm90bywgJ2ZsYWdzJyk7XG5cdGlmICghZGVzY3JpcHRvciB8fCBkZXNjcmlwdG9yLmdldCAhPT0gcG9seWZpbGwpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShwcm90bywgJ2ZsYWdzJywge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6IHBvbHlmaWxsXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js\n");

/***/ }),

/***/ "./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css":
/*!***************************************************************!*\
  !*** ./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"49a14e50\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\", function() {\n     var newContent = __webpack_require__(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9jc3Mvc3dpcGVyLmNzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fc3dpcGVyQDQuNS4xQHN3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzPzJiNjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTEhLi4vLi4vLi4vX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMiEuL3N3aXBlci5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI0OWExNGU1MFwiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTEhLi4vLi4vLi4vX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMiEuL3N3aXBlci5jc3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMSEuLi8uLi8uLi9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTYtb25lT2YtMy0yIS4vc3dpcGVyLmNzc1wiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\n");

/***/ }),

/***/ "./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js":
/*!*************************************************************!*\
  !*** ./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Swiper 4.5.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2019 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 13, 2019\n */\n\n(function (global, factory) {\n   true ? module.exports = factory() :\n  undefined;\n}(this, function () { 'use strict';\n\n  /**\n   * SSR Window 1.0.1\n   * Better handling for window object in SSR environment\n   * https://github.com/nolimits4web/ssr-window\n   *\n   * Copyright 2018, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: July 18, 2018\n   */\n  var doc = (typeof document === 'undefined') ? {\n    body: {},\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    activeElement: {\n      blur: function blur() {},\n      nodeName: '',\n    },\n    querySelector: function querySelector() {\n      return null;\n    },\n    querySelectorAll: function querySelectorAll() {\n      return [];\n    },\n    getElementById: function getElementById() {\n      return null;\n    },\n    createEvent: function createEvent() {\n      return {\n        initEvent: function initEvent() {},\n      };\n    },\n    createElement: function createElement() {\n      return {\n        children: [],\n        childNodes: [],\n        style: {},\n        setAttribute: function setAttribute() {},\n        getElementsByTagName: function getElementsByTagName() {\n          return [];\n        },\n      };\n    },\n    location: { hash: '' },\n  } : document; // eslint-disable-line\n\n  var win = (typeof window === 'undefined') ? {\n    document: doc,\n    navigator: {\n      userAgent: '',\n    },\n    location: {},\n    history: {},\n    CustomEvent: function CustomEvent() {\n      return this;\n    },\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    getComputedStyle: function getComputedStyle() {\n      return {\n        getPropertyValue: function getPropertyValue() {\n          return '';\n        },\n      };\n    },\n    Image: function Image() {},\n    Date: function Date() {},\n    screen: {},\n    setTimeout: function setTimeout() {},\n    clearTimeout: function clearTimeout() {},\n  } : window; // eslint-disable-line\n\n  /**\n   * Dom7 2.1.3\n   * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n   * http://framework7.io/docs/dom.html\n   *\n   * Copyright 2019, Vladimir Kharlampidi\n   * The iDangero.us\n   * http://www.idangero.us/\n   *\n   * Licensed under MIT\n   *\n   * Released on: February 11, 2019\n   */\n\n  var Dom7 = function Dom7(arr) {\n    var self = this;\n    // Create array-like object\n    for (var i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  };\n\n  function $(selector, context) {\n    var arr = [];\n    var i = 0;\n    if (selector && !context) {\n      if (selector instanceof Dom7) {\n        return selector;\n      }\n    }\n    if (selector) {\n        // String\n      if (typeof selector === 'string') {\n        var els;\n        var tempParent;\n        var html = selector.trim();\n        if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n          var toCreate = 'div';\n          if (html.indexOf('<li') === 0) { toCreate = 'ul'; }\n          if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }\n          if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }\n          if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }\n          if (html.indexOf('<option') === 0) { toCreate = 'select'; }\n          tempParent = doc.createElement(toCreate);\n          tempParent.innerHTML = html;\n          for (i = 0; i < tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n            // Pure ID selector\n            els = [doc.getElementById(selector.trim().split('#')[1])];\n          } else {\n            // Other selectors\n            els = (context || doc).querySelectorAll(selector.trim());\n          }\n          for (i = 0; i < els.length; i += 1) {\n            if (els[i]) { arr.push(els[i]); }\n          }\n        }\n      } else if (selector.nodeType || selector === win || selector === doc) {\n        // Node/element\n        arr.push(selector);\n      } else if (selector.length > 0 && selector[0].nodeType) {\n        // Array of elements or instance of Dom\n        for (i = 0; i < selector.length; i += 1) {\n          arr.push(selector[i]);\n        }\n      }\n    }\n    return new Dom7(arr);\n  }\n\n  $.fn = Dom7.prototype;\n  $.Class = Dom7;\n  $.Dom7 = Dom7;\n\n  function unique(arr) {\n    var uniqueArray = [];\n    for (var i = 0; i < arr.length; i += 1) {\n      if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n    }\n    return uniqueArray;\n  }\n\n  // Classes and attributes\n  function addClass(className) {\n    if (typeof className === 'undefined') {\n      return this;\n    }\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function removeClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function hasClass(className) {\n    if (!this[0]) { return false; }\n    return this[0].classList.contains(className);\n  }\n  function toggleClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function attr(attrs, value) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 1 && typeof attrs === 'string') {\n      // Get attr\n      if (this[0]) { return this[0].getAttribute(attrs); }\n      return undefined;\n    }\n\n    // Set attrs\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments$1.length === 2) {\n        // String\n        this[i].setAttribute(attrs, value);\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (var attrName in attrs) {\n          this[i][attrName] = attrs[attrName];\n          this[i].setAttribute(attrName, attrs[attrName]);\n        }\n      }\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function removeAttr(attr) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].removeAttribute(attr);\n    }\n    return this;\n  }\n  function data(key, value) {\n    var el;\n    if (typeof value === 'undefined') {\n      el = this[0];\n      // Get value\n      if (el) {\n        if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n          return el.dom7ElementDataStorage[key];\n        }\n\n        var dataKey = el.getAttribute((\"data-\" + key));\n        if (dataKey) {\n          return dataKey;\n        }\n        return undefined;\n      }\n      return undefined;\n    }\n\n    // Set value\n    for (var i = 0; i < this.length; i += 1) {\n      el = this[i];\n      if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n      el.dom7ElementDataStorage[key] = value;\n    }\n    return this;\n  }\n  // Transforms\n  // eslint-disable-next-line\n  function transform(transform) {\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransform = transform;\n      elStyle.transform = transform;\n    }\n    return this;\n  }\n  function transition(duration) {\n    if (typeof duration !== 'string') {\n      duration = duration + \"ms\"; // eslint-disable-line\n    }\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransitionDuration = duration;\n      elStyle.transitionDuration = duration;\n    }\n    return this;\n  }\n  // Events\n  function on() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    function handleLiveEvent(e) {\n      var target = e.target;\n      if (!target) { return; }\n      var eventData = e.target.dom7EventData || [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n      else {\n        var parents = $(target).parents(); // eslint-disable-line\n        for (var k = 0; k < parents.length; k += 1) {\n          if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n        }\n      }\n    }\n    function handleEvent(e) {\n      var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      listener.apply(this, eventData);\n    }\n    var events = eventType.split(' ');\n    var j;\n    for (var i = 0; i < this.length; i += 1) {\n      var el = this[i];\n      if (!targetSelector) {\n        for (j = 0; j < events.length; j += 1) {\n          var event = events[j];\n          if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n          if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n          el.dom7Listeners[event].push({\n            listener: listener,\n            proxyListener: handleEvent,\n          });\n          el.addEventListener(event, handleEvent, capture);\n        }\n      } else {\n        // Live events\n        for (j = 0; j < events.length; j += 1) {\n          var event$1 = events[j];\n          if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n          if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n          el.dom7LiveListeners[event$1].push({\n            listener: listener,\n            proxyListener: handleLiveEvent,\n          });\n          el.addEventListener(event$1, handleLiveEvent, capture);\n        }\n      }\n    }\n    return this;\n  }\n  function off() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    var events = eventType.split(' ');\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var handlers = (void 0);\n        if (!targetSelector && el.dom7Listeners) {\n          handlers = el.dom7Listeners[event];\n        } else if (targetSelector && el.dom7LiveListeners) {\n          handlers = el.dom7LiveListeners[event];\n        }\n        if (handlers && handlers.length) {\n          for (var k = handlers.length - 1; k >= 0; k -= 1) {\n            var handler = handlers[k];\n            if (listener && handler.listener === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (!listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            }\n          }\n        }\n      }\n    }\n    return this;\n  }\n  function trigger() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var events = args[0].split(' ');\n    var eventData = args[1];\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var evt = (void 0);\n        try {\n          evt = new win.CustomEvent(event, {\n            detail: eventData,\n            bubbles: true,\n            cancelable: true,\n          });\n        } catch (e) {\n          evt = doc.createEvent('Event');\n          evt.initEvent(event, true, true);\n          evt.detail = eventData;\n        }\n        // eslint-disable-next-line\n        el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n    return this;\n  }\n  function transitionEnd(callback) {\n    var events = ['webkitTransitionEnd', 'transitionend'];\n    var dom = this;\n    var i;\n    function fireCallBack(e) {\n      /* jshint validthis:true */\n      if (e.target !== this) { return; }\n      callback.call(this, e);\n      for (i = 0; i < events.length; i += 1) {\n        dom.off(events[i], fireCallBack);\n      }\n    }\n    if (callback) {\n      for (i = 0; i < events.length; i += 1) {\n        dom.on(events[i], fireCallBack);\n      }\n    }\n    return this;\n  }\n  function outerWidth(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n      }\n      return this[0].offsetWidth;\n    }\n    return null;\n  }\n  function outerHeight(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n      }\n      return this[0].offsetHeight;\n    }\n    return null;\n  }\n  function offset() {\n    if (this.length > 0) {\n      var el = this[0];\n      var box = el.getBoundingClientRect();\n      var body = doc.body;\n      var clientTop = el.clientTop || body.clientTop || 0;\n      var clientLeft = el.clientLeft || body.clientLeft || 0;\n      var scrollTop = el === win ? win.scrollY : el.scrollTop;\n      var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n      return {\n        top: (box.top + scrollTop) - clientTop,\n        left: (box.left + scrollLeft) - clientLeft,\n      };\n    }\n\n    return null;\n  }\n  function styles() {\n    if (this[0]) { return win.getComputedStyle(this[0], null); }\n    return {};\n  }\n  function css(props, value) {\n    var i;\n    if (arguments.length === 1) {\n      if (typeof props === 'string') {\n        if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n      } else {\n        for (i = 0; i < this.length; i += 1) {\n          // eslint-disable-next-line\n          for (var prop in props) {\n            this[i].style[prop] = props[prop];\n          }\n        }\n        return this;\n      }\n    }\n    if (arguments.length === 2 && typeof props === 'string') {\n      for (i = 0; i < this.length; i += 1) {\n        this[i].style[props] = value;\n      }\n      return this;\n    }\n    return this;\n  }\n  // Iterate over the collection passing elements to `callback`\n  function each(callback) {\n    // Don't bother continuing without a callback\n    if (!callback) { return this; }\n    // Iterate over the current collection\n    for (var i = 0; i < this.length; i += 1) {\n      // If the callback returns false\n      if (callback.call(this[i], i, this[i]) === false) {\n        // End the loop early\n        return this;\n      }\n    }\n    // Return `this` to allow chained DOM operations\n    return this;\n  }\n  // eslint-disable-next-line\n  function html(html) {\n    if (typeof html === 'undefined') {\n      return this[0] ? this[0].innerHTML : undefined;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].innerHTML = html;\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function text(text) {\n    if (typeof text === 'undefined') {\n      if (this[0]) {\n        return this[0].textContent.trim();\n      }\n      return null;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].textContent = text;\n    }\n    return this;\n  }\n  function is(selector) {\n    var el = this[0];\n    var compareWith;\n    var i;\n    if (!el || typeof selector === 'undefined') { return false; }\n    if (typeof selector === 'string') {\n      if (el.matches) { return el.matches(selector); }\n      else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n      else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n      compareWith = $(selector);\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    } else if (selector === doc) { return el === doc; }\n    else if (selector === win) { return el === win; }\n\n    if (selector.nodeType || selector instanceof Dom7) {\n      compareWith = selector.nodeType ? [selector] : selector;\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    }\n    return false;\n  }\n  function index() {\n    var child = this[0];\n    var i;\n    if (child) {\n      i = 0;\n      // eslint-disable-next-line\n      while ((child = child.previousSibling) !== null) {\n        if (child.nodeType === 1) { i += 1; }\n      }\n      return i;\n    }\n    return undefined;\n  }\n  // eslint-disable-next-line\n  function eq(index) {\n    if (typeof index === 'undefined') { return this; }\n    var length = this.length;\n    var returnIndex;\n    if (index > length - 1) {\n      return new Dom7([]);\n    }\n    if (index < 0) {\n      returnIndex = length + index;\n      if (returnIndex < 0) { return new Dom7([]); }\n      return new Dom7([this[returnIndex]]);\n    }\n    return new Dom7([this[index]]);\n  }\n  function append() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var newChild;\n\n    for (var k = 0; k < args.length; k += 1) {\n      newChild = args[k];\n      for (var i = 0; i < this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          var tempDiv = doc.createElement('div');\n          tempDiv.innerHTML = newChild;\n          while (tempDiv.firstChild) {\n            this[i].appendChild(tempDiv.firstChild);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (var j = 0; j < newChild.length; j += 1) {\n            this[i].appendChild(newChild[j]);\n          }\n        } else {\n          this[i].appendChild(newChild);\n        }\n      }\n    }\n\n    return this;\n  }\n  function prepend(newChild) {\n    var i;\n    var j;\n    for (i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = doc.createElement('div');\n        tempDiv.innerHTML = newChild;\n        for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n          this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (j = 0; j < newChild.length; j += 1) {\n          this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n        }\n      } else {\n        this[i].insertBefore(newChild, this[i].childNodes[0]);\n      }\n    }\n    return this;\n  }\n  function next(selector) {\n    if (this.length > 0) {\n      if (selector) {\n        if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n          return new Dom7([this[0].nextElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function nextAll(selector) {\n    var nextEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.nextElementSibling) {\n      var next = el.nextElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(next).is(selector)) { nextEls.push(next); }\n      } else { nextEls.push(next); }\n      el = next;\n    }\n    return new Dom7(nextEls);\n  }\n  function prev(selector) {\n    if (this.length > 0) {\n      var el = this[0];\n      if (selector) {\n        if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n          return new Dom7([el.previousElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function prevAll(selector) {\n    var prevEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.previousElementSibling) {\n      var prev = el.previousElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(prev).is(selector)) { prevEls.push(prev); }\n      } else { prevEls.push(prev); }\n      el = prev;\n    }\n    return new Dom7(prevEls);\n  }\n  function parent(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode !== null) {\n        if (selector) {\n          if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n        } else {\n          parents.push(this[i].parentNode);\n        }\n      }\n    }\n    return $(unique(parents));\n  }\n  function parents(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var parent = this[i].parentNode; // eslint-disable-line\n      while (parent) {\n        if (selector) {\n          if ($(parent).is(selector)) { parents.push(parent); }\n        } else {\n          parents.push(parent);\n        }\n        parent = parent.parentNode;\n      }\n    }\n    return $(unique(parents));\n  }\n  function closest(selector) {\n    var closest = this; // eslint-disable-line\n    if (typeof selector === 'undefined') {\n      return new Dom7([]);\n    }\n    if (!closest.is(selector)) {\n      closest = closest.parents(selector).eq(0);\n    }\n    return closest;\n  }\n  function find(selector) {\n    var foundElements = [];\n    for (var i = 0; i < this.length; i += 1) {\n      var found = this[i].querySelectorAll(selector);\n      for (var j = 0; j < found.length; j += 1) {\n        foundElements.push(found[j]);\n      }\n    }\n    return new Dom7(foundElements);\n  }\n  function children(selector) {\n    var children = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var childNodes = this[i].childNodes;\n\n      for (var j = 0; j < childNodes.length; j += 1) {\n        if (!selector) {\n          if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n        } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n          children.push(childNodes[j]);\n        }\n      }\n    }\n    return new Dom7(unique(children));\n  }\n  function remove() {\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n    }\n    return this;\n  }\n  function add() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var dom = this;\n    var i;\n    var j;\n    for (i = 0; i < args.length; i += 1) {\n      var toAdd = $(args[i]);\n      for (j = 0; j < toAdd.length; j += 1) {\n        dom[dom.length] = toAdd[j];\n        dom.length += 1;\n      }\n    }\n    return dom;\n  }\n\n  var Methods = {\n    addClass: addClass,\n    removeClass: removeClass,\n    hasClass: hasClass,\n    toggleClass: toggleClass,\n    attr: attr,\n    removeAttr: removeAttr,\n    data: data,\n    transform: transform,\n    transition: transition,\n    on: on,\n    off: off,\n    trigger: trigger,\n    transitionEnd: transitionEnd,\n    outerWidth: outerWidth,\n    outerHeight: outerHeight,\n    offset: offset,\n    css: css,\n    each: each,\n    html: html,\n    text: text,\n    is: is,\n    index: index,\n    eq: eq,\n    append: append,\n    prepend: prepend,\n    next: next,\n    nextAll: nextAll,\n    prev: prev,\n    prevAll: prevAll,\n    parent: parent,\n    parents: parents,\n    closest: closest,\n    find: find,\n    children: children,\n    remove: remove,\n    add: add,\n    styles: styles,\n  };\n\n  Object.keys(Methods).forEach(function (methodName) {\n    $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n  });\n\n  var Utils = {\n    deleteProps: function deleteProps(obj) {\n      var object = obj;\n      Object.keys(object).forEach(function (key) {\n        try {\n          object[key] = null;\n        } catch (e) {\n          // no getter for object\n        }\n        try {\n          delete object[key];\n        } catch (e) {\n          // something got wrong\n        }\n      });\n    },\n    nextTick: function nextTick(callback, delay) {\n      if ( delay === void 0 ) delay = 0;\n\n      return setTimeout(callback, delay);\n    },\n    now: function now() {\n      return Date.now();\n    },\n    getTranslate: function getTranslate(el, axis) {\n      if ( axis === void 0 ) axis = 'x';\n\n      var matrix;\n      var curTransform;\n      var transformMatrix;\n\n      var curStyle = win.getComputedStyle(el, null);\n\n      if (win.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n        if (curTransform.split(',').length > 6) {\n          curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n        }\n        // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n        transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n      } else {\n        transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n        matrix = transformMatrix.toString().split(',');\n      }\n\n      if (axis === 'x') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[4]); }\n      }\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[5]); }\n      }\n      return curTransform || 0;\n    },\n    parseUrlQuery: function parseUrlQuery(url) {\n      var query = {};\n      var urlToParse = url || win.location.href;\n      var i;\n      var params;\n      var param;\n      var length;\n      if (typeof urlToParse === 'string' && urlToParse.length) {\n        urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n        params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n        length = params.length;\n\n        for (i = 0; i < length; i += 1) {\n          param = params[i].replace(/#\\S+/g, '').split('=');\n          query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n        }\n      }\n      return query;\n    },\n    isObject: function isObject(o) {\n      return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n    },\n    extend: function extend() {\n      var args = [], len$1 = arguments.length;\n      while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n      var to = Object(args[0]);\n      for (var i = 1; i < args.length; i += 1) {\n        var nextSource = args[i];\n        if (nextSource !== undefined && nextSource !== null) {\n          var keysArray = Object.keys(Object(nextSource));\n          for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n            var nextKey = keysArray[nextIndex];\n            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n            if (desc !== undefined && desc.enumerable) {\n              if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                to[nextKey] = {};\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n      }\n      return to;\n    },\n  };\n\n  var Support = (function Support() {\n    var testDiv = doc.createElement('div');\n    return {\n      touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n        return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n      }()),\n\n      pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || ('maxTouchPoints' in win.navigator && win.navigator.maxTouchPoints > 0)),\n      prefixedPointerEvents: !!win.navigator.msPointerEnabled,\n\n      transition: (function checkTransition() {\n        var style = testDiv.style;\n        return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);\n      }()),\n      transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {\n        var style = testDiv.style;\n        return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);\n      }()),\n\n      flexbox: (function checkFlexbox() {\n        var style = testDiv.style;\n        var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n        for (var i = 0; i < styles.length; i += 1) {\n          if (styles[i] in style) { return true; }\n        }\n        return false;\n      }()),\n\n      observer: (function checkObserver() {\n        return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n      }()),\n\n      passiveListener: (function checkPassiveListener() {\n        var supportsPassive = false;\n        try {\n          var opts = Object.defineProperty({}, 'passive', {\n            // eslint-disable-next-line\n            get: function get() {\n              supportsPassive = true;\n            },\n          });\n          win.addEventListener('testPassiveListener', null, opts);\n        } catch (e) {\n          // No support\n        }\n        return supportsPassive;\n      }()),\n\n      gestures: (function checkGestures() {\n        return 'ongesturestart' in win;\n      }()),\n    };\n  }());\n\n  var Browser = (function Browser() {\n    function isSafari() {\n      var ua = win.navigator.userAgent.toLowerCase();\n      return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n    }\n    return {\n      isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),\n      isEdge: !!win.navigator.userAgent.match(/Edge/g),\n      isSafari: isSafari(),\n      isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n    };\n  }());\n\n  var SwiperClass = function SwiperClass(params) {\n    if ( params === void 0 ) params = {};\n\n    var self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach(function (eventName) {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  };\n\n  var staticAccessors = { components: { configurable: true } };\n\n  SwiperClass.prototype.on = function on (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.once = function once (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    function onceHandler() {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n      handler.apply(self, args);\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  };\n\n  SwiperClass.prototype.off = function off (events, handler) {\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach(function (eventHandler, index) {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.emit = function emit () {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    var events;\n    var data;\n    var context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        var handlers = [];\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  };\n\n  SwiperClass.prototype.useModules = function useModules (modulesParams) {\n      if ( modulesParams === void 0 ) modulesParams = {};\n\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach(function (modulePropName) {\n          var moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  };\n\n  staticAccessors.components.set = function (components) {\n    var Class = this;\n    if (!Class.use) { return; }\n    Class.use(components);\n  };\n\n  SwiperClass.installModule = function installModule (module) {\n      var params = [], len = arguments.length - 1;\n      while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n    var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach(function (key) {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach(function (key) {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  };\n\n  SwiperClass.use = function use (module) {\n      var params = [], len = arguments.length - 1;\n      while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (Array.isArray(module)) {\n      module.forEach(function (m) { return Class.installModule(m); });\n      return Class;\n    }\n    return Class.installModule.apply(Class, [ module ].concat( params ));\n  };\n\n  Object.defineProperties( SwiperClass, staticAccessors );\n\n  function updateSize () {\n    var swiper = this;\n    var width;\n    var height;\n    var $el = swiper.$el;\n    if (typeof swiper.params.width !== 'undefined') {\n      width = swiper.params.width;\n    } else {\n      width = $el[0].clientWidth;\n    }\n    if (typeof swiper.params.height !== 'undefined') {\n      height = swiper.params.height;\n    } else {\n      height = $el[0].clientHeight;\n    }\n    if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n      return;\n    }\n\n    // Subtract paddings\n    width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n    height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n    Utils.extend(swiper, {\n      width: width,\n      height: height,\n      size: swiper.isHorizontal() ? width : height,\n    });\n  }\n\n  function updateSlides () {\n    var swiper = this;\n    var params = swiper.params;\n\n    var $wrapperEl = swiper.$wrapperEl;\n    var swiperSize = swiper.size;\n    var rtl = swiper.rtlTranslate;\n    var wrongRTL = swiper.wrongRTL;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n    var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n    var snapGrid = [];\n    var slidesGrid = [];\n    var slidesSizesGrid = [];\n\n    var offsetBefore = params.slidesOffsetBefore;\n    if (typeof offsetBefore === 'function') {\n      offsetBefore = params.slidesOffsetBefore.call(swiper);\n    }\n\n    var offsetAfter = params.slidesOffsetAfter;\n    if (typeof offsetAfter === 'function') {\n      offsetAfter = params.slidesOffsetAfter.call(swiper);\n    }\n\n    var previousSnapGridLength = swiper.snapGrid.length;\n    var previousSlidesGridLength = swiper.snapGrid.length;\n\n    var spaceBetween = params.spaceBetween;\n    var slidePosition = -offsetBefore;\n    var prevSlideSize = 0;\n    var index = 0;\n    if (typeof swiperSize === 'undefined') {\n      return;\n    }\n    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n      spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n    }\n\n    swiper.virtualSize = -spaceBetween;\n\n    // reset margins\n    if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n    else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n    var slidesNumberEvenToRows;\n    if (params.slidesPerColumn > 1) {\n      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n        slidesNumberEvenToRows = slidesLength;\n      } else {\n        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n      }\n      if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n      }\n    }\n\n    // Calc slides\n    var slideSize;\n    var slidesPerColumn = params.slidesPerColumn;\n    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n    for (var i = 0; i < slidesLength; i += 1) {\n      slideSize = 0;\n      var slide = slides.eq(i);\n      if (params.slidesPerColumn > 1) {\n        // Set slides order\n        var newSlideOrderIndex = (void 0);\n        var column = (void 0);\n        var row = (void 0);\n        if (\n          (params.slidesPerColumnFill === 'column')\n          || (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1)\n        ) {\n          if (params.slidesPerColumnFill === 'column') {\n            column = Math.floor(i / slidesPerColumn);\n            row = i - (column * slidesPerColumn);\n            if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n              row += 1;\n              if (row >= slidesPerColumn) {\n                row = 0;\n                column += 1;\n              }\n            }\n          } else {\n            var groupIndex = Math.floor(i / params.slidesPerGroup);\n            row = Math.floor(i / params.slidesPerView) - groupIndex * params.slidesPerColumn;\n            column = i - row * params.slidesPerView - groupIndex * params.slidesPerView;\n          }\n          newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n          slide\n            .css({\n              '-webkit-box-ordinal-group': newSlideOrderIndex,\n              '-moz-box-ordinal-group': newSlideOrderIndex,\n              '-ms-flex-order': newSlideOrderIndex,\n              '-webkit-order': newSlideOrderIndex,\n              order: newSlideOrderIndex,\n            });\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - (row * slidesPerRow);\n        }\n        slide\n          .css(\n            (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n            (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n          )\n          .attr('data-swiper-column', column)\n          .attr('data-swiper-row', row);\n      }\n      if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n      if (params.slidesPerView === 'auto') {\n        var slideStyles = win.getComputedStyle(slide[0], null);\n        var currentTransform = slide[0].style.transform;\n        var currentWebKitTransform = slide[0].style.webkitTransform;\n        if (currentTransform) {\n          slide[0].style.transform = 'none';\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = 'none';\n        }\n        if (params.roundLengths) {\n          slideSize = swiper.isHorizontal()\n            ? slide.outerWidth(true)\n            : slide.outerHeight(true);\n        } else {\n          // eslint-disable-next-line\n          if (swiper.isHorizontal()) {\n            var width = parseFloat(slideStyles.getPropertyValue('width'));\n            var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n            var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n            var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n            var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n            var boxSizing = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing && boxSizing === 'border-box' && !Browser.isIE) {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n            }\n          } else {\n            var height = parseFloat(slideStyles.getPropertyValue('height'));\n            var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n            var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n            var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n            var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n            var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing$1 && boxSizing$1 === 'border-box' && !Browser.isIE) {\n              slideSize = height + marginTop + marginBottom;\n            } else {\n              slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n            }\n          }\n        }\n        if (currentTransform) {\n          slide[0].style.transform = currentTransform;\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = currentWebKitTransform;\n        }\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n      } else {\n        slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n        if (slides[i]) {\n          if (swiper.isHorizontal()) {\n            slides[i].style.width = slideSize + \"px\";\n          } else {\n            slides[i].style.height = slideSize + \"px\";\n          }\n        }\n      }\n      if (slides[i]) {\n        slides[i].swiperSlideSize = slideSize;\n      }\n      slidesSizesGrid.push(slideSize);\n\n\n      if (params.centeredSlides) {\n        slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n        if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n      } else {\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n        slidePosition = slidePosition + slideSize + spaceBetween;\n      }\n\n      swiper.virtualSize += slideSize + spaceBetween;\n\n      prevSlideSize = slideSize;\n\n      index += 1;\n    }\n    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n    var newSlidesGrid;\n\n    if (\n      rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n      $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n    }\n    if (!Support.flexbox || params.setWrapperSize) {\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n    }\n\n    if (params.slidesPerColumn > 1) {\n      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      if (params.centeredSlides) {\n        newSlidesGrid = [];\n        for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n          var slidesGridItem = snapGrid[i$1];\n          if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n          if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n        }\n        snapGrid = newSlidesGrid;\n      }\n    }\n\n    // Remove last grid elements depending on width\n    if (!params.centeredSlides) {\n      newSlidesGrid = [];\n      for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n        var slidesGridItem$1 = snapGrid[i$2];\n        if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n        if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n          newSlidesGrid.push(slidesGridItem$1);\n        }\n      }\n      snapGrid = newSlidesGrid;\n      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n        snapGrid.push(swiper.virtualSize - swiperSize);\n      }\n    }\n    if (snapGrid.length === 0) { snapGrid = [0]; }\n\n    if (params.spaceBetween !== 0) {\n      if (swiper.isHorizontal()) {\n        if (rtl) { slides.css({ marginLeft: (spaceBetween + \"px\") }); }\n        else { slides.css({ marginRight: (spaceBetween + \"px\") }); }\n      } else { slides.css({ marginBottom: (spaceBetween + \"px\") }); }\n    }\n\n    if (params.centerInsufficientSlides) {\n      var allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize -= params.spaceBetween;\n      if (allSlidesSize < swiperSize) {\n        var allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n        snapGrid.forEach(function (snap, snapIndex) {\n          snapGrid[snapIndex] = snap - allSlidesOffset;\n        });\n        slidesGrid.forEach(function (snap, snapIndex) {\n          slidesGrid[snapIndex] = snap + allSlidesOffset;\n        });\n      }\n    }\n\n    Utils.extend(swiper, {\n      slides: slides,\n      snapGrid: snapGrid,\n      slidesGrid: slidesGrid,\n      slidesSizesGrid: slidesSizesGrid,\n    });\n\n    if (slidesLength !== previousSlidesLength) {\n      swiper.emit('slidesLengthChange');\n    }\n    if (snapGrid.length !== previousSnapGridLength) {\n      if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n      swiper.emit('snapGridLengthChange');\n    }\n    if (slidesGrid.length !== previousSlidesGridLength) {\n      swiper.emit('slidesGridLengthChange');\n    }\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateSlidesOffset();\n    }\n  }\n\n  function updateAutoHeight (speed) {\n    var swiper = this;\n    var activeSlides = [];\n    var newHeight = 0;\n    var i;\n    if (typeof speed === 'number') {\n      swiper.setTransition(speed);\n    } else if (speed === true) {\n      swiper.setTransition(swiper.params.speed);\n    }\n    // Find slides currently in view\n    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) { break; }\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    } else {\n      activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n    }\n\n    // Find new height from highest slide in view\n    for (i = 0; i < activeSlides.length; i += 1) {\n      if (typeof activeSlides[i] !== 'undefined') {\n        var height = activeSlides[i].offsetHeight;\n        newHeight = height > newHeight ? height : newHeight;\n      }\n    }\n\n    // Update Height\n    if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n  }\n\n  function updateSlidesOffset () {\n    var swiper = this;\n    var slides = swiper.slides;\n    for (var i = 0; i < slides.length; i += 1) {\n      slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n    }\n  }\n\n  function updateSlidesProgress (translate) {\n    if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n    var swiper = this;\n    var params = swiper.params;\n\n    var slides = swiper.slides;\n    var rtl = swiper.rtlTranslate;\n\n    if (slides.length === 0) { return; }\n    if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n    var offsetCenter = -translate;\n    if (rtl) { offsetCenter = translate; }\n\n    // Visible Slides\n    slides.removeClass(params.slideVisibleClass);\n\n    swiper.visibleSlidesIndexes = [];\n    swiper.visibleSlides = [];\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var slide = slides[i];\n      var slideProgress = (\n        (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n      ) / (slide.swiperSlideSize + params.spaceBetween);\n      if (params.watchSlidesVisibility) {\n        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                  || (slideAfter > 1 && slideAfter <= swiper.size)\n                  || (slideBefore <= 0 && slideAfter >= swiper.size);\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n      }\n      slide.progress = rtl ? -slideProgress : slideProgress;\n    }\n    swiper.visibleSlides = $(swiper.visibleSlides);\n  }\n\n  function updateProgress (translate) {\n    if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n    var swiper = this;\n    var params = swiper.params;\n\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    var progress = swiper.progress;\n    var isBeginning = swiper.isBeginning;\n    var isEnd = swiper.isEnd;\n    var wasBeginning = isBeginning;\n    var wasEnd = isEnd;\n    if (translatesDiff === 0) {\n      progress = 0;\n      isBeginning = true;\n      isEnd = true;\n    } else {\n      progress = (translate - swiper.minTranslate()) / (translatesDiff);\n      isBeginning = progress <= 0;\n      isEnd = progress >= 1;\n    }\n    Utils.extend(swiper, {\n      progress: progress,\n      isBeginning: isBeginning,\n      isEnd: isEnd,\n    });\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n    if (isBeginning && !wasBeginning) {\n      swiper.emit('reachBeginning toEdge');\n    }\n    if (isEnd && !wasEnd) {\n      swiper.emit('reachEnd toEdge');\n    }\n    if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n      swiper.emit('fromEdge');\n    }\n\n    swiper.emit('progress', progress);\n  }\n\n  function updateSlidesClasses () {\n    var swiper = this;\n\n    var slides = swiper.slides;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n    var realIndex = swiper.realIndex;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n\n    slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n    var activeSlide;\n    if (isVirtual) {\n      activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n    } else {\n      activeSlide = slides.eq(activeIndex);\n    }\n\n    // Active classes\n    activeSlide.addClass(params.slideActiveClass);\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (activeSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n          .addClass(params.slideDuplicateActiveClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n          .addClass(params.slideDuplicateActiveClass);\n      }\n    }\n    // Next Slide\n    var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n    if (params.loop && nextSlide.length === 0) {\n      nextSlide = slides.eq(0);\n      nextSlide.addClass(params.slideNextClass);\n    }\n    // Prev Slide\n    var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n    if (params.loop && prevSlide.length === 0) {\n      prevSlide = slides.eq(-1);\n      prevSlide.addClass(params.slidePrevClass);\n    }\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (nextSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicateNextClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicateNextClass);\n      }\n      if (prevSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicatePrevClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicatePrevClass);\n      }\n    }\n  }\n\n  function updateActiveIndex (newActiveIndex) {\n    var swiper = this;\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var params = swiper.params;\n    var previousIndex = swiper.activeIndex;\n    var previousRealIndex = swiper.realIndex;\n    var previousSnapIndex = swiper.snapIndex;\n    var activeIndex = newActiveIndex;\n    var snapIndex;\n    if (typeof activeIndex === 'undefined') {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (typeof slidesGrid[i + 1] !== 'undefined') {\n          if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n            activeIndex = i;\n          } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n            activeIndex = i + 1;\n          }\n        } else if (translate >= slidesGrid[i]) {\n          activeIndex = i;\n        }\n      }\n      // Normalize slideIndex\n      if (params.normalizeSlideIndex) {\n        if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n      }\n    }\n    if (snapGrid.indexOf(translate) >= 0) {\n      snapIndex = snapGrid.indexOf(translate);\n    } else {\n      snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n    }\n    if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n    if (activeIndex === previousIndex) {\n      if (snapIndex !== previousSnapIndex) {\n        swiper.snapIndex = snapIndex;\n        swiper.emit('snapIndexChange');\n      }\n      return;\n    }\n\n    // Get real index\n    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n    Utils.extend(swiper, {\n      snapIndex: snapIndex,\n      realIndex: realIndex,\n      previousIndex: previousIndex,\n      activeIndex: activeIndex,\n    });\n    swiper.emit('activeIndexChange');\n    swiper.emit('snapIndexChange');\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    if (swiper.initialized || swiper.runCallbacksOnInit) {\n      swiper.emit('slideChange');\n    }\n  }\n\n  function updateClickedSlide (e) {\n    var swiper = this;\n    var params = swiper.params;\n    var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n    var slideFound = false;\n    if (slide) {\n      for (var i = 0; i < swiper.slides.length; i += 1) {\n        if (swiper.slides[i] === slide) { slideFound = true; }\n      }\n    }\n\n    if (slide && slideFound) {\n      swiper.clickedSlide = slide;\n      if (swiper.virtual && swiper.params.virtual.enabled) {\n        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n      } else {\n        swiper.clickedIndex = $(slide).index();\n      }\n    } else {\n      swiper.clickedSlide = undefined;\n      swiper.clickedIndex = undefined;\n      return;\n    }\n    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n      swiper.slideToClickedSlide();\n    }\n  }\n\n  var update = {\n    updateSize: updateSize,\n    updateSlides: updateSlides,\n    updateAutoHeight: updateAutoHeight,\n    updateSlidesOffset: updateSlidesOffset,\n    updateSlidesProgress: updateSlidesProgress,\n    updateProgress: updateProgress,\n    updateSlidesClasses: updateSlidesClasses,\n    updateActiveIndex: updateActiveIndex,\n    updateClickedSlide: updateClickedSlide,\n  };\n\n  function getTranslate (axis) {\n    if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n    var swiper = this;\n\n    var params = swiper.params;\n    var rtl = swiper.rtlTranslate;\n    var translate = swiper.translate;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    if (params.virtualTranslate) {\n      return rtl ? -translate : translate;\n    }\n\n    var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n    if (rtl) { currentTranslate = -currentTranslate; }\n\n    return currentTranslate || 0;\n  }\n\n  function setTranslate (translate, byController) {\n    var swiper = this;\n    var rtl = swiper.rtlTranslate;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var progress = swiper.progress;\n    var x = 0;\n    var y = 0;\n    var z = 0;\n\n    if (swiper.isHorizontal()) {\n      x = rtl ? -translate : translate;\n    } else {\n      y = translate;\n    }\n\n    if (params.roundLengths) {\n      x = Math.floor(x);\n      y = Math.floor(y);\n    }\n\n    if (!params.virtualTranslate) {\n      if (Support.transforms3d) { $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\")); }\n      else { $wrapperEl.transform((\"translate(\" + x + \"px, \" + y + \"px)\")); }\n    }\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? x : y;\n\n    // Check if we need to update progress\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== progress) {\n      swiper.updateProgress(translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, byController);\n  }\n\n  function minTranslate () {\n    return (-this.snapGrid[0]);\n  }\n\n  function maxTranslate () {\n    return (-this.snapGrid[this.snapGrid.length - 1]);\n  }\n\n  var translate = {\n    getTranslate: getTranslate,\n    setTranslate: setTranslate,\n    minTranslate: minTranslate,\n    maxTranslate: maxTranslate,\n  };\n\n  function setTransition (duration, byController) {\n    var swiper = this;\n\n    swiper.$wrapperEl.transition(duration);\n\n    swiper.emit('setTransition', duration, byController);\n  }\n\n  function transitionStart (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var params = swiper.params;\n    var previousIndex = swiper.previousIndex;\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionStart');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionStart');\n        return;\n      }\n      swiper.emit('slideChangeTransitionStart');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionStart');\n      } else {\n        swiper.emit('slidePrevTransitionStart');\n      }\n    }\n  }\n\n  function transitionEnd$1 (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var previousIndex = swiper.previousIndex;\n    swiper.animating = false;\n    swiper.setTransition(0);\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionEnd');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionEnd');\n        return;\n      }\n      swiper.emit('slideChangeTransitionEnd');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionEnd');\n      } else {\n        swiper.emit('slidePrevTransitionEnd');\n      }\n    }\n  }\n\n  var transition$1 = {\n    setTransition: setTransition,\n    transitionStart: transitionStart,\n    transitionEnd: transitionEnd$1,\n  };\n\n  function slideTo (index, speed, runCallbacks, internal) {\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var slideIndex = index;\n    if (slideIndex < 0) { slideIndex = 0; }\n\n    var params = swiper.params;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var previousIndex = swiper.previousIndex;\n    var activeIndex = swiper.activeIndex;\n    var rtl = swiper.rtlTranslate;\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n    if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n      swiper.emit('beforeSlideChangeStart');\n    }\n\n    var translate = -snapGrid[snapIndex];\n\n    // Update progress\n    swiper.updateProgress(translate);\n\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n          slideIndex = i;\n        }\n      }\n    }\n    // Directions locks\n    if (swiper.initialized && slideIndex !== activeIndex) {\n      if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n        if ((activeIndex || 0) !== slideIndex) { return false; }\n      }\n    }\n\n    var direction;\n    if (slideIndex > activeIndex) { direction = 'next'; }\n    else if (slideIndex < activeIndex) { direction = 'prev'; }\n    else { direction = 'reset'; }\n\n\n    // Update Index\n    if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n      swiper.updateActiveIndex(slideIndex);\n      // Update Height\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n      swiper.updateSlidesClasses();\n      if (params.effect !== 'slide') {\n        swiper.setTranslate(translate);\n      }\n      if (direction !== 'reset') {\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      }\n      return false;\n    }\n\n    if (speed === 0 || !Support.transition) {\n      swiper.setTransition(0);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      if (!swiper.animating) {\n        swiper.animating = true;\n        if (!swiper.onSlideToWrapperTransitionEnd) {\n          swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            swiper.onSlideToWrapperTransitionEnd = null;\n            delete swiper.onSlideToWrapperTransitionEnd;\n            swiper.transitionEnd(runCallbacks, direction);\n          };\n        }\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  function slideToLoop (index, speed, runCallbacks, internal) {\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var newIndex = index;\n    if (swiper.params.loop) {\n      newIndex += swiper.loopedSlides;\n    }\n\n    return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideNext (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n      return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n    }\n    return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slidePrev (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var rtlTranslate = swiper.rtlTranslate;\n\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n    function normalize(val) {\n      if (val < 0) { return -Math.floor(Math.abs(val)); }\n      return Math.floor(val);\n    }\n    var normalizedTranslate = normalize(translate);\n    var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n    var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n    var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n    var prevIndex;\n    if (typeof prevSnap !== 'undefined') {\n      prevIndex = slidesGrid.indexOf(prevSnap);\n      if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n    }\n    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideReset (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideToClosest (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var index = swiper.activeIndex;\n    var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);\n\n    if (snapIndex < swiper.snapGrid.length - 1) {\n      var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n      var currentSnap = swiper.snapGrid[snapIndex];\n      var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n      if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {\n        index = swiper.params.slidesPerGroup;\n      }\n    }\n\n    return swiper.slideTo(index, speed, runCallbacks, internal);\n  }\n\n  function slideToClickedSlide () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n    var slideToIndex = swiper.clickedIndex;\n    var realIndex;\n    if (params.loop) {\n      if (swiper.animating) { return; }\n      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      if (params.centeredSlides) {\n        if (\n          (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n          || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n        ) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl\n            .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n            .eq(0)\n            .index();\n\n          Utils.nextTick(function () {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n          .eq(0)\n          .index();\n\n        Utils.nextTick(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n\n  var slide = {\n    slideTo: slideTo,\n    slideToLoop: slideToLoop,\n    slideNext: slideNext,\n    slidePrev: slidePrev,\n    slideReset: slideReset,\n    slideToClosest: slideToClosest,\n    slideToClickedSlide: slideToClickedSlide,\n  };\n\n  function loopCreate () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    // Remove duplicated slides\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n    var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n    if (params.loopFillGroupWithBlank) {\n      var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n      if (blankSlidesNum !== params.slidesPerGroup) {\n        for (var i = 0; i < blankSlidesNum; i += 1) {\n          var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n          $wrapperEl.append(blankNode);\n        }\n        slides = $wrapperEl.children((\".\" + (params.slideClass)));\n      }\n    }\n\n    if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n    swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n    swiper.loopedSlides += params.loopAdditionalSlides;\n    if (swiper.loopedSlides > slides.length) {\n      swiper.loopedSlides = slides.length;\n    }\n\n    var prependSlides = [];\n    var appendSlides = [];\n    slides.each(function (index, el) {\n      var slide = $(el);\n      if (index < swiper.loopedSlides) { appendSlides.push(el); }\n      if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n      slide.attr('data-swiper-slide-index', index);\n    });\n    for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n      $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n    for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n      $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n  }\n\n  function loopFix () {\n    var swiper = this;\n    var params = swiper.params;\n    var activeIndex = swiper.activeIndex;\n    var slides = swiper.slides;\n    var loopedSlides = swiper.loopedSlides;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var allowSlideNext = swiper.allowSlideNext;\n    var snapGrid = swiper.snapGrid;\n    var rtl = swiper.rtlTranslate;\n    var newIndex;\n    swiper.allowSlidePrev = true;\n    swiper.allowSlideNext = true;\n\n    var snapTranslate = -snapGrid[activeIndex];\n    var diff = snapTranslate - swiper.getTranslate();\n\n\n    // Fix For Negative Oversliding\n    if (activeIndex < loopedSlides) {\n      newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n      newIndex += loopedSlides;\n      var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {\n      // Fix For Positive Oversliding\n      newIndex = -slides.length + activeIndex + loopedSlides;\n      newIndex += loopedSlides;\n      var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged$1 && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n  }\n\n  function loopDestroy () {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var slides = swiper.slides;\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n    slides.removeAttr('data-swiper-slide-index');\n  }\n\n  var loop = {\n    loopCreate: loopCreate,\n    loopFix: loopFix,\n    loopDestroy: loopDestroy,\n  };\n\n  function setGrabCursor (moving) {\n    var swiper = this;\n    if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n    var el = swiper.el;\n    el.style.cursor = 'move';\n    el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n    el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n    el.style.cursor = moving ? 'grabbing' : 'grab';\n  }\n\n  function unsetGrabCursor () {\n    var swiper = this;\n    if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n    swiper.el.style.cursor = '';\n  }\n\n  var grabCursor = {\n    setGrabCursor: setGrabCursor,\n    unsetGrabCursor: unsetGrabCursor,\n  };\n\n  function appendSlide (slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.append(slides[i]); }\n      }\n    } else {\n      $wrapperEl.append(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n  }\n\n  function prependSlide (slides) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    var newActiveIndex = activeIndex + 1;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n      }\n      newActiveIndex = activeIndex + slides.length;\n    } else {\n      $wrapperEl.prepend(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n\n  function addSlide (index, slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var baseLength = swiper.slides.length;\n    if (index <= 0) {\n      swiper.prependSlide(slides);\n      return;\n    }\n    if (index >= baseLength) {\n      swiper.appendSlide(slides);\n      return;\n    }\n    var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n    var slidesBuffer = [];\n    for (var i = baseLength - 1; i >= index; i -= 1) {\n      var currentSlide = swiper.slides.eq(i);\n      currentSlide.remove();\n      slidesBuffer.unshift(currentSlide);\n    }\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n        if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n      }\n      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n      $wrapperEl.append(slidesBuffer[i$2]);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeSlide (slidesIndexes) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var newActiveIndex = activeIndexBuffer;\n    var indexToRemove;\n\n    if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n      for (var i = 0; i < slidesIndexes.length; i += 1) {\n        indexToRemove = slidesIndexes[i];\n        if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n        if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n      }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    } else {\n      indexToRemove = slidesIndexes;\n      if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n      if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeAllSlides () {\n    var swiper = this;\n\n    var slidesIndexes = [];\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      slidesIndexes.push(i);\n    }\n    swiper.removeSlide(slidesIndexes);\n  }\n\n  var manipulation = {\n    appendSlide: appendSlide,\n    prependSlide: prependSlide,\n    addSlide: addSlide,\n    removeSlide: removeSlide,\n    removeAllSlides: removeAllSlides,\n  };\n\n  var Device = (function Device() {\n    var ua = win.navigator.userAgent;\n\n    var device = {\n      ios: false,\n      android: false,\n      androidChrome: false,\n      desktop: false,\n      windows: false,\n      iphone: false,\n      ipod: false,\n      ipad: false,\n      cordova: win.cordova || win.phonegap,\n      phonegap: win.cordova || win.phonegap,\n    };\n\n    var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n    var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n    var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n\n    // Windows\n    if (windows) {\n      device.os = 'windows';\n      device.osVersion = windows[2];\n      device.windows = true;\n    }\n    // Android\n    if (android && !windows) {\n      device.os = 'android';\n      device.osVersion = android[2];\n      device.android = true;\n      device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n    }\n    if (ipad || iphone || ipod) {\n      device.os = 'ios';\n      device.ios = true;\n    }\n    // iOS\n    if (iphone && !ipod) {\n      device.osVersion = iphone[2].replace(/_/g, '.');\n      device.iphone = true;\n    }\n    if (ipad) {\n      device.osVersion = ipad[2].replace(/_/g, '.');\n      device.ipad = true;\n    }\n    if (ipod) {\n      device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n      device.iphone = true;\n    }\n    // iOS 8+ changed UA\n    if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n      if (device.osVersion.split('.')[0] === '10') {\n        device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n      }\n    }\n\n    // Desktop\n    device.desktop = !(device.os || device.android || device.webView);\n\n    // Webview\n    device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n    // Minimal UI\n    if (device.os && device.os === 'ios') {\n      var osVersionArr = device.osVersion.split('.');\n      var metaViewport = doc.querySelector('meta[name=\"viewport\"]');\n      device.minimalUi = !device.webView\n        && (ipod || iphone)\n        && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7)\n        && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n    }\n\n    // Pixel Ratio\n    device.pixelRatio = win.devicePixelRatio || 1;\n\n    // Export object\n    return device;\n  }());\n\n  function onTouchStart (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return;\n    }\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    data.isTouchEvent = e.type === 'touchstart';\n    if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n    if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n    if (data.isTouched && data.isMoved) { return; }\n    if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n      swiper.allowClick = true;\n      return;\n    }\n    if (params.swipeHandler) {\n      if (!$(e).closest(params.swipeHandler)[0]) { return; }\n    }\n\n    touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    var startX = touches.currentX;\n    var startY = touches.currentY;\n\n    // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n    if (\n      edgeSwipeDetection\n      && ((startX <= edgeSwipeThreshold)\n      || (startX >= win.screen.width - edgeSwipeThreshold))\n    ) {\n      return;\n    }\n\n    Utils.extend(data, {\n      isTouched: true,\n      isMoved: false,\n      allowTouchCallbacks: true,\n      isScrolling: undefined,\n      startMoving: undefined,\n    });\n\n    touches.startX = startX;\n    touches.startY = startY;\n    data.touchStartTime = Utils.now();\n    swiper.allowClick = true;\n    swiper.updateSize();\n    swiper.swipeDirection = undefined;\n    if (params.threshold > 0) { data.allowThresholdMove = false; }\n    if (e.type !== 'touchstart') {\n      var preventDefault = true;\n      if ($(e.target).is(data.formElements)) { preventDefault = false; }\n      if (\n        doc.activeElement\n        && $(doc.activeElement).is(data.formElements)\n        && doc.activeElement !== e.target\n      ) {\n        doc.activeElement.blur();\n      }\n\n      var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n      if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n        e.preventDefault();\n      }\n    }\n    swiper.emit('touchStart', e);\n  }\n\n  function onTouchMove (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (!data.isTouched) {\n      if (data.startMoving && data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n      return;\n    }\n    if (data.isTouchEvent && e.type === 'mousemove') { return; }\n    var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n    if (e.preventedByNestedSwiper) {\n      touches.startX = pageX;\n      touches.startY = pageY;\n      return;\n    }\n    if (!swiper.allowTouchMove) {\n      // isMoved = true;\n      swiper.allowClick = false;\n      if (data.isTouched) {\n        Utils.extend(touches, {\n          startX: pageX,\n          startY: pageY,\n          currentX: pageX,\n          currentY: pageY,\n        });\n        data.touchStartTime = Utils.now();\n      }\n      return;\n    }\n    if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n      if (swiper.isVertical()) {\n        // Vertical\n        if (\n          (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n          || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n        ) {\n          data.isTouched = false;\n          data.isMoved = false;\n          return;\n        }\n      } else if (\n        (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n        || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n      ) {\n        return;\n      }\n    }\n    if (data.isTouchEvent && doc.activeElement) {\n      if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n        data.isMoved = true;\n        swiper.allowClick = false;\n        return;\n      }\n    }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchMove', e);\n    }\n    if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n    touches.currentX = pageX;\n    touches.currentY = pageY;\n\n    var diffX = touches.currentX - touches.startX;\n    var diffY = touches.currentY - touches.startY;\n    if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n    if (typeof data.isScrolling === 'undefined') {\n      var touchAngle;\n      if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n        data.isScrolling = false;\n      } else {\n        // eslint-disable-next-line\n        if ((diffX * diffX) + (diffY * diffY) >= 25) {\n          touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n        }\n      }\n    }\n    if (data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    if (typeof data.startMoving === 'undefined') {\n      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n        data.startMoving = true;\n      }\n    }\n    if (data.isScrolling) {\n      data.isTouched = false;\n      return;\n    }\n    if (!data.startMoving) {\n      return;\n    }\n    swiper.allowClick = false;\n    e.preventDefault();\n    if (params.touchMoveStopPropagation && !params.nested) {\n      e.stopPropagation();\n    }\n\n    if (!data.isMoved) {\n      if (params.loop) {\n        swiper.loopFix();\n      }\n      data.startTranslate = swiper.getTranslate();\n      swiper.setTransition(0);\n      if (swiper.animating) {\n        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n      }\n      data.allowMomentumBounce = false;\n      // Grab Cursor\n      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(true);\n      }\n      swiper.emit('sliderFirstMove', e);\n    }\n    swiper.emit('sliderMove', e);\n    data.isMoved = true;\n\n    var diff = swiper.isHorizontal() ? diffX : diffY;\n    touches.diff = diff;\n\n    diff *= params.touchRatio;\n    if (rtl) { diff = -diff; }\n\n    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n    data.currentTranslate = diff + data.startTranslate;\n\n    var disableParentSwiper = true;\n    var resistanceRatio = params.resistanceRatio;\n    if (params.touchReleaseOnEdges) {\n      resistanceRatio = 0;\n    }\n    if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n    } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n    }\n\n    if (disableParentSwiper) {\n      e.preventedByNestedSwiper = true;\n    }\n\n    // Directions locks\n    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n\n\n    // Threshold\n    if (params.threshold > 0) {\n      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n        if (!data.allowThresholdMove) {\n          data.allowThresholdMove = true;\n          touches.startX = touches.currentX;\n          touches.startY = touches.currentY;\n          data.currentTranslate = data.startTranslate;\n          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n          return;\n        }\n      } else {\n        data.currentTranslate = data.startTranslate;\n        return;\n      }\n    }\n\n    if (!params.followFinger) { return; }\n\n    // Update active index in free mode\n    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    if (params.freeMode) {\n      // Velocity\n      if (data.velocities.length === 0) {\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n          time: data.touchStartTime,\n        });\n      }\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n        time: Utils.now(),\n      });\n    }\n    // Update progress\n    swiper.updateProgress(data.currentTranslate);\n    // Update translate\n    swiper.setTranslate(data.currentTranslate);\n  }\n\n  function onTouchEnd (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var $wrapperEl = swiper.$wrapperEl;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchEnd', e);\n    }\n    data.allowTouchCallbacks = false;\n    if (!data.isTouched) {\n      if (data.isMoved && params.grabCursor) {\n        swiper.setGrabCursor(false);\n      }\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    // Return Grab Cursor\n    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(false);\n    }\n\n    // Time diff\n    var touchEndTime = Utils.now();\n    var timeDiff = touchEndTime - data.touchStartTime;\n\n    // Tap, doubleTap, Click\n    if (swiper.allowClick) {\n      swiper.updateClickedSlide(e);\n      swiper.emit('tap', e);\n      if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {\n        if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n        data.clickTimeout = Utils.nextTick(function () {\n          if (!swiper || swiper.destroyed) { return; }\n          swiper.emit('click', e);\n        }, 300);\n      }\n      if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n        if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n        swiper.emit('doubleTap', e);\n      }\n    }\n\n    data.lastClickTime = Utils.now();\n    Utils.nextTick(function () {\n      if (!swiper.destroyed) { swiper.allowClick = true; }\n    });\n\n    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n\n    var currentPos;\n    if (params.followFinger) {\n      currentPos = rtl ? swiper.translate : -swiper.translate;\n    } else {\n      currentPos = -data.currentTranslate;\n    }\n\n    if (params.freeMode) {\n      if (currentPos < -swiper.minTranslate()) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (currentPos > -swiper.maxTranslate()) {\n        if (swiper.slides.length < snapGrid.length) {\n          swiper.slideTo(snapGrid.length - 1);\n        } else {\n          swiper.slideTo(swiper.slides.length - 1);\n        }\n        return;\n      }\n\n      if (params.freeModeMomentum) {\n        if (data.velocities.length > 1) {\n          var lastMoveEvent = data.velocities.pop();\n          var velocityEvent = data.velocities.pop();\n\n          var distance = lastMoveEvent.position - velocityEvent.position;\n          var time = lastMoveEvent.time - velocityEvent.time;\n          swiper.velocity = distance / time;\n          swiper.velocity /= 2;\n          if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n            swiper.velocity = 0;\n          }\n          // this implies that the user stopped moving a finger then released.\n          // There would be no events with distance zero, so the last event is stale.\n          if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n            swiper.velocity = 0;\n          }\n        } else {\n          swiper.velocity = 0;\n        }\n        swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n        data.velocities.length = 0;\n        var momentumDuration = 1000 * params.freeModeMomentumRatio;\n        var momentumDistance = swiper.velocity * momentumDuration;\n\n        var newPosition = swiper.translate + momentumDistance;\n        if (rtl) { newPosition = -newPosition; }\n\n        var doBounce = false;\n        var afterBouncePosition;\n        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n        var needsLoopFix;\n        if (newPosition < swiper.maxTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n              newPosition = swiper.maxTranslate() - bounceAmount;\n            }\n            afterBouncePosition = swiper.maxTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.maxTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (newPosition > swiper.minTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition - swiper.minTranslate() > bounceAmount) {\n              newPosition = swiper.minTranslate() + bounceAmount;\n            }\n            afterBouncePosition = swiper.minTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.minTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (params.freeModeSticky) {\n          var nextSlide;\n          for (var j = 0; j < snapGrid.length; j += 1) {\n            if (snapGrid[j] > -newPosition) {\n              nextSlide = j;\n              break;\n            }\n          }\n\n          if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n            newPosition = snapGrid[nextSlide];\n          } else {\n            newPosition = snapGrid[nextSlide - 1];\n          }\n          newPosition = -newPosition;\n        }\n        if (needsLoopFix) {\n          swiper.once('transitionEnd', function () {\n            swiper.loopFix();\n          });\n        }\n        // Fix duration\n        if (swiper.velocity !== 0) {\n          if (rtl) {\n            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n          } else {\n            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n          }\n        } else if (params.freeModeSticky) {\n          swiper.slideToClosest();\n          return;\n        }\n\n        if (params.freeModeMomentumBounce && doBounce) {\n          swiper.updateProgress(afterBouncePosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n            swiper.emit('momentumBounce');\n\n            swiper.setTransition(params.speed);\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          });\n        } else if (swiper.velocity) {\n          swiper.updateProgress(newPosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          if (!swiper.animating) {\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          }\n        } else {\n          swiper.updateProgress(newPosition);\n        }\n\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      return;\n    }\n\n    // Find current slide\n    var stopIndex = 0;\n    var groupSize = swiper.slidesSizesGrid[0];\n    for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n      if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n        if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n          stopIndex = i;\n          groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n        }\n      } else if (currentPos >= slidesGrid[i]) {\n        stopIndex = i;\n        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n      }\n    }\n\n    // Find current slide size\n    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n    if (timeDiff > params.longSwipesMs) {\n      // Long touches\n      if (!params.longSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (swiper.swipeDirection === 'next') {\n        if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n        else { swiper.slideTo(stopIndex); }\n      }\n      if (swiper.swipeDirection === 'prev') {\n        if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n        else { swiper.slideTo(stopIndex); }\n      }\n    } else {\n      // Short swipes\n      if (!params.shortSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + params.slidesPerGroup);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  }\n\n  function onResize () {\n    var swiper = this;\n\n    var params = swiper.params;\n    var el = swiper.el;\n\n    if (el && el.offsetWidth === 0) { return; }\n\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Save locks\n    var allowSlideNext = swiper.allowSlideNext;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var snapGrid = swiper.snapGrid;\n\n    // Disable locks on resize\n    swiper.allowSlideNext = true;\n    swiper.allowSlidePrev = true;\n\n    swiper.updateSize();\n    swiper.updateSlides();\n\n    if (params.freeMode) {\n      var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      swiper.updateSlidesClasses();\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n    }\n    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n      swiper.autoplay.run();\n    }\n    // Return locks after resize\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n  }\n\n  function onClick (e) {\n    var swiper = this;\n    if (!swiper.allowClick) {\n      if (swiper.params.preventClicks) { e.preventDefault(); }\n      if (swiper.params.preventClicksPropagation && swiper.animating) {\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  function attachEvents() {\n    var swiper = this;\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    {\n      swiper.onTouchStart = onTouchStart.bind(swiper);\n      swiper.onTouchMove = onTouchMove.bind(swiper);\n      swiper.onTouchEnd = onTouchEnd.bind(swiper);\n    }\n\n    swiper.onClick = onClick.bind(swiper);\n\n    var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n    var capture = !!params.nested;\n\n    // Touch Events\n    {\n      if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n        target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n        doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n      } else {\n        if (Support.touch) {\n          var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n          target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n          target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n          target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        }\n        if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n          target.addEventListener('mousedown', swiper.onTouchStart, false);\n          doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n          doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n        }\n      }\n      // Prevent Links Clicks\n      if (params.preventClicks || params.preventClicksPropagation) {\n        target.addEventListener('click', swiper.onClick, true);\n      }\n    }\n\n    // Resize handler\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  }\n\n  function detachEvents() {\n    var swiper = this;\n\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n    var capture = !!params.nested;\n\n    // Touch Events\n    {\n      if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n        target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n        doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n      } else {\n        if (Support.touch) {\n          var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n          target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n          target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n          target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        }\n        if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n          target.removeEventListener('mousedown', swiper.onTouchStart, false);\n          doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n          doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n        }\n      }\n      // Prevent Links Clicks\n      if (params.preventClicks || params.preventClicksPropagation) {\n        target.removeEventListener('click', swiper.onClick, true);\n      }\n    }\n\n    // Resize handler\n    swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n  }\n\n  var events = {\n    attachEvents: attachEvents,\n    detachEvents: detachEvents,\n  };\n\n  function setBreakpoint () {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var initialized = swiper.initialized;\n    var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n    var params = swiper.params;\n    var breakpoints = params.breakpoints;\n    if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n    // Set breakpoint for window width and update parameters\n    var breakpoint = swiper.getBreakpoint(breakpoints);\n\n    if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n      var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n      if (breakpointOnlyParams) {\n        ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {\n          var paramValue = breakpointOnlyParams[param];\n          if (typeof paramValue === 'undefined') { return; }\n          if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n            breakpointOnlyParams[param] = 'auto';\n          } else if (param === 'slidesPerView') {\n            breakpointOnlyParams[param] = parseFloat(paramValue);\n          } else {\n            breakpointOnlyParams[param] = parseInt(paramValue, 10);\n          }\n        });\n      }\n\n      var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      Utils.extend(swiper.params, breakpointParams);\n\n      Utils.extend(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n      });\n\n      swiper.currentBreakpoint = breakpoint;\n\n      if (needsReLoop && initialized) {\n        swiper.loopDestroy();\n        swiper.loopCreate();\n        swiper.updateSlides();\n        swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n      }\n\n      swiper.emit('breakpoint', breakpointParams);\n    }\n  }\n\n  function getBreakpoint (breakpoints) {\n    var swiper = this;\n    // Get breakpoint for window width\n    if (!breakpoints) { return undefined; }\n    var breakpoint = false;\n    var points = [];\n    Object.keys(breakpoints).forEach(function (point) {\n      points.push(point);\n    });\n    points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });\n    for (var i = 0; i < points.length; i += 1) {\n      var point = points[i];\n      if (swiper.params.breakpointsInverse) {\n        if (point <= win.innerWidth) {\n          breakpoint = point;\n        }\n      } else if (point >= win.innerWidth && !breakpoint) {\n        breakpoint = point;\n      }\n    }\n    return breakpoint || 'max';\n  }\n\n  var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n  function addClasses () {\n    var swiper = this;\n    var classNames = swiper.classNames;\n    var params = swiper.params;\n    var rtl = swiper.rtl;\n    var $el = swiper.$el;\n    var suffixes = [];\n\n    suffixes.push('initialized');\n    suffixes.push(params.direction);\n\n    if (params.freeMode) {\n      suffixes.push('free-mode');\n    }\n    if (!Support.flexbox) {\n      suffixes.push('no-flexbox');\n    }\n    if (params.autoHeight) {\n      suffixes.push('autoheight');\n    }\n    if (rtl) {\n      suffixes.push('rtl');\n    }\n    if (params.slidesPerColumn > 1) {\n      suffixes.push('multirow');\n    }\n    if (Device.android) {\n      suffixes.push('android');\n    }\n    if (Device.ios) {\n      suffixes.push('ios');\n    }\n    // WP8 Touch Events Fix\n    if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n      suffixes.push((\"wp8-\" + (params.direction)));\n    }\n\n    suffixes.forEach(function (suffix) {\n      classNames.push(params.containerModifierClass + suffix);\n    });\n\n    $el.addClass(classNames.join(' '));\n  }\n\n  function removeClasses () {\n    var swiper = this;\n    var $el = swiper.$el;\n    var classNames = swiper.classNames;\n\n    $el.removeClass(classNames.join(' '));\n  }\n\n  var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n  function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n    var image;\n    function onReady() {\n      if (callback) { callback(); }\n    }\n    if (!imageEl.complete || !checkForComplete) {\n      if (src) {\n        image = new win.Image();\n        image.onload = onReady;\n        image.onerror = onReady;\n        if (sizes) {\n          image.sizes = sizes;\n        }\n        if (srcset) {\n          image.srcset = srcset;\n        }\n        if (src) {\n          image.src = src;\n        }\n      } else {\n        onReady();\n      }\n    } else {\n      // image already loaded...\n      onReady();\n    }\n  }\n\n  function preloadImages () {\n    var swiper = this;\n    swiper.imagesToLoad = swiper.$el.find('img');\n    function onReady() {\n      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n      if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n        if (swiper.params.updateOnImagesReady) { swiper.update(); }\n        swiper.emit('imagesReady');\n      }\n    }\n    for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n      var imageEl = swiper.imagesToLoad[i];\n      swiper.loadImage(\n        imageEl,\n        imageEl.currentSrc || imageEl.getAttribute('src'),\n        imageEl.srcset || imageEl.getAttribute('srcset'),\n        imageEl.sizes || imageEl.getAttribute('sizes'),\n        true,\n        onReady\n      );\n    }\n  }\n\n  var images = {\n    loadImage: loadImage,\n    preloadImages: preloadImages,\n  };\n\n  function checkOverflow() {\n    var swiper = this;\n    var wasLocked = swiper.isLocked;\n\n    swiper.isLocked = swiper.snapGrid.length === 1;\n    swiper.allowSlideNext = !swiper.isLocked;\n    swiper.allowSlidePrev = !swiper.isLocked;\n\n    // events\n    if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n    if (wasLocked && wasLocked !== swiper.isLocked) {\n      swiper.isEnd = false;\n      swiper.navigation.update();\n    }\n  }\n\n  var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n  var defaults = {\n    init: true,\n    direction: 'horizontal',\n    touchEventsTarget: 'container',\n    initialSlide: 0,\n    speed: 300,\n    //\n    preventInteractionOnTransition: false,\n\n    // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n    edgeSwipeDetection: false,\n    edgeSwipeThreshold: 20,\n\n    // Free mode\n    freeMode: false,\n    freeModeMomentum: true,\n    freeModeMomentumRatio: 1,\n    freeModeMomentumBounce: true,\n    freeModeMomentumBounceRatio: 1,\n    freeModeMomentumVelocityRatio: 1,\n    freeModeSticky: false,\n    freeModeMinimumVelocity: 0.02,\n\n    // Autoheight\n    autoHeight: false,\n\n    // Set wrapper width\n    setWrapperSize: false,\n\n    // Virtual Translate\n    virtualTranslate: false,\n\n    // Effects\n    effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n    // Breakpoints\n    breakpoints: undefined,\n    breakpointsInverse: false,\n\n    // Slides grid\n    spaceBetween: 0,\n    slidesPerView: 1,\n    slidesPerColumn: 1,\n    slidesPerColumnFill: 'column',\n    slidesPerGroup: 1,\n    centeredSlides: false,\n    slidesOffsetBefore: 0, // in px\n    slidesOffsetAfter: 0, // in px\n    normalizeSlideIndex: true,\n    centerInsufficientSlides: false,\n\n    // Disable swiper and hide navigation when container not overflow\n    watchOverflow: false,\n\n    // Round length\n    roundLengths: false,\n\n    // Touches\n    touchRatio: 1,\n    touchAngle: 45,\n    simulateTouch: true,\n    shortSwipes: true,\n    longSwipes: true,\n    longSwipesRatio: 0.5,\n    longSwipesMs: 300,\n    followFinger: true,\n    allowTouchMove: true,\n    threshold: 0,\n    touchMoveStopPropagation: true,\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchReleaseOnEdges: false,\n\n    // Unique Navigation Elements\n    uniqueNavElements: true,\n\n    // Resistance\n    resistance: true,\n    resistanceRatio: 0.85,\n\n    // Progress\n    watchSlidesProgress: false,\n    watchSlidesVisibility: false,\n\n    // Cursor\n    grabCursor: false,\n\n    // Clicks\n    preventClicks: true,\n    preventClicksPropagation: true,\n    slideToClickedSlide: false,\n\n    // Images\n    preloadImages: true,\n    updateOnImagesReady: true,\n\n    // loop\n    loop: false,\n    loopAdditionalSlides: 0,\n    loopedSlides: null,\n    loopFillGroupWithBlank: false,\n\n    // Swiping/no swiping\n    allowSlidePrev: true,\n    allowSlideNext: true,\n    swipeHandler: null, // '.swipe-handler',\n    noSwiping: true,\n    noSwipingClass: 'swiper-no-swiping',\n    noSwipingSelector: null,\n\n    // Passive Listeners\n    passiveListeners: true,\n\n    // NS\n    containerModifierClass: 'swiper-container-', // NEW\n    slideClass: 'swiper-slide',\n    slideBlankClass: 'swiper-slide-invisible-blank',\n    slideActiveClass: 'swiper-slide-active',\n    slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n    slideVisibleClass: 'swiper-slide-visible',\n    slideDuplicateClass: 'swiper-slide-duplicate',\n    slideNextClass: 'swiper-slide-next',\n    slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n    slidePrevClass: 'swiper-slide-prev',\n    slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n    wrapperClass: 'swiper-wrapper',\n\n    // Callbacks\n    runCallbacksOnInit: true,\n  };\n\n  /* eslint no-param-reassign: \"off\" */\n\n  var prototypes = {\n    update: update,\n    translate: translate,\n    transition: transition$1,\n    slide: slide,\n    loop: loop,\n    grabCursor: grabCursor,\n    manipulation: manipulation,\n    events: events,\n    breakpoints: breakpoints,\n    checkOverflow: checkOverflow$1,\n    classes: classes,\n    images: images,\n  };\n\n  var extendedDefaults = {};\n\n  var Swiper = /*@__PURE__*/(function (SwiperClass) {\n    function Swiper() {\n      var assign;\n\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n      var el;\n      var params;\n      if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n        params = args[0];\n      } else {\n        (assign = args, el = assign[0], params = assign[1]);\n      }\n      if (!params) { params = {}; }\n\n      params = Utils.extend({}, params);\n      if (el && !params.el) { params.el = el; }\n\n      SwiperClass.call(this, params);\n\n      Object.keys(prototypes).forEach(function (prototypeGroup) {\n        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n          if (!Swiper.prototype[protoMethod]) {\n            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n          }\n        });\n      });\n\n      // Swiper Instance\n      var swiper = this;\n      if (typeof swiper.modules === 'undefined') {\n        swiper.modules = {};\n      }\n      Object.keys(swiper.modules).forEach(function (moduleName) {\n        var module = swiper.modules[moduleName];\n        if (module.params) {\n          var moduleParamName = Object.keys(module.params)[0];\n          var moduleParams = module.params[moduleParamName];\n          if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n          if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n          if (params[moduleParamName] === true) {\n            params[moduleParamName] = { enabled: true };\n          }\n          if (\n            typeof params[moduleParamName] === 'object'\n            && !('enabled' in params[moduleParamName])\n          ) {\n            params[moduleParamName].enabled = true;\n          }\n          if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n        }\n      });\n\n      // Extend defaults with modules params\n      var swiperParams = Utils.extend({}, defaults);\n      swiper.useModulesParams(swiperParams);\n\n      // Extend defaults with passed params\n      swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n      swiper.originalParams = Utils.extend({}, swiper.params);\n      swiper.passedParams = Utils.extend({}, params);\n\n      // Save Dom lib\n      swiper.$ = $;\n\n      // Find el\n      var $el = $(swiper.params.el);\n      el = $el[0];\n\n      if (!el) {\n        return undefined;\n      }\n\n      if ($el.length > 1) {\n        var swipers = [];\n        $el.each(function (index, containerEl) {\n          var newParams = Utils.extend({}, params, { el: containerEl });\n          swipers.push(new Swiper(newParams));\n        });\n        return swipers;\n      }\n\n      el.swiper = swiper;\n      $el.data('swiper', swiper);\n\n      // Find Wrapper\n      var $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n\n      // Extend Swiper\n      Utils.extend(swiper, {\n        $el: $el,\n        el: el,\n        $wrapperEl: $wrapperEl,\n        wrapperEl: $wrapperEl[0],\n\n        // Classes\n        classNames: [],\n\n        // Slides\n        slides: $(),\n        slidesGrid: [],\n        snapGrid: [],\n        slidesSizesGrid: [],\n\n        // isDirection\n        isHorizontal: function isHorizontal() {\n          return swiper.params.direction === 'horizontal';\n        },\n        isVertical: function isVertical() {\n          return swiper.params.direction === 'vertical';\n        },\n        // RTL\n        rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n        // Indexes\n        activeIndex: 0,\n        realIndex: 0,\n\n        //\n        isBeginning: true,\n        isEnd: false,\n\n        // Props\n        translate: 0,\n        previousTranslate: 0,\n        progress: 0,\n        velocity: 0,\n        animating: false,\n\n        // Locks\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n\n        // Touch Events\n        touchEvents: (function touchEvents() {\n          var touch = ['touchstart', 'touchmove', 'touchend'];\n          var desktop = ['mousedown', 'mousemove', 'mouseup'];\n          if (Support.pointerEvents) {\n            desktop = ['pointerdown', 'pointermove', 'pointerup'];\n          } else if (Support.prefixedPointerEvents) {\n            desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n          }\n          swiper.touchEventsTouch = {\n            start: touch[0],\n            move: touch[1],\n            end: touch[2],\n          };\n          swiper.touchEventsDesktop = {\n            start: desktop[0],\n            move: desktop[1],\n            end: desktop[2],\n          };\n          return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n        }()),\n        touchEventsData: {\n          isTouched: undefined,\n          isMoved: undefined,\n          allowTouchCallbacks: undefined,\n          touchStartTime: undefined,\n          isScrolling: undefined,\n          currentTranslate: undefined,\n          startTranslate: undefined,\n          allowThresholdMove: undefined,\n          // Form elements to match\n          formElements: 'input, select, option, textarea, button, video',\n          // Last click time\n          lastClickTime: Utils.now(),\n          clickTimeout: undefined,\n          // Velocities\n          velocities: [],\n          allowMomentumBounce: undefined,\n          isTouchEvent: undefined,\n          startMoving: undefined,\n        },\n\n        // Clicks\n        allowClick: true,\n\n        // Touches\n        allowTouchMove: swiper.params.allowTouchMove,\n\n        touches: {\n          startX: 0,\n          startY: 0,\n          currentX: 0,\n          currentY: 0,\n          diff: 0,\n        },\n\n        // Images\n        imagesToLoad: [],\n        imagesLoaded: 0,\n\n      });\n\n      // Install Modules\n      swiper.useModules();\n\n      // Init\n      if (swiper.params.init) {\n        swiper.init();\n      }\n\n      // Return app instance\n      return swiper;\n    }\n\n    if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n    Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n    Swiper.prototype.constructor = Swiper;\n\n    var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n    Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n      var swiper = this;\n      var params = swiper.params;\n      var slides = swiper.slides;\n      var slidesGrid = swiper.slidesGrid;\n      var swiperSize = swiper.size;\n      var activeIndex = swiper.activeIndex;\n      var spv = 1;\n      if (params.centeredSlides) {\n        var slideSize = slides[activeIndex].swiperSlideSize;\n        var breakLoop;\n        for (var i = activeIndex + 1; i < slides.length; i += 1) {\n          if (slides[i] && !breakLoop) {\n            slideSize += slides[i].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) { breakLoop = true; }\n          }\n        }\n        for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n          if (slides[i$1] && !breakLoop) {\n            slideSize += slides[i$1].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) { breakLoop = true; }\n          }\n        }\n      } else {\n        for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n          if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n            spv += 1;\n          }\n        }\n      }\n      return spv;\n    };\n\n    Swiper.prototype.update = function update () {\n      var swiper = this;\n      if (!swiper || swiper.destroyed) { return; }\n      var snapGrid = swiper.snapGrid;\n      var params = swiper.params;\n      // Breakpoints\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      function setTranslate() {\n        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n        swiper.setTranslate(newTranslate);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      var translated;\n      if (swiper.params.freeMode) {\n        setTranslate();\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      } else {\n        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n        } else {\n          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n        }\n        if (!translated) {\n          setTranslate();\n        }\n      }\n      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n      swiper.emit('update');\n    };\n\n    Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n      if ( needUpdate === void 0 ) needUpdate = true;\n\n      var swiper = this;\n      var currentDirection = swiper.params.direction;\n      if (!newDirection) {\n        // eslint-disable-next-line\n        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n      }\n      if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n        return swiper;\n      }\n\n      swiper.$el\n        .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection + \" wp8-\" + currentDirection))\n        .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n      if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n        swiper.$el.addClass(((swiper.params.containerModifierClass) + \"wp8-\" + newDirection));\n      }\n\n      swiper.params.direction = newDirection;\n\n      swiper.slides.each(function (slideIndex, slideEl) {\n        if (newDirection === 'vertical') {\n          slideEl.style.width = '';\n        } else {\n          slideEl.style.height = '';\n        }\n      });\n\n      swiper.emit('changeDirection');\n      if (needUpdate) { swiper.update(); }\n\n      return swiper;\n    };\n\n    Swiper.prototype.init = function init () {\n      var swiper = this;\n      if (swiper.initialized) { return; }\n\n      swiper.emit('beforeInit');\n\n      // Set breakpoint\n      if (swiper.params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n\n      // Add Classes\n      swiper.addClasses();\n\n      // Create loop\n      if (swiper.params.loop) {\n        swiper.loopCreate();\n      }\n\n      // Update size\n      swiper.updateSize();\n\n      // Update slides\n      swiper.updateSlides();\n\n      if (swiper.params.watchOverflow) {\n        swiper.checkOverflow();\n      }\n\n      // Set Grab Cursor\n      if (swiper.params.grabCursor) {\n        swiper.setGrabCursor();\n      }\n\n      if (swiper.params.preloadImages) {\n        swiper.preloadImages();\n      }\n\n      // Slide To Initial Slide\n      if (swiper.params.loop) {\n        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n      } else {\n        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n      }\n\n      // Attach events\n      swiper.attachEvents();\n\n      // Init Flag\n      swiper.initialized = true;\n\n      // Emit\n      swiper.emit('init');\n    };\n\n    Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n      if ( deleteInstance === void 0 ) deleteInstance = true;\n      if ( cleanStyles === void 0 ) cleanStyles = true;\n\n      var swiper = this;\n      var params = swiper.params;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n\n      if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n        return null;\n      }\n\n      swiper.emit('beforeDestroy');\n\n      // Init Flag\n      swiper.initialized = false;\n\n      // Detach events\n      swiper.detachEvents();\n\n      // Destroy loop\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      // Cleanup styles\n      if (cleanStyles) {\n        swiper.removeClasses();\n        $el.removeAttr('style');\n        $wrapperEl.removeAttr('style');\n        if (slides && slides.length) {\n          slides\n            .removeClass([\n              params.slideVisibleClass,\n              params.slideActiveClass,\n              params.slideNextClass,\n              params.slidePrevClass ].join(' '))\n            .removeAttr('style')\n            .removeAttr('data-swiper-slide-index')\n            .removeAttr('data-swiper-column')\n            .removeAttr('data-swiper-row');\n        }\n      }\n\n      swiper.emit('destroy');\n\n      // Detach emitter events\n      Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n        swiper.off(eventName);\n      });\n\n      if (deleteInstance !== false) {\n        swiper.$el[0].swiper = null;\n        swiper.$el.data('swiper', null);\n        Utils.deleteProps(swiper);\n      }\n      swiper.destroyed = true;\n\n      return null;\n    };\n\n    Swiper.extendDefaults = function extendDefaults (newDefaults) {\n      Utils.extend(extendedDefaults, newDefaults);\n    };\n\n    staticAccessors.extendedDefaults.get = function () {\n      return extendedDefaults;\n    };\n\n    staticAccessors.defaults.get = function () {\n      return defaults;\n    };\n\n    staticAccessors.Class.get = function () {\n      return SwiperClass;\n    };\n\n    staticAccessors.$.get = function () {\n      return $;\n    };\n\n    Object.defineProperties( Swiper, staticAccessors );\n\n    return Swiper;\n  }(SwiperClass));\n\n  var Device$1 = {\n    name: 'device',\n    proto: {\n      device: Device,\n    },\n    static: {\n      device: Device,\n    },\n  };\n\n  var Support$1 = {\n    name: 'support',\n    proto: {\n      support: Support,\n    },\n    static: {\n      support: Support,\n    },\n  };\n\n  var Browser$1 = {\n    name: 'browser',\n    proto: {\n      browser: Browser,\n    },\n    static: {\n      browser: Browser,\n    },\n  };\n\n  var Resize = {\n    name: 'resize',\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        resize: {\n          resizeHandler: function resizeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('beforeResize');\n            swiper.emit('resize');\n          },\n          orientationChangeHandler: function orientationChangeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('orientationchange');\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        // Emit resize\n        win.addEventListener('resize', swiper.resize.resizeHandler);\n\n        // Emit orientationchange\n        win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        win.removeEventListener('resize', swiper.resize.resizeHandler);\n        win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n    },\n  };\n\n  var Observer = {\n    func: win.MutationObserver || win.WebkitMutationObserver,\n    attach: function attach(target, options) {\n      if ( options === void 0 ) options = {};\n\n      var swiper = this;\n\n      var ObserverFunc = Observer.func;\n      var observer = new ObserverFunc(function (mutations) {\n        // The observerUpdate event should only be triggered\n        // once despite the number of mutations.  Additional\n        // triggers are redundant and are very costly\n        if (mutations.length === 1) {\n          swiper.emit('observerUpdate', mutations[0]);\n          return;\n        }\n        var observerUpdate = function observerUpdate() {\n          swiper.emit('observerUpdate', mutations[0]);\n        };\n\n        if (win.requestAnimationFrame) {\n          win.requestAnimationFrame(observerUpdate);\n        } else {\n          win.setTimeout(observerUpdate, 0);\n        }\n      });\n\n      observer.observe(target, {\n        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n        childList: typeof options.childList === 'undefined' ? true : options.childList,\n        characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n      });\n\n      swiper.observer.observers.push(observer);\n    },\n    init: function init() {\n      var swiper = this;\n      if (!Support.observer || !swiper.params.observer) { return; }\n      if (swiper.params.observeParents) {\n        var containerParents = swiper.$el.parents();\n        for (var i = 0; i < containerParents.length; i += 1) {\n          swiper.observer.attach(containerParents[i]);\n        }\n      }\n      // Observe container\n      swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n      // Observe wrapper\n      swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.observer.observers.forEach(function (observer) {\n        observer.disconnect();\n      });\n      swiper.observer.observers = [];\n    },\n  };\n\n  var Observer$1 = {\n    name: 'observer',\n    params: {\n      observer: false,\n      observeParents: false,\n      observeSlideChildren: false,\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        observer: {\n          init: Observer.init.bind(swiper),\n          attach: Observer.attach.bind(swiper),\n          destroy: Observer.destroy.bind(swiper),\n          observers: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.observer.init();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.observer.destroy();\n      },\n    },\n  };\n\n  var Virtual = {\n    update: function update(force) {\n      var swiper = this;\n      var ref = swiper.params;\n      var slidesPerView = ref.slidesPerView;\n      var slidesPerGroup = ref.slidesPerGroup;\n      var centeredSlides = ref.centeredSlides;\n      var ref$1 = swiper.params.virtual;\n      var addSlidesBefore = ref$1.addSlidesBefore;\n      var addSlidesAfter = ref$1.addSlidesAfter;\n      var ref$2 = swiper.virtual;\n      var previousFrom = ref$2.from;\n      var previousTo = ref$2.to;\n      var slides = ref$2.slides;\n      var previousSlidesGrid = ref$2.slidesGrid;\n      var renderSlide = ref$2.renderSlide;\n      var previousOffset = ref$2.offset;\n      swiper.updateActiveIndex();\n      var activeIndex = swiper.activeIndex || 0;\n\n      var offsetProp;\n      if (swiper.rtlTranslate) { offsetProp = 'right'; }\n      else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }\n\n      var slidesAfter;\n      var slidesBefore;\n      if (centeredSlides) {\n        slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n        slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n      } else {\n        slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n        slidesBefore = slidesPerGroup + addSlidesAfter;\n      }\n      var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n      var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n      var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n      Utils.extend(swiper.virtual, {\n        from: from,\n        to: to,\n        offset: offset,\n        slidesGrid: swiper.slidesGrid,\n      });\n\n      function onRendered() {\n        swiper.updateSlides();\n        swiper.updateProgress();\n        swiper.updateSlidesClasses();\n        if (swiper.lazy && swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      }\n\n      if (previousFrom === from && previousTo === to && !force) {\n        if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n          swiper.slides.css(offsetProp, (offset + \"px\"));\n        }\n        swiper.updateProgress();\n        return;\n      }\n      if (swiper.params.virtual.renderExternal) {\n        swiper.params.virtual.renderExternal.call(swiper, {\n          offset: offset,\n          from: from,\n          to: to,\n          slides: (function getSlides() {\n            var slidesToRender = [];\n            for (var i = from; i <= to; i += 1) {\n              slidesToRender.push(slides[i]);\n            }\n            return slidesToRender;\n          }()),\n        });\n        onRendered();\n        return;\n      }\n      var prependIndexes = [];\n      var appendIndexes = [];\n      if (force) {\n        swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass))).remove();\n      } else {\n        for (var i = previousFrom; i <= previousTo; i += 1) {\n          if (i < from || i > to) {\n            swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\")).remove();\n          }\n        }\n      }\n      for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n        if (i$1 >= from && i$1 <= to) {\n          if (typeof previousTo === 'undefined' || force) {\n            appendIndexes.push(i$1);\n          } else {\n            if (i$1 > previousTo) { appendIndexes.push(i$1); }\n            if (i$1 < previousFrom) { prependIndexes.push(i$1); }\n          }\n        }\n      }\n      appendIndexes.forEach(function (index) {\n        swiper.$wrapperEl.append(renderSlide(slides[index], index));\n      });\n      prependIndexes.sort(function (a, b) { return b - a; }).forEach(function (index) {\n        swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n      });\n      swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + \"px\"));\n      onRendered();\n    },\n    renderSlide: function renderSlide(slide, index) {\n      var swiper = this;\n      var params = swiper.params.virtual;\n      if (params.cache && swiper.virtual.cache[index]) {\n        return swiper.virtual.cache[index];\n      }\n      var $slideEl = params.renderSlide\n        ? $(params.renderSlide.call(swiper, slide, index))\n        : $((\"<div class=\\\"\" + (swiper.params.slideClass) + \"\\\" data-swiper-slide-index=\\\"\" + index + \"\\\">\" + slide + \"</div>\"));\n      if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }\n      if (params.cache) { swiper.virtual.cache[index] = $slideEl; }\n      return $slideEl;\n    },\n    appendSlide: function appendSlide(slides) {\n      var swiper = this;\n      if (typeof slides === 'object' && 'length' in slides) {\n        for (var i = 0; i < slides.length; i += 1) {\n          if (slides[i]) { swiper.virtual.slides.push(slides[i]); }\n        }\n      } else {\n        swiper.virtual.slides.push(slides);\n      }\n      swiper.virtual.update(true);\n    },\n    prependSlide: function prependSlide(slides) {\n      var swiper = this;\n      var activeIndex = swiper.activeIndex;\n      var newActiveIndex = activeIndex + 1;\n      var numberOfNewSlides = 1;\n\n      if (Array.isArray(slides)) {\n        for (var i = 0; i < slides.length; i += 1) {\n          if (slides[i]) { swiper.virtual.slides.unshift(slides[i]); }\n        }\n        newActiveIndex = activeIndex + slides.length;\n        numberOfNewSlides = slides.length;\n      } else {\n        swiper.virtual.slides.unshift(slides);\n      }\n      if (swiper.params.virtual.cache) {\n        var cache = swiper.virtual.cache;\n        var newCache = {};\n        Object.keys(cache).forEach(function (cachedIndex) {\n          newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cache[cachedIndex];\n        });\n        swiper.virtual.cache = newCache;\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(newActiveIndex, 0);\n    },\n    removeSlide: function removeSlide(slidesIndexes) {\n      var swiper = this;\n      if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) { return; }\n      var activeIndex = swiper.activeIndex;\n      if (Array.isArray(slidesIndexes)) {\n        for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n          swiper.virtual.slides.splice(slidesIndexes[i], 1);\n          if (swiper.params.virtual.cache) {\n            delete swiper.virtual.cache[slidesIndexes[i]];\n          }\n          if (slidesIndexes[i] < activeIndex) { activeIndex -= 1; }\n          activeIndex = Math.max(activeIndex, 0);\n        }\n      } else {\n        swiper.virtual.slides.splice(slidesIndexes, 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes];\n        }\n        if (slidesIndexes < activeIndex) { activeIndex -= 1; }\n        activeIndex = Math.max(activeIndex, 0);\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(activeIndex, 0);\n    },\n    removeAllSlides: function removeAllSlides() {\n      var swiper = this;\n      swiper.virtual.slides = [];\n      if (swiper.params.virtual.cache) {\n        swiper.virtual.cache = {};\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(0, 0);\n    },\n  };\n\n  var Virtual$1 = {\n    name: 'virtual',\n    params: {\n      virtual: {\n        enabled: false,\n        slides: [],\n        cache: true,\n        renderSlide: null,\n        renderExternal: null,\n        addSlidesBefore: 0,\n        addSlidesAfter: 0,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        virtual: {\n          update: Virtual.update.bind(swiper),\n          appendSlide: Virtual.appendSlide.bind(swiper),\n          prependSlide: Virtual.prependSlide.bind(swiper),\n          removeSlide: Virtual.removeSlide.bind(swiper),\n          removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n          renderSlide: Virtual.renderSlide.bind(swiper),\n          slides: swiper.params.virtual.slides,\n          cache: {},\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (!swiper.params.virtual.enabled) { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"virtual\"));\n        var overwriteParams = {\n          watchSlidesProgress: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n\n        if (!swiper.params.initialSlide) {\n          swiper.virtual.update();\n        }\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (!swiper.params.virtual.enabled) { return; }\n        swiper.virtual.update();\n      },\n    },\n  };\n\n  var Keyboard = {\n    handle: function handle(event) {\n      var swiper = this;\n      var rtl = swiper.rtlTranslate;\n      var e = event;\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var kc = e.keyCode || e.charCode;\n      // Directions locks\n      if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n        return false;\n      }\n      if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n        return undefined;\n      }\n      if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {\n        return undefined;\n      }\n      if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n        var inView = false;\n        // Check that swiper should be inside of visible area of window\n        if (swiper.$el.parents((\".\" + (swiper.params.slideClass))).length > 0 && swiper.$el.parents((\".\" + (swiper.params.slideActiveClass))).length === 0) {\n          return undefined;\n        }\n        var windowWidth = win.innerWidth;\n        var windowHeight = win.innerHeight;\n        var swiperOffset = swiper.$el.offset();\n        if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }\n        var swiperCoord = [\n          [swiperOffset.left, swiperOffset.top],\n          [swiperOffset.left + swiper.width, swiperOffset.top],\n          [swiperOffset.left, swiperOffset.top + swiper.height],\n          [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];\n        for (var i = 0; i < swiperCoord.length; i += 1) {\n          var point = swiperCoord[i];\n          if (\n            point[0] >= 0 && point[0] <= windowWidth\n            && point[1] >= 0 && point[1] <= windowHeight\n          ) {\n            inView = true;\n          }\n        }\n        if (!inView) { return undefined; }\n      }\n      if (swiper.isHorizontal()) {\n        if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n          if (e.preventDefault) { e.preventDefault(); }\n          else { e.returnValue = false; }\n        }\n        if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) { swiper.slideNext(); }\n        if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) { swiper.slidePrev(); }\n      } else {\n        if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n          if (e.preventDefault) { e.preventDefault(); }\n          else { e.returnValue = false; }\n        }\n        if (kc === 34 || kc === 40) { swiper.slideNext(); }\n        if (kc === 33 || kc === 38) { swiper.slidePrev(); }\n      }\n      swiper.emit('keyPress', kc);\n      return undefined;\n    },\n    enable: function enable() {\n      var swiper = this;\n      if (swiper.keyboard.enabled) { return; }\n      $(doc).on('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      if (!swiper.keyboard.enabled) { return; }\n      $(doc).off('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = false;\n    },\n  };\n\n  var Keyboard$1 = {\n    name: 'keyboard',\n    params: {\n      keyboard: {\n        enabled: false,\n        onlyInViewport: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        keyboard: {\n          enabled: false,\n          enable: Keyboard.enable.bind(swiper),\n          disable: Keyboard.disable.bind(swiper),\n          handle: Keyboard.handle.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.keyboard.enabled) {\n          swiper.keyboard.enable();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.keyboard.enabled) {\n          swiper.keyboard.disable();\n        }\n      },\n    },\n  };\n\n  function isEventSupported() {\n    var eventName = 'onwheel';\n    var isSupported = eventName in doc;\n\n    if (!isSupported) {\n      var element = doc.createElement('div');\n      element.setAttribute(eventName, 'return;');\n      isSupported = typeof element[eventName] === 'function';\n    }\n\n    if (!isSupported\n      && doc.implementation\n      && doc.implementation.hasFeature\n      // always returns true in newer browsers as per the standard.\n      // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n      && doc.implementation.hasFeature('', '') !== true\n    ) {\n      // This is the only way to test support for the `wheel` event in IE9+.\n      isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n    }\n\n    return isSupported;\n  }\n  var Mousewheel = {\n    lastScrollTime: Utils.now(),\n    event: (function getEvent() {\n      if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n      return isEventSupported() ? 'wheel' : 'mousewheel';\n    }()),\n    normalize: function normalize(e) {\n      // Reasonable defaults\n      var PIXEL_STEP = 10;\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      var sX = 0;\n      var sY = 0; // spinX, spinY\n      var pX = 0;\n      var pY = 0; // pixelX, pixelY\n\n      // Legacy\n      if ('detail' in e) {\n        sY = e.detail;\n      }\n      if ('wheelDelta' in e) {\n        sY = -e.wheelDelta / 120;\n      }\n      if ('wheelDeltaY' in e) {\n        sY = -e.wheelDeltaY / 120;\n      }\n      if ('wheelDeltaX' in e) {\n        sX = -e.wheelDeltaX / 120;\n      }\n\n      // side scrolling on FF with DOMMouseScroll\n      if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n        sX = sY;\n        sY = 0;\n      }\n\n      pX = sX * PIXEL_STEP;\n      pY = sY * PIXEL_STEP;\n\n      if ('deltaY' in e) {\n        pY = e.deltaY;\n      }\n      if ('deltaX' in e) {\n        pX = e.deltaX;\n      }\n\n      if ((pX || pY) && e.deltaMode) {\n        if (e.deltaMode === 1) { // delta in LINE units\n          pX *= LINE_HEIGHT;\n          pY *= LINE_HEIGHT;\n        } else { // delta in PAGE units\n          pX *= PAGE_HEIGHT;\n          pY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Fall-back if spin cannot be determined\n      if (pX && !sX) {\n        sX = (pX < 1) ? -1 : 1;\n      }\n      if (pY && !sY) {\n        sY = (pY < 1) ? -1 : 1;\n      }\n\n      return {\n        spinX: sX,\n        spinY: sY,\n        pixelX: pX,\n        pixelY: pY,\n      };\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var swiper = this;\n      swiper.mouseEntered = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var swiper = this;\n      swiper.mouseEntered = false;\n    },\n    handle: function handle(event) {\n      var e = event;\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }\n\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var delta = 0;\n      var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n      var data = Mousewheel.normalize(e);\n\n      if (params.forceToAxis) {\n        if (swiper.isHorizontal()) {\n          if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n          else { return true; }\n        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n        else { return true; }\n      } else {\n        delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n      }\n\n      if (delta === 0) { return true; }\n\n      if (params.invert) { delta = -delta; }\n\n      if (!swiper.params.freeMode) {\n        if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n          if (delta < 0) {\n            if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n              swiper.slideNext();\n              swiper.emit('scroll', e);\n            } else if (params.releaseOnEdges) { return true; }\n          } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n            swiper.slidePrev();\n            swiper.emit('scroll', e);\n          } else if (params.releaseOnEdges) { return true; }\n        }\n        swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n      } else {\n        // Freemode or scrollContainer:\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        var position = swiper.getTranslate() + (delta * params.sensitivity);\n        var wasBeginning = swiper.isBeginning;\n        var wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n        if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = Utils.nextTick(function () {\n            swiper.slideToClosest();\n          }, 300);\n        }\n        // Emit event\n        swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n      }\n\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      return false;\n    },\n    enable: function enable() {\n      var swiper = this;\n      if (!Mousewheel.event) { return false; }\n      if (swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n      target.on(Mousewheel.event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = true;\n      return true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      if (!Mousewheel.event) { return false; }\n      if (!swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.off(Mousewheel.event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = false;\n      return true;\n    },\n  };\n\n  var Mousewheel$1 = {\n    name: 'mousewheel',\n    params: {\n      mousewheel: {\n        enabled: false,\n        releaseOnEdges: false,\n        invert: false,\n        forceToAxis: false,\n        sensitivity: 1,\n        eventsTarged: 'container',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        mousewheel: {\n          enabled: false,\n          enable: Mousewheel.enable.bind(swiper),\n          disable: Mousewheel.disable.bind(swiper),\n          handle: Mousewheel.handle.bind(swiper),\n          handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n          handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n          lastScrollTime: Utils.now(),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n      },\n    },\n  };\n\n  var Navigation = {\n    update: function update() {\n      // Update Navigation Buttons\n      var swiper = this;\n      var params = swiper.params.navigation;\n\n      if (swiper.params.loop) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          $prevEl.addClass(params.disabledClass);\n        } else {\n          $prevEl.removeClass(params.disabledClass);\n        }\n        $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          $nextEl.addClass(params.disabledClass);\n        } else {\n          $nextEl.removeClass(params.disabledClass);\n        }\n        $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    },\n    onPrevClick: function onPrevClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isBeginning && !swiper.params.loop) { return; }\n      swiper.slidePrev();\n    },\n    onNextClick: function onNextClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isEnd && !swiper.params.loop) { return; }\n      swiper.slideNext();\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (!(params.nextEl || params.prevEl)) { return; }\n\n      var $nextEl;\n      var $prevEl;\n      if (params.nextEl) {\n        $nextEl = $(params.nextEl);\n        if (\n          swiper.params.uniqueNavElements\n          && typeof params.nextEl === 'string'\n          && $nextEl.length > 1\n          && swiper.$el.find(params.nextEl).length === 1\n        ) {\n          $nextEl = swiper.$el.find(params.nextEl);\n        }\n      }\n      if (params.prevEl) {\n        $prevEl = $(params.prevEl);\n        if (\n          swiper.params.uniqueNavElements\n          && typeof params.prevEl === 'string'\n          && $prevEl.length > 1\n          && swiper.$el.find(params.prevEl).length === 1\n        ) {\n          $prevEl = swiper.$el.find(params.prevEl);\n        }\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        $nextEl.on('click', swiper.navigation.onNextClick);\n      }\n      if ($prevEl && $prevEl.length > 0) {\n        $prevEl.on('click', swiper.navigation.onPrevClick);\n      }\n\n      Utils.extend(swiper.navigation, {\n        $nextEl: $nextEl,\n        nextEl: $nextEl && $nextEl[0],\n        $prevEl: $prevEl,\n        prevEl: $prevEl && $prevEl[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n      if ($nextEl && $nextEl.length) {\n        $nextEl.off('click', swiper.navigation.onNextClick);\n        $nextEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n      if ($prevEl && $prevEl.length) {\n        $prevEl.off('click', swiper.navigation.onPrevClick);\n        $prevEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n    },\n  };\n\n  var Navigation$1 = {\n    name: 'navigation',\n    params: {\n      navigation: {\n        nextEl: null,\n        prevEl: null,\n\n        hideOnClick: false,\n        disabledClass: 'swiper-button-disabled',\n        hiddenClass: 'swiper-button-hidden',\n        lockClass: 'swiper-button-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        navigation: {\n          init: Navigation.init.bind(swiper),\n          update: Navigation.update.bind(swiper),\n          destroy: Navigation.destroy.bind(swiper),\n          onNextClick: Navigation.onNextClick.bind(swiper),\n          onPrevClick: Navigation.onPrevClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.navigation.init();\n        swiper.navigation.update();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.navigation.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        var ref = swiper.navigation;\n        var $nextEl = ref.$nextEl;\n        var $prevEl = ref.$prevEl;\n        if (\n          swiper.params.navigation.hideOnClick\n          && !$(e.target).is($prevEl)\n          && !$(e.target).is($nextEl)\n        ) {\n          var isHidden;\n          if ($nextEl) {\n            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n          } else if ($prevEl) {\n            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n          }\n          if (isHidden === true) {\n            swiper.emit('navigationShow', swiper);\n          } else {\n            swiper.emit('navigationHide', swiper);\n          }\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      },\n    },\n  };\n\n  var Pagination = {\n    update: function update() {\n      // Render || Update Pagination bullets/items\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el;\n      // Current/Total\n      var current;\n      var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.loop) {\n        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n        if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n          current -= (slidesLength - (swiper.loopedSlides * 2));\n        }\n        if (current > total - 1) { current -= total; }\n        if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n      } else if (typeof swiper.snapIndex !== 'undefined') {\n        current = swiper.snapIndex;\n      } else {\n        current = swiper.activeIndex || 0;\n      }\n      // Types\n      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n        var bullets = swiper.pagination.bullets;\n        var firstIndex;\n        var lastIndex;\n        var midIndex;\n        if (params.dynamicBullets) {\n          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n          $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n          if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n            swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n            if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n            } else if (swiper.pagination.dynamicBulletIndex < 0) {\n              swiper.pagination.dynamicBulletIndex = 0;\n            }\n          }\n          firstIndex = current - swiper.pagination.dynamicBulletIndex;\n          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n          midIndex = (lastIndex + firstIndex) / 2;\n        }\n        bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n        if ($el.length > 1) {\n          bullets.each(function (index, bullet) {\n            var $bullet = $(bullet);\n            var bulletIndex = $bullet.index();\n            if (bulletIndex === current) {\n              $bullet.addClass(params.bulletActiveClass);\n            }\n            if (params.dynamicBullets) {\n              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n              }\n              if (bulletIndex === firstIndex) {\n                $bullet\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev\"))\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              }\n              if (bulletIndex === lastIndex) {\n                $bullet\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next\"))\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            }\n          });\n        } else {\n          var $bullet = bullets.eq(current);\n          $bullet.addClass(params.bulletActiveClass);\n          if (params.dynamicBullets) {\n            var $firstDisplayedBullet = bullets.eq(firstIndex);\n            var $lastDisplayedBullet = bullets.eq(lastIndex);\n            for (var i = firstIndex; i <= lastIndex; i += 1) {\n              bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n            }\n            $firstDisplayedBullet\n              .prev()\n              .addClass(((params.bulletActiveClass) + \"-prev\"))\n              .prev()\n              .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n            $lastDisplayedBullet\n              .next()\n              .addClass(((params.bulletActiveClass) + \"-next\"))\n              .next()\n              .addClass(((params.bulletActiveClass) + \"-next-next\"));\n          }\n        }\n        if (params.dynamicBullets) {\n          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n          var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n          var offsetProp = rtl ? 'right' : 'left';\n          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n        }\n      }\n      if (params.type === 'fraction') {\n        $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n        $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n      }\n      if (params.type === 'progressbar') {\n        var progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        var scale = (current + 1) / total;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        $el.html(params.renderCustom(swiper, current + 1, total));\n        swiper.emit('paginationRender', swiper, $el[0]);\n      } else {\n        swiper.emit('paginationUpdate', swiper, $el[0]);\n      }\n      $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    },\n    render: function render() {\n      // Render Container\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n      var $el = swiper.pagination.$el;\n      var paginationHTML = '';\n      if (params.type === 'bullets') {\n        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n        for (var i = 0; i < numberOfBullets; i += 1) {\n          if (params.renderBullet) {\n            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n          } else {\n            paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\"></\" + (params.bulletElement) + \">\";\n          }\n        }\n        $el.html(paginationHTML);\n        swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n      }\n      if (params.type === 'fraction') {\n        if (params.renderFraction) {\n          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + (params.currentClass) + \"\\\"></span>\"\n          + ' / '\n          + \"<span class=\\\"\" + (params.totalClass) + \"\\\"></span>\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type === 'progressbar') {\n        if (params.renderProgressbar) {\n          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + (params.progressbarFillClass) + \"\\\"></span>\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type !== 'custom') {\n        swiper.emit('paginationRender', swiper.pagination.$el[0]);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el) { return; }\n\n      var $el = $(params.el);\n      if ($el.length === 0) { return; }\n\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.el === 'string'\n        && $el.length > 1\n        && swiper.$el.find(params.el).length === 1\n      ) {\n        $el = swiper.$el.find(params.el);\n      }\n\n      if (params.type === 'bullets' && params.clickable) {\n        $el.addClass(params.clickableClass);\n      }\n\n      $el.addClass(params.modifierClass + params.type);\n\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n        swiper.pagination.dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        $el.addClass(params.progressbarOppositeClass);\n      }\n\n      if (params.clickable) {\n        $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n          e.preventDefault();\n          var index = $(this).index() * swiper.params.slidesPerGroup;\n          if (swiper.params.loop) { index += swiper.loopedSlides; }\n          swiper.slideTo(index);\n        });\n      }\n\n      Utils.extend(swiper.pagination, {\n        $el: $el,\n        el: $el[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var $el = swiper.pagination.$el;\n\n      $el.removeClass(params.hiddenClass);\n      $el.removeClass(params.modifierClass + params.type);\n      if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n      if (params.clickable) {\n        $el.off('click', (\".\" + (params.bulletClass)));\n      }\n    },\n  };\n\n  var Pagination$1 = {\n    name: 'pagination',\n    params: {\n      pagination: {\n        el: null,\n        bulletElement: 'span',\n        clickable: false,\n        hideOnClick: false,\n        renderBullet: null,\n        renderProgressbar: null,\n        renderFraction: null,\n        renderCustom: null,\n        progressbarOpposite: false,\n        type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n        dynamicBullets: false,\n        dynamicMainBullets: 1,\n        formatFractionCurrent: function (number) { return number; },\n        formatFractionTotal: function (number) { return number; },\n        bulletClass: 'swiper-pagination-bullet',\n        bulletActiveClass: 'swiper-pagination-bullet-active',\n        modifierClass: 'swiper-pagination-', // NEW\n        currentClass: 'swiper-pagination-current',\n        totalClass: 'swiper-pagination-total',\n        hiddenClass: 'swiper-pagination-hidden',\n        progressbarFillClass: 'swiper-pagination-progressbar-fill',\n        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n        clickableClass: 'swiper-pagination-clickable', // NEW\n        lockClass: 'swiper-pagination-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        pagination: {\n          init: Pagination.init.bind(swiper),\n          render: Pagination.render.bind(swiper),\n          update: Pagination.update.bind(swiper),\n          destroy: Pagination.destroy.bind(swiper),\n          dynamicBulletIndex: 0,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.pagination.init();\n        swiper.pagination.render();\n        swiper.pagination.update();\n      },\n      activeIndexChange: function activeIndexChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          swiper.pagination.update();\n        }\n      },\n      snapIndexChange: function snapIndexChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.update();\n        }\n      },\n      slidesLengthChange: function slidesLengthChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      snapGridLengthChange: function snapGridLengthChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.pagination.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        if (\n          swiper.params.pagination.el\n          && swiper.params.pagination.hideOnClick\n          && swiper.pagination.$el.length > 0\n          && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n        ) {\n          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n          if (isHidden === true) {\n            swiper.emit('paginationShow', swiper);\n          } else {\n            swiper.emit('paginationHide', swiper);\n          }\n          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      },\n    },\n  };\n\n  var Scrollbar = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var rtl = swiper.rtlTranslate;\n      var progress = swiper.progress;\n      var dragSize = scrollbar.dragSize;\n      var trackSize = scrollbar.trackSize;\n      var $dragEl = scrollbar.$dragEl;\n      var $el = scrollbar.$el;\n      var params = swiper.params.scrollbar;\n\n      var newSize = dragSize;\n      var newPos = (trackSize - dragSize) * progress;\n      if (rtl) {\n        newPos = -newPos;\n        if (newPos > 0) {\n          newSize = dragSize - newPos;\n          newPos = 0;\n        } else if (-newPos + dragSize > trackSize) {\n          newSize = trackSize + newPos;\n        }\n      } else if (newPos < 0) {\n        newSize = dragSize + newPos;\n        newPos = 0;\n      } else if (newPos + dragSize > trackSize) {\n        newSize = trackSize - newPos;\n      }\n      if (swiper.isHorizontal()) {\n        if (Support.transforms3d) {\n          $dragEl.transform((\"translate3d(\" + newPos + \"px, 0, 0)\"));\n        } else {\n          $dragEl.transform((\"translateX(\" + newPos + \"px)\"));\n        }\n        $dragEl[0].style.width = newSize + \"px\";\n      } else {\n        if (Support.transforms3d) {\n          $dragEl.transform((\"translate3d(0px, \" + newPos + \"px, 0)\"));\n        } else {\n          $dragEl.transform((\"translateY(\" + newPos + \"px)\"));\n        }\n        $dragEl[0].style.height = newSize + \"px\";\n      }\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.timeout);\n        $el[0].style.opacity = 1;\n        swiper.scrollbar.timeout = setTimeout(function () {\n          $el[0].style.opacity = 0;\n          $el.transition(400);\n        }, 1000);\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n      swiper.scrollbar.$dragEl.transition(duration);\n    },\n    updateSize: function updateSize() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n\n      var scrollbar = swiper.scrollbar;\n      var $dragEl = scrollbar.$dragEl;\n      var $el = scrollbar.$el;\n\n      $dragEl[0].style.width = '';\n      $dragEl[0].style.height = '';\n      var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n      var divider = swiper.size / swiper.virtualSize;\n      var moveDivider = divider * (trackSize / swiper.size);\n      var dragSize;\n      if (swiper.params.scrollbar.dragSize === 'auto') {\n        dragSize = trackSize * divider;\n      } else {\n        dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n      }\n\n      if (swiper.isHorizontal()) {\n        $dragEl[0].style.width = dragSize + \"px\";\n      } else {\n        $dragEl[0].style.height = dragSize + \"px\";\n      }\n\n      if (divider >= 1) {\n        $el[0].style.display = 'none';\n      } else {\n        $el[0].style.display = '';\n      }\n      if (swiper.params.scrollbar.hide) {\n        $el[0].style.opacity = 0;\n      }\n      Utils.extend(scrollbar, {\n        trackSize: trackSize,\n        divider: divider,\n        moveDivider: moveDivider,\n        dragSize: dragSize,\n      });\n      scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n    },\n    getPointerPosition: function getPointerPosition(e) {\n      var swiper = this;\n      if (swiper.isHorizontal()) {\n        return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);\n      }\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);\n    },\n    setDragPosition: function setDragPosition(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar;\n      var rtl = swiper.rtlTranslate;\n      var $el = scrollbar.$el;\n      var dragSize = scrollbar.dragSize;\n      var trackSize = scrollbar.trackSize;\n      var dragStartPos = scrollbar.dragStartPos;\n\n      var positionRatio;\n      positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n        - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n      positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n      if (rtl) {\n        positionRatio = 1 - positionRatio;\n      }\n\n      var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n      swiper.updateProgress(position);\n      swiper.setTranslate(position);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    },\n    onDragStart: function onDragStart(e) {\n      var swiper = this;\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar;\n      var $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n      var $dragEl = scrollbar.$dragEl;\n      swiper.scrollbar.isTouched = true;\n      swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n        ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n      e.preventDefault();\n      e.stopPropagation();\n\n      $wrapperEl.transition(100);\n      $dragEl.transition(100);\n      scrollbar.setDragPosition(e);\n\n      clearTimeout(swiper.scrollbar.dragTimeout);\n\n      $el.transition(0);\n      if (params.hide) {\n        $el.css('opacity', 1);\n      }\n      swiper.emit('scrollbarDragStart', e);\n    },\n    onDragMove: function onDragMove(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar;\n      var $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n      var $dragEl = scrollbar.$dragEl;\n\n      if (!swiper.scrollbar.isTouched) { return; }\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      scrollbar.setDragPosition(e);\n      $wrapperEl.transition(0);\n      $el.transition(0);\n      $dragEl.transition(0);\n      swiper.emit('scrollbarDragMove', e);\n    },\n    onDragEnd: function onDragEnd(e) {\n      var swiper = this;\n\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar;\n      var $el = scrollbar.$el;\n\n      if (!swiper.scrollbar.isTouched) { return; }\n      swiper.scrollbar.isTouched = false;\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.dragTimeout);\n        swiper.scrollbar.dragTimeout = Utils.nextTick(function () {\n          $el.css('opacity', 0);\n          $el.transition(400);\n        }, 1000);\n      }\n      swiper.emit('scrollbarDragEnd', e);\n      if (params.snapOnRelease) {\n        swiper.slideToClosest();\n      }\n    },\n    enableDraggable: function enableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var touchEventsTouch = swiper.touchEventsTouch;\n      var touchEventsDesktop = swiper.touchEventsDesktop;\n      var params = swiper.params;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n      var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      if (!Support.touch) {\n        target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    disableDraggable: function disableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var touchEventsTouch = swiper.touchEventsTouch;\n      var touchEventsDesktop = swiper.touchEventsDesktop;\n      var params = swiper.params;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n      var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      if (!Support.touch) {\n        target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var $swiperEl = swiper.$el;\n      var params = swiper.params.scrollbar;\n\n      var $el = $(params.el);\n      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n        $el = $swiperEl.find(params.el);\n      }\n\n      var $dragEl = $el.find((\".\" + (swiper.params.scrollbar.dragClass)));\n      if ($dragEl.length === 0) {\n        $dragEl = $((\"<div class=\\\"\" + (swiper.params.scrollbar.dragClass) + \"\\\"></div>\"));\n        $el.append($dragEl);\n      }\n\n      Utils.extend(scrollbar, {\n        $el: $el,\n        el: $el[0],\n        $dragEl: $dragEl,\n        dragEl: $dragEl[0],\n      });\n\n      if (params.draggable) {\n        scrollbar.enableDraggable();\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.scrollbar.disableDraggable();\n    },\n  };\n\n  var Scrollbar$1 = {\n    name: 'scrollbar',\n    params: {\n      scrollbar: {\n        el: null,\n        dragSize: 'auto',\n        hide: false,\n        draggable: false,\n        snapOnRelease: true,\n        lockClass: 'swiper-scrollbar-lock',\n        dragClass: 'swiper-scrollbar-drag',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        scrollbar: {\n          init: Scrollbar.init.bind(swiper),\n          destroy: Scrollbar.destroy.bind(swiper),\n          updateSize: Scrollbar.updateSize.bind(swiper),\n          setTranslate: Scrollbar.setTranslate.bind(swiper),\n          setTransition: Scrollbar.setTransition.bind(swiper),\n          enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n          disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n          setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n          getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n          onDragStart: Scrollbar.onDragStart.bind(swiper),\n          onDragMove: Scrollbar.onDragMove.bind(swiper),\n          onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n          isTouched: false,\n          timeout: null,\n          dragTimeout: null,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.scrollbar.init();\n        swiper.scrollbar.updateSize();\n        swiper.scrollbar.setTranslate();\n      },\n      update: function update() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      resize: function resize() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        swiper.scrollbar.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        swiper.scrollbar.setTransition(duration);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.scrollbar.destroy();\n      },\n    },\n  };\n\n  var Parallax = {\n    setTransform: function setTransform(el, progress) {\n      var swiper = this;\n      var rtl = swiper.rtl;\n\n      var $el = $(el);\n      var rtlFactor = rtl ? -1 : 1;\n\n      var p = $el.attr('data-swiper-parallax') || '0';\n      var x = $el.attr('data-swiper-parallax-x');\n      var y = $el.attr('data-swiper-parallax-y');\n      var scale = $el.attr('data-swiper-parallax-scale');\n      var opacity = $el.attr('data-swiper-parallax-opacity');\n\n      if (x || y) {\n        x = x || '0';\n        y = y || '0';\n      } else if (swiper.isHorizontal()) {\n        x = p;\n        y = '0';\n      } else {\n        y = p;\n        x = '0';\n      }\n\n      if ((x).indexOf('%') >= 0) {\n        x = (parseInt(x, 10) * progress * rtlFactor) + \"%\";\n      } else {\n        x = (x * progress * rtlFactor) + \"px\";\n      }\n      if ((y).indexOf('%') >= 0) {\n        y = (parseInt(y, 10) * progress) + \"%\";\n      } else {\n        y = (y * progress) + \"px\";\n      }\n\n      if (typeof opacity !== 'undefined' && opacity !== null) {\n        var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n        $el[0].style.opacity = currentOpacity;\n      }\n      if (typeof scale === 'undefined' || scale === null) {\n        $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px)\"));\n      } else {\n        var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n        $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\"));\n      }\n    },\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el;\n      var slides = swiper.slides;\n      var progress = swiper.progress;\n      var snapGrid = swiper.snapGrid;\n      $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each(function (index, el) {\n          swiper.parallax.setTransform(el, progress);\n        });\n      slides.each(function (slideIndex, slideEl) {\n        var slideProgress = slideEl.progress;\n        if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n          slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n        }\n        slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n        $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n          .each(function (index, el) {\n            swiper.parallax.setTransform(el, slideProgress);\n          });\n      });\n    },\n    setTransition: function setTransition(duration) {\n      if ( duration === void 0 ) duration = this.params.speed;\n\n      var swiper = this;\n      var $el = swiper.$el;\n      $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each(function (index, parallaxEl) {\n          var $parallaxEl = $(parallaxEl);\n          var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n          if (duration === 0) { parallaxDuration = 0; }\n          $parallaxEl.transition(parallaxDuration);\n        });\n    },\n  };\n\n  var Parallax$1 = {\n    name: 'parallax',\n    params: {\n      parallax: {\n        enabled: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        parallax: {\n          setTransform: Parallax.setTransform.bind(swiper),\n          setTranslate: Parallax.setTranslate.bind(swiper),\n          setTransition: Parallax.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTranslate();\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTransition(duration);\n      },\n    },\n  };\n\n  var Zoom = {\n    // Calc Scale From Multi-touches\n    getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n      if (e.targetTouches.length < 2) { return 1; }\n      var x1 = e.targetTouches[0].pageX;\n      var y1 = e.targetTouches[0].pageY;\n      var x2 = e.targetTouches[1].pageX;\n      var y2 = e.targetTouches[1].pageY;\n      var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));\n      return distance;\n    },\n    // Events\n    onGestureStart: function onGestureStart(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n      if (!Support.gestures) {\n        if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n          return;\n        }\n        zoom.fakeGestureTouched = true;\n        gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n      }\n      if (!gesture.$slideEl || !gesture.$slideEl.length) {\n        gesture.$slideEl = $(e.target).closest('.swiper-slide');\n        if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n        gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n        if (gesture.$imageWrapEl.length === 0) {\n          gesture.$imageEl = undefined;\n          return;\n        }\n      }\n      gesture.$imageEl.transition(0);\n      swiper.zoom.isScaling = true;\n    },\n    onGestureChange: function onGestureChange(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (!Support.gestures) {\n        if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n          return;\n        }\n        zoom.fakeGestureMoved = true;\n        gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (Support.gestures) {\n        zoom.scale = e.scale * zoom.currentScale;\n      } else {\n        zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n      }\n      if (zoom.scale > gesture.maxRatio) {\n        zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));\n      }\n      if (zoom.scale < params.minRatio) {\n        zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));\n      }\n      gesture.$imageEl.transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n    },\n    onGestureEnd: function onGestureEnd(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (!Support.gestures) {\n        if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n          return;\n        }\n        if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n          return;\n        }\n        zoom.fakeGestureTouched = false;\n        zoom.fakeGestureMoved = false;\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n      gesture.$imageEl.transition(swiper.params.speed).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n      zoom.currentScale = zoom.scale;\n      zoom.isScaling = false;\n      if (zoom.scale === 1) { gesture.$slideEl = undefined; }\n    },\n    onTouchStart: function onTouchStart(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (image.isTouched) { return; }\n      if (Device.android) { e.preventDefault(); }\n      image.isTouched = true;\n      image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    },\n    onTouchMove: function onTouchMove(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      var velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      swiper.allowClick = false;\n      if (!image.isTouched || !gesture.$slideEl) { return; }\n\n      if (!image.isMoved) {\n        image.width = gesture.$imageEl[0].offsetWidth;\n        image.height = gesture.$imageEl[0].offsetHeight;\n        image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n        image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n        gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n        gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n        gesture.$imageWrapEl.transition(0);\n        if (swiper.rtl) {\n          image.startX = -image.startX;\n          image.startY = -image.startY;\n        }\n      }\n      // Define if we need image drag\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n\n      if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }\n\n      image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n      image.maxY = -image.minY;\n\n      image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n      if (!image.isMoved && !zoom.isScaling) {\n        if (\n          swiper.isHorizontal()\n          && (\n            (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n            || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n          )\n        ) {\n          image.isTouched = false;\n          return;\n        } if (\n          !swiper.isHorizontal()\n          && (\n            (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n            || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n          )\n        ) {\n          image.isTouched = false;\n          return;\n        }\n      }\n      e.preventDefault();\n      e.stopPropagation();\n\n      image.isMoved = true;\n      image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n      image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n      if (image.currentX < image.minX) {\n        image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));\n      }\n      if (image.currentX > image.maxX) {\n        image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));\n      }\n\n      if (image.currentY < image.minY) {\n        image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));\n      }\n      if (image.currentY > image.maxY) {\n        image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));\n      }\n\n      // Velocity\n      if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }\n      if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }\n      if (!velocity.prevTime) { velocity.prevTime = Date.now(); }\n      velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n      velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n      if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }\n      if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }\n      velocity.prevPositionX = image.touchesCurrent.x;\n      velocity.prevPositionY = image.touchesCurrent.y;\n      velocity.prevTime = Date.now();\n\n      gesture.$imageWrapEl.transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n    },\n    onTouchEnd: function onTouchEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      var velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (!image.isTouched || !image.isMoved) {\n        image.isTouched = false;\n        image.isMoved = false;\n        return;\n      }\n      image.isTouched = false;\n      image.isMoved = false;\n      var momentumDurationX = 300;\n      var momentumDurationY = 300;\n      var momentumDistanceX = velocity.x * momentumDurationX;\n      var newPositionX = image.currentX + momentumDistanceX;\n      var momentumDistanceY = velocity.y * momentumDurationY;\n      var newPositionY = image.currentY + momentumDistanceY;\n\n      // Fix duration\n      if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }\n      if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }\n      var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n      image.currentX = newPositionX;\n      image.currentY = newPositionY;\n\n      // Define if we need image drag\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n      image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n      image.maxY = -image.minY;\n      image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n      image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n      gesture.$imageWrapEl.transition(momentumDuration).transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n    },\n    onTransitionEnd: function onTransitionEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n\n        zoom.scale = 1;\n        zoom.currentScale = 1;\n\n        gesture.$slideEl = undefined;\n        gesture.$imageEl = undefined;\n        gesture.$imageWrapEl = undefined;\n      }\n    },\n    // Toggle Zoom\n    toggle: function toggle(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n\n      if (zoom.scale && zoom.scale !== 1) {\n        // Zoom Out\n        zoom.out();\n      } else {\n        // Zoom In\n        zoom.in(e);\n      }\n    },\n    in: function in$1(e) {\n      var swiper = this;\n\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n\n      if (!gesture.$slideEl) {\n        gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n      gesture.$slideEl.addClass((\"\" + (params.zoomedSlideClass)));\n\n      var touchX;\n      var touchY;\n      var offsetX;\n      var offsetY;\n      var diffX;\n      var diffY;\n      var translateX;\n      var translateY;\n      var imageWidth;\n      var imageHeight;\n      var scaledWidth;\n      var scaledHeight;\n      var translateMinX;\n      var translateMinY;\n      var translateMaxX;\n      var translateMaxY;\n      var slideWidth;\n      var slideHeight;\n\n      if (typeof image.touchesStart.x === 'undefined' && e) {\n        touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n        touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n      } else {\n        touchX = image.touchesStart.x;\n        touchY = image.touchesStart.y;\n      }\n\n      zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (e) {\n        slideWidth = gesture.$slideEl[0].offsetWidth;\n        slideHeight = gesture.$slideEl[0].offsetHeight;\n        offsetX = gesture.$slideEl.offset().left;\n        offsetY = gesture.$slideEl.offset().top;\n        diffX = (offsetX + (slideWidth / 2)) - touchX;\n        diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n        imageWidth = gesture.$imageEl[0].offsetWidth;\n        imageHeight = gesture.$imageEl[0].offsetHeight;\n        scaledWidth = imageWidth * zoom.scale;\n        scaledHeight = imageHeight * zoom.scale;\n\n        translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n        translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n        translateMaxX = -translateMinX;\n        translateMaxY = -translateMinY;\n\n        translateX = diffX * zoom.scale;\n        translateY = diffY * zoom.scale;\n\n        if (translateX < translateMinX) {\n          translateX = translateMinX;\n        }\n        if (translateX > translateMaxX) {\n          translateX = translateMaxX;\n        }\n\n        if (translateY < translateMinY) {\n          translateY = translateMinY;\n        }\n        if (translateY > translateMaxY) {\n          translateY = translateMaxY;\n        }\n      } else {\n        translateX = 0;\n        translateY = 0;\n      }\n      gesture.$imageWrapEl.transition(300).transform((\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\"));\n      gesture.$imageEl.transition(300).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n    },\n    out: function out() {\n      var swiper = this;\n\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture;\n\n      if (!gesture.$slideEl) {\n        gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n      gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n      gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n      gesture.$slideEl.removeClass((\"\" + (params.zoomedSlideClass)));\n      gesture.$slideEl = undefined;\n    },\n    // Attach/Detach Events\n    enable: function enable() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      if (zoom.enabled) { return; }\n      zoom.enabled = true;\n\n      var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n      // Scale image\n      if (Support.gestures) {\n        swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      }\n\n      // Move image\n      swiper.$wrapperEl.on(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n    },\n    disable: function disable() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      if (!zoom.enabled) { return; }\n\n      swiper.zoom.enabled = false;\n\n      var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n      // Scale image\n      if (Support.gestures) {\n        swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      }\n\n      // Move image\n      swiper.$wrapperEl.off(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n    },\n  };\n\n  var Zoom$1 = {\n    name: 'zoom',\n    params: {\n      zoom: {\n        enabled: false,\n        maxRatio: 3,\n        minRatio: 1,\n        toggle: true,\n        containerClass: 'swiper-zoom-container',\n        zoomedSlideClass: 'swiper-slide-zoomed',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      var zoom = {\n        enabled: false,\n        scale: 1,\n        currentScale: 1,\n        isScaling: false,\n        gesture: {\n          $slideEl: undefined,\n          slideWidth: undefined,\n          slideHeight: undefined,\n          $imageEl: undefined,\n          $imageWrapEl: undefined,\n          maxRatio: 3,\n        },\n        image: {\n          isTouched: undefined,\n          isMoved: undefined,\n          currentX: undefined,\n          currentY: undefined,\n          minX: undefined,\n          minY: undefined,\n          maxX: undefined,\n          maxY: undefined,\n          width: undefined,\n          height: undefined,\n          startX: undefined,\n          startY: undefined,\n          touchesStart: {},\n          touchesCurrent: {},\n        },\n        velocity: {\n          x: undefined,\n          y: undefined,\n          prevPositionX: undefined,\n          prevPositionY: undefined,\n          prevTime: undefined,\n        },\n      };\n\n      ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {\n        zoom[methodName] = Zoom[methodName].bind(swiper);\n      });\n      Utils.extend(swiper, {\n        zoom: zoom,\n      });\n\n      var scale = 1;\n      Object.defineProperty(swiper.zoom, 'scale', {\n        get: function get() {\n          return scale;\n        },\n        set: function set(value) {\n          if (scale !== value) {\n            var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n            var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n            swiper.emit('zoomChange', value, imageEl, slideEl);\n          }\n          scale = value;\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.zoom.enabled) {\n          swiper.zoom.enable();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.zoom.disable();\n      },\n      touchStart: function touchStart(e) {\n        var swiper = this;\n        if (!swiper.zoom.enabled) { return; }\n        swiper.zoom.onTouchStart(e);\n      },\n      touchEnd: function touchEnd(e) {\n        var swiper = this;\n        if (!swiper.zoom.enabled) { return; }\n        swiper.zoom.onTouchEnd(e);\n      },\n      doubleTap: function doubleTap(e) {\n        var swiper = this;\n        if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n          swiper.zoom.toggle(e);\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n          swiper.zoom.onTransitionEnd();\n        }\n      },\n    },\n  };\n\n  var Lazy = {\n    loadInSlide: function loadInSlide(index, loadInDuplicate) {\n      if ( loadInDuplicate === void 0 ) loadInDuplicate = true;\n\n      var swiper = this;\n      var params = swiper.params.lazy;\n      if (typeof index === 'undefined') { return; }\n      if (swiper.slides.length === 0) { return; }\n      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n      var $slideEl = isVirtual\n        ? swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\"))\n        : swiper.slides.eq(index);\n\n      var $images = $slideEl.find((\".\" + (params.elementClass) + \":not(.\" + (params.loadedClass) + \"):not(.\" + (params.loadingClass) + \")\"));\n      if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n        $images = $images.add($slideEl[0]);\n      }\n      if ($images.length === 0) { return; }\n\n      $images.each(function (imageIndex, imageEl) {\n        var $imageEl = $(imageEl);\n        $imageEl.addClass(params.loadingClass);\n\n        var background = $imageEl.attr('data-background');\n        var src = $imageEl.attr('data-src');\n        var srcset = $imageEl.attr('data-srcset');\n        var sizes = $imageEl.attr('data-sizes');\n\n        swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {\n          if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }\n          if (background) {\n            $imageEl.css('background-image', (\"url(\\\"\" + background + \"\\\")\"));\n            $imageEl.removeAttr('data-background');\n          } else {\n            if (srcset) {\n              $imageEl.attr('srcset', srcset);\n              $imageEl.removeAttr('data-srcset');\n            }\n            if (sizes) {\n              $imageEl.attr('sizes', sizes);\n              $imageEl.removeAttr('data-sizes');\n            }\n            if (src) {\n              $imageEl.attr('src', src);\n              $imageEl.removeAttr('data-src');\n            }\n          }\n\n          $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n          $slideEl.find((\".\" + (params.preloaderClass))).remove();\n          if (swiper.params.loop && loadInDuplicate) {\n            var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n            if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n              var originalSlide = swiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + (swiper.params.slideDuplicateClass) + \")\"));\n              swiper.lazy.loadInSlide(originalSlide.index(), false);\n            } else {\n              var duplicatedSlide = swiper.$wrapperEl.children((\".\" + (swiper.params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\"));\n              swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n            }\n          }\n          swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        });\n\n        swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n      });\n    },\n    load: function load() {\n      var swiper = this;\n      var $wrapperEl = swiper.$wrapperEl;\n      var swiperParams = swiper.params;\n      var slides = swiper.slides;\n      var activeIndex = swiper.activeIndex;\n      var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n      var params = swiperParams.lazy;\n\n      var slidesPerView = swiperParams.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = 0;\n      }\n\n      function slideExist(index) {\n        if (isVirtual) {\n          if ($wrapperEl.children((\".\" + (swiperParams.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\")).length) {\n            return true;\n          }\n        } else if (slides[index]) { return true; }\n        return false;\n      }\n      function slideIndex(slideEl) {\n        if (isVirtual) {\n          return $(slideEl).attr('data-swiper-slide-index');\n        }\n        return $(slideEl).index();\n      }\n\n      if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }\n      if (swiper.params.watchSlidesVisibility) {\n        $wrapperEl.children((\".\" + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {\n          var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n          swiper.lazy.loadInSlide(index);\n        });\n      } else if (slidesPerView > 1) {\n        for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n          if (slideExist(i)) { swiper.lazy.loadInSlide(i); }\n        }\n      } else {\n        swiper.lazy.loadInSlide(activeIndex);\n      }\n      if (params.loadPrevNext) {\n        if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n          var amount = params.loadPrevNextAmount;\n          var spv = slidesPerView;\n          var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n          var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n          // Next Slides\n          for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {\n            if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }\n          }\n          // Prev Slides\n          for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {\n            if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }\n          }\n        } else {\n          var nextSlide = $wrapperEl.children((\".\" + (swiperParams.slideNextClass)));\n          if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }\n\n          var prevSlide = $wrapperEl.children((\".\" + (swiperParams.slidePrevClass)));\n          if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }\n        }\n      }\n    },\n  };\n\n  var Lazy$1 = {\n    name: 'lazy',\n    params: {\n      lazy: {\n        enabled: false,\n        loadPrevNext: false,\n        loadPrevNextAmount: 1,\n        loadOnTransitionStart: false,\n\n        elementClass: 'swiper-lazy',\n        loadingClass: 'swiper-lazy-loading',\n        loadedClass: 'swiper-lazy-loaded',\n        preloaderClass: 'swiper-lazy-preloader',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        lazy: {\n          initialImageLoaded: false,\n          load: Lazy.load.bind(swiper),\n          loadInSlide: Lazy.loadInSlide.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n          swiper.params.preloadImages = false;\n        }\n      },\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n          swiper.lazy.load();\n        }\n      },\n      scroll: function scroll() {\n        var swiper = this;\n        if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n          swiper.lazy.load();\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      scrollbarDragMove: function scrollbarDragMove() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      transitionStart: function transitionStart() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n            swiper.lazy.load();\n          }\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n          swiper.lazy.load();\n        }\n      },\n    },\n  };\n\n  /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n  var Controller = {\n    LinearSpline: function LinearSpline(x, y) {\n      var binarySearch = (function search() {\n        var maxIndex;\n        var minIndex;\n        var guess;\n        return function (array, val) {\n          minIndex = -1;\n          maxIndex = array.length;\n          while (maxIndex - minIndex > 1) {\n            guess = maxIndex + minIndex >> 1;\n            if (array[guess] <= val) {\n              minIndex = guess;\n            } else {\n              maxIndex = guess;\n            }\n          }\n          return maxIndex;\n        };\n      }());\n      this.x = x;\n      this.y = y;\n      this.lastIndex = x.length - 1;\n      // Given an x value (x2), return the expected y2 value:\n      // (x1,y1) is the known point before given value,\n      // (x3,y3) is the known point after given value.\n      var i1;\n      var i3;\n\n      this.interpolate = function interpolate(x2) {\n        if (!x2) { return 0; }\n\n        // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n        i3 = binarySearch(this.x, x2);\n        i1 = i3 - 1;\n\n        // We have our indexes i1 & i3, so we can calculate already:\n        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n        return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n      };\n      return this;\n    },\n    // xxx: for now i will just save one spline function to to\n    getInterpolateFunction: function getInterpolateFunction(c) {\n      var swiper = this;\n      if (!swiper.controller.spline) {\n        swiper.controller.spline = swiper.params.loop\n          ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n          : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n      }\n    },\n    setTranslate: function setTranslate(setTranslate$1, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var multiplier;\n      var controlledTranslate;\n      function setControlledTranslate(c) {\n        // this will create an Interpolate function based on the snapGrids\n        // x is the Grid of the scrolled scroller and y will be the controlled scroller\n        // it makes sense to create this only once and recall it for the interpolation\n        // the function does a lot of value caching for performance\n        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n        if (swiper.params.controller.by === 'slide') {\n          swiper.controller.getInterpolateFunction(c);\n          // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n          // but it did not work out\n          controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n        }\n\n        if (!controlledTranslate || swiper.params.controller.by === 'container') {\n          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n          controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n        }\n\n        if (swiper.params.controller.inverse) {\n          controlledTranslate = c.maxTranslate() - controlledTranslate;\n        }\n        c.updateProgress(controlledTranslate);\n        c.setTranslate(controlledTranslate, swiper);\n        c.updateActiveIndex();\n        c.updateSlidesClasses();\n      }\n      if (Array.isArray(controlled)) {\n        for (var i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTranslate(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTranslate(controlled);\n      }\n    },\n    setTransition: function setTransition(duration, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var i;\n      function setControlledTransition(c) {\n        c.setTransition(duration, swiper);\n        if (duration !== 0) {\n          c.transitionStart();\n          if (c.params.autoHeight) {\n            Utils.nextTick(function () {\n              c.updateAutoHeight();\n            });\n          }\n          c.$wrapperEl.transitionEnd(function () {\n            if (!controlled) { return; }\n            if (c.params.loop && swiper.params.controller.by === 'slide') {\n              c.loopFix();\n            }\n            c.transitionEnd();\n          });\n        }\n      }\n      if (Array.isArray(controlled)) {\n        for (i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTransition(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTransition(controlled);\n      }\n    },\n  };\n  var Controller$1 = {\n    name: 'controller',\n    params: {\n      controller: {\n        control: undefined,\n        inverse: false,\n        by: 'slide', // or 'container'\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        controller: {\n          control: swiper.params.controller.control,\n          getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n          setTranslate: Controller.setTranslate.bind(swiper),\n          setTransition: Controller.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      update: function update() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      setTranslate: function setTranslate(translate, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTranslate(translate, byController);\n      },\n      setTransition: function setTransition(duration, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTransition(duration, byController);\n      },\n    },\n  };\n\n  var a11y = {\n    makeElFocusable: function makeElFocusable($el) {\n      $el.attr('tabIndex', '0');\n      return $el;\n    },\n    addElRole: function addElRole($el, role) {\n      $el.attr('role', role);\n      return $el;\n    },\n    addElLabel: function addElLabel($el, label) {\n      $el.attr('aria-label', label);\n      return $el;\n    },\n    disableEl: function disableEl($el) {\n      $el.attr('aria-disabled', true);\n      return $el;\n    },\n    enableEl: function enableEl($el) {\n      $el.attr('aria-disabled', false);\n      return $el;\n    },\n    onEnterKey: function onEnterKey(e) {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (e.keyCode !== 13) { return; }\n      var $targetEl = $(e.target);\n      if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          swiper.a11y.notify(params.lastSlideMessage);\n        } else {\n          swiper.a11y.notify(params.nextSlideMessage);\n        }\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n        if (!(swiper.isBeginning && !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n        if (swiper.isBeginning) {\n          swiper.a11y.notify(params.firstSlideMessage);\n        } else {\n          swiper.a11y.notify(params.prevSlideMessage);\n        }\n      }\n      if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n        $targetEl[0].click();\n      }\n    },\n    notify: function notify(message) {\n      var swiper = this;\n      var notification = swiper.a11y.liveRegion;\n      if (notification.length === 0) { return; }\n      notification.html('');\n      notification.html(message);\n    },\n    updateNavigation: function updateNavigation() {\n      var swiper = this;\n\n      if (swiper.params.loop) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          swiper.a11y.disableEl($prevEl);\n        } else {\n          swiper.a11y.enableEl($prevEl);\n        }\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          swiper.a11y.disableEl($nextEl);\n        } else {\n          swiper.a11y.enableEl($nextEl);\n        }\n      }\n    },\n    updatePagination: function updatePagination() {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n          var $bulletEl = $(bulletEl);\n          swiper.a11y.makeElFocusable($bulletEl);\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n        });\n      }\n    },\n    init: function init() {\n      var swiper = this;\n\n      swiper.$el.append(swiper.a11y.liveRegion);\n\n      // Navigation\n      var params = swiper.params.a11y;\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        swiper.a11y.makeElFocusable($nextEl);\n        swiper.a11y.addElRole($nextEl, 'button');\n        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n        $nextEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        swiper.a11y.makeElFocusable($prevEl);\n        swiper.a11y.addElRole($prevEl, 'button');\n        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n        $prevEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        $nextEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        $prevEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n  };\n  var A11y = {\n    name: 'a11y',\n    params: {\n      a11y: {\n        enabled: true,\n        notificationClass: 'swiper-notification',\n        prevSlideMessage: 'Previous slide',\n        nextSlideMessage: 'Next slide',\n        firstSlideMessage: 'This is the first slide',\n        lastSlideMessage: 'This is the last slide',\n        paginationBulletMessage: 'Go to slide {{index}}',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        a11y: {\n          liveRegion: $((\"<span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")),\n        },\n      });\n      Object.keys(a11y).forEach(function (methodName) {\n        swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.init();\n        swiper.a11y.updateNavigation();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      paginationUpdate: function paginationUpdate() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updatePagination();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.destroy();\n      },\n    },\n  };\n\n  var History = {\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.history) { return; }\n      if (!win.history || !win.history.pushState) {\n        swiper.params.history.enabled = false;\n        swiper.params.hashNavigation.enabled = true;\n        return;\n      }\n      var history = swiper.history;\n      history.initialized = true;\n      history.paths = History.getPathValues();\n      if (!history.paths.key && !history.paths.value) { return; }\n      history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n      if (!swiper.params.history.replaceState) {\n        win.addEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (!swiper.params.history.replaceState) {\n        win.removeEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    setHistoryPopState: function setHistoryPopState() {\n      var swiper = this;\n      swiper.history.paths = History.getPathValues();\n      swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n    },\n    getPathValues: function getPathValues() {\n      var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });\n      var total = pathArray.length;\n      var key = pathArray[total - 2];\n      var value = pathArray[total - 1];\n      return { key: key, value: value };\n    },\n    setHistory: function setHistory(key, index) {\n      var swiper = this;\n      if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }\n      var slide = swiper.slides.eq(index);\n      var value = History.slugify(slide.attr('data-history'));\n      if (!win.location.pathname.includes(key)) {\n        value = key + \"/\" + value;\n      }\n      var currentState = win.history.state;\n      if (currentState && currentState.value === value) {\n        return;\n      }\n      if (swiper.params.history.replaceState) {\n        win.history.replaceState({ value: value }, null, value);\n      } else {\n        win.history.pushState({ value: value }, null, value);\n      }\n    },\n    slugify: function slugify(text) {\n      return text.toString()\n        .replace(/\\s+/g, '-')\n        .replace(/[^\\w-]+/g, '')\n        .replace(/--+/g, '-')\n        .replace(/^-+/, '')\n        .replace(/-+$/, '');\n    },\n    scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n      var swiper = this;\n      if (value) {\n        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHistory = History.slugify(slide.attr('data-history'));\n          if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, runCallbacks);\n          }\n        }\n      } else {\n        swiper.slideTo(0, speed, runCallbacks);\n      }\n    },\n  };\n\n  var History$1 = {\n    name: 'history',\n    params: {\n      history: {\n        enabled: false,\n        replaceState: false,\n        key: 'slides',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        history: {\n          init: History.init.bind(swiper),\n          setHistory: History.setHistory.bind(swiper),\n          setHistoryPopState: History.setHistoryPopState.bind(swiper),\n          scrollToSlide: History.scrollToSlide.bind(swiper),\n          destroy: History.destroy.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.history.enabled) {\n          swiper.history.init();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.history.enabled) {\n          swiper.history.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.history.initialized) {\n          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      },\n    },\n  };\n\n  var HashNavigation = {\n    onHashCange: function onHashCange() {\n      var swiper = this;\n      var newHash = doc.location.hash.replace('#', '');\n      var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n      if (newHash !== activeSlideHash) {\n        var newIndex = swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-hash=\\\"\" + newHash + \"\\\"]\")).index();\n        if (typeof newIndex === 'undefined') { return; }\n        swiper.slideTo(newIndex);\n      }\n    },\n    setHash: function setHash() {\n      var swiper = this;\n      if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }\n      if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {\n        win.history.replaceState(null, null, ((\"#\" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || false));\n      } else {\n        var slide = swiper.slides.eq(swiper.activeIndex);\n        var hash = slide.attr('data-hash') || slide.attr('data-history');\n        doc.location.hash = hash || '';\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }\n      swiper.hashNavigation.initialized = true;\n      var hash = doc.location.hash.replace('#', '');\n      if (hash) {\n        var speed = 0;\n        for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n          if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n          }\n        }\n      }\n      if (swiper.params.hashNavigation.watchState) {\n        $(win).on('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.params.hashNavigation.watchState) {\n        $(win).off('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    },\n  };\n  var HashNavigation$1 = {\n    name: 'hash-navigation',\n    params: {\n      hashNavigation: {\n        enabled: false,\n        replaceState: false,\n        watchState: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        hashNavigation: {\n          initialized: false,\n          init: HashNavigation.init.bind(swiper),\n          destroy: HashNavigation.destroy.bind(swiper),\n          setHash: HashNavigation.setHash.bind(swiper),\n          onHashCange: HashNavigation.onHashCange.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.init();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.hashNavigation.initialized) {\n          swiper.hashNavigation.setHash();\n        }\n      },\n    },\n  };\n\n  /* eslint no-underscore-dangle: \"off\" */\n\n  var Autoplay = {\n    run: function run() {\n      var swiper = this;\n      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n      var delay = swiper.params.autoplay.delay;\n      if ($activeSlideEl.attr('data-swiper-autoplay')) {\n        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n      }\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = Utils.nextTick(function () {\n        if (swiper.params.autoplay.reverseDirection) {\n          if (swiper.params.loop) {\n            swiper.loopFix();\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.isBeginning) {\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else {\n            swiper.autoplay.stop();\n          }\n        } else if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isEnd) {\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      }, delay);\n    },\n    start: function start() {\n      var swiper = this;\n      if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n      if (swiper.autoplay.running) { return false; }\n      swiper.autoplay.running = true;\n      swiper.emit('autoplayStart');\n      swiper.autoplay.run();\n      return true;\n    },\n    stop: function stop() {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return false; }\n      if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n      if (swiper.autoplay.timeout) {\n        clearTimeout(swiper.autoplay.timeout);\n        swiper.autoplay.timeout = undefined;\n      }\n      swiper.autoplay.running = false;\n      swiper.emit('autoplayStop');\n      return true;\n    },\n    pause: function pause(speed) {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return; }\n      if (swiper.autoplay.paused) { return; }\n      if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n      swiper.autoplay.paused = true;\n      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n        swiper.autoplay.paused = false;\n        swiper.autoplay.run();\n      } else {\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      }\n    },\n  };\n\n  var Autoplay$1 = {\n    name: 'autoplay',\n    params: {\n      autoplay: {\n        enabled: false,\n        delay: 3000,\n        waitForTransition: true,\n        disableOnInteraction: true,\n        stopOnLastSlide: false,\n        reverseDirection: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        autoplay: {\n          running: false,\n          paused: false,\n          run: Autoplay.run.bind(swiper),\n          start: Autoplay.start.bind(swiper),\n          stop: Autoplay.stop.bind(swiper),\n          pause: Autoplay.pause.bind(swiper),\n          onTransitionEnd: function onTransitionEnd(e) {\n            if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n            swiper.autoplay.paused = false;\n            if (!swiper.autoplay.running) {\n              swiper.autoplay.stop();\n            } else {\n              swiper.autoplay.run();\n            }\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.autoplay.enabled) {\n          swiper.autoplay.start();\n        }\n      },\n      beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            swiper.autoplay.stop();\n          }\n        }\n      },\n      sliderFirstMove: function sliderFirstMove() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.pause();\n          }\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          swiper.autoplay.stop();\n        }\n      },\n    },\n  };\n\n  var Fade = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = swiper.slides.eq(i);\n        var offset = $slideEl[0].swiperSlideOffset;\n        var tx = -offset;\n        if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n        var ty = 0;\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n        }\n        var slideOpacity = swiper.params.fadeEffect.crossFade\n          ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n          : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n        $slideEl\n          .css({\n            opacity: slideOpacity,\n          })\n          .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides;\n      var $wrapperEl = swiper.$wrapperEl;\n      slides.transition(duration);\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        var eventTriggered = false;\n        slides.transitionEnd(function () {\n          if (eventTriggered) { return; }\n          if (!swiper || swiper.destroyed) { return; }\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n          for (var i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    },\n  };\n\n  var EffectFade = {\n    name: 'effect-fade',\n    params: {\n      fadeEffect: {\n        crossFade: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        fadeEffect: {\n          setTranslate: Fade.setTranslate.bind(swiper),\n          setTransition: Fade.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Cube = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n      var swiperWidth = swiper.width;\n      var swiperHeight = swiper.height;\n      var rtl = swiper.rtlTranslate;\n      var swiperSize = swiper.size;\n      var params = swiper.params.cubeEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      var wrapperRotate = 0;\n      var $cubeShadowEl;\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n            $wrapperEl.append($cubeShadowEl);\n          }\n          $cubeShadowEl.css({ height: (swiperWidth + \"px\") });\n        } else {\n          $cubeShadowEl = $el.find('.swiper-cube-shadow');\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n            $el.append($cubeShadowEl);\n          }\n        }\n      }\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideIndex = i;\n        if (isVirtual) {\n          slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n        }\n        var slideAngle = slideIndex * 90;\n        var round = Math.floor(slideAngle / 360);\n        if (rtl) {\n          slideAngle = -slideAngle;\n          round = Math.floor(-slideAngle / 360);\n        }\n        var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        var tx = 0;\n        var ty = 0;\n        var tz = 0;\n        if (slideIndex % 4 === 0) {\n          tx = -round * 4 * swiperSize;\n          tz = 0;\n        } else if ((slideIndex - 1) % 4 === 0) {\n          tx = 0;\n          tz = -round * 4 * swiperSize;\n        } else if ((slideIndex - 2) % 4 === 0) {\n          tx = swiperSize + (round * 4 * swiperSize);\n          tz = swiperSize;\n        } else if ((slideIndex - 3) % 4 === 0) {\n          tx = -swiperSize;\n          tz = (3 * swiperSize) + (swiperSize * 4 * round);\n        }\n        if (rtl) {\n          tx = -tx;\n        }\n\n        if (!isHorizontal) {\n          ty = tx;\n          tx = 0;\n        }\n\n        var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n        if (progress <= 1 && progress > -1) {\n          wrapperRotate = (slideIndex * 90) + (progress * 90);\n          if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }\n        }\n        $slideEl.transform(transform);\n        if (params.slideShadows) {\n          // Set shadows\n          var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if (shadowBefore.length === 0) {\n            shadowBefore = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\"));\n            $slideEl.append(shadowBefore);\n          }\n          if (shadowAfter.length === 0) {\n            shadowAfter = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\"));\n            $slideEl.append(shadowAfter);\n          }\n          if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n          if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n        }\n      }\n      $wrapperEl.css({\n        '-webkit-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        '-moz-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        '-ms-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        'transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n      });\n\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl.transform((\"translate3d(0px, \" + ((swiperWidth / 2) + params.shadowOffset) + \"px, \" + (-swiperWidth / 2) + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + (params.shadowScale) + \")\"));\n        } else {\n          var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n          var multiplier = 1.5 - (\n            (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n            + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n          );\n          var scale1 = params.shadowScale;\n          var scale2 = params.shadowScale / multiplier;\n          var offset = params.shadowOffset;\n          $cubeShadowEl.transform((\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + ((swiperHeight / 2) + offset) + \"px, \" + (-swiperHeight / 2 / scale2) + \"px) rotateX(-90deg)\"));\n        }\n      }\n      var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n      $wrapperEl\n        .transform((\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\"));\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var $el = swiper.$el;\n      var slides = swiper.slides;\n      slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n      if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n        $el.find('.swiper-cube-shadow').transition(duration);\n      }\n    },\n  };\n\n  var EffectCube = {\n    name: 'effect-cube',\n    params: {\n      cubeEffect: {\n        slideShadows: true,\n        shadow: true,\n        shadowOffset: 20,\n        shadowScale: 0.94,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        cubeEffect: {\n          setTranslate: Cube.setTranslate.bind(swiper),\n          setTransition: Cube.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"cube\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          resistanceRatio: 0,\n          spaceBetween: 0,\n          centeredSlides: false,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.cubeEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.cubeEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Flip = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n      var rtl = swiper.rtlTranslate;\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var progress = $slideEl[0].progress;\n        if (swiper.params.flipEffect.limitRotation) {\n          progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        }\n        var offset = $slideEl[0].swiperSlideOffset;\n        var rotate = -180 * progress;\n        var rotateY = rotate;\n        var rotateX = 0;\n        var tx = -offset;\n        var ty = 0;\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n          rotateX = -rotateY;\n          rotateY = 0;\n        } else if (rtl) {\n          rotateY = -rotateY;\n        }\n\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n        if (swiper.params.flipEffect.slideShadows) {\n          // Set shadows\n          var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if (shadowBefore.length === 0) {\n            shadowBefore = $((\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"></div>\"));\n            $slideEl.append(shadowBefore);\n          }\n          if (shadowAfter.length === 0) {\n            shadowAfter = $((\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'right' : 'bottom') + \"\\\"></div>\"));\n            $slideEl.append(shadowAfter);\n          }\n          if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n          if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n        }\n        $slideEl\n          .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\"));\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides;\n      var activeIndex = swiper.activeIndex;\n      var $wrapperEl = swiper.$wrapperEl;\n      slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        var eventTriggered = false;\n        // eslint-disable-next-line\n        slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n          if (eventTriggered) { return; }\n          if (!swiper || swiper.destroyed) { return; }\n          // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n          for (var i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    },\n  };\n\n  var EffectFlip = {\n    name: 'effect-flip',\n    params: {\n      flipEffect: {\n        slideShadows: true,\n        limitRotation: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        flipEffect: {\n          setTranslate: Flip.setTranslate.bind(swiper),\n          setTransition: Flip.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"flip\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.flipEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.flipEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Coverflow = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var swiperWidth = swiper.width;\n      var swiperHeight = swiper.height;\n      var slides = swiper.slides;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slidesSizesGrid = swiper.slidesSizesGrid;\n      var params = swiper.params.coverflowEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var transform = swiper.translate;\n      var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n      var rotate = isHorizontal ? params.rotate : -params.rotate;\n      var translate = params.depth;\n      // Each slide offset from center\n      for (var i = 0, length = slides.length; i < length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideSize = slidesSizesGrid[i];\n        var slideOffset = $slideEl[0].swiperSlideOffset;\n        var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n        var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n        var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n        // var rotateZ = 0\n        var translateZ = -translate * Math.abs(offsetMultiplier);\n\n        var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);\n        var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;\n\n        // Fix for ultra small values\n        if (Math.abs(translateX) < 0.001) { translateX = 0; }\n        if (Math.abs(translateY) < 0.001) { translateY = 0; }\n        if (Math.abs(translateZ) < 0.001) { translateZ = 0; }\n        if (Math.abs(rotateY) < 0.001) { rotateY = 0; }\n        if (Math.abs(rotateX) < 0.001) { rotateX = 0; }\n\n        var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px)  rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\";\n\n        $slideEl.transform(slideTransform);\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n        if (params.slideShadows) {\n          // Set shadows\n          var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if ($shadowBeforeEl.length === 0) {\n            $shadowBeforeEl = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\"));\n            $slideEl.append($shadowBeforeEl);\n          }\n          if ($shadowAfterEl.length === 0) {\n            $shadowAfterEl = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\"));\n            $slideEl.append($shadowAfterEl);\n          }\n          if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }\n          if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }\n        }\n      }\n\n      // Set correct perspective for IE10\n      if (Support.pointerEvents || Support.prefixedPointerEvents) {\n        var ws = $wrapperEl[0].style;\n        ws.perspectiveOrigin = center + \"px 50%\";\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      swiper.slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n    },\n  };\n\n  var EffectCoverflow = {\n    name: 'effect-coverflow',\n    params: {\n      coverflowEffect: {\n        rotate: 50,\n        stretch: 0,\n        depth: 100,\n        modifier: 1,\n        slideShadows: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        coverflowEffect: {\n          setTranslate: Coverflow.setTranslate.bind(swiper),\n          setTransition: Coverflow.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"coverflow\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n        swiper.coverflowEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n        swiper.coverflowEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Thumbs = {\n    init: function init() {\n      var swiper = this;\n      var ref = swiper.params;\n      var thumbsParams = ref.thumbs;\n      var SwiperClass = swiper.constructor;\n      if (thumbsParams.swiper instanceof SwiperClass) {\n        swiper.thumbs.swiper = thumbsParams.swiper;\n        Utils.extend(swiper.thumbs.swiper.originalParams, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        });\n        Utils.extend(swiper.thumbs.swiper.params, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        });\n      } else if (Utils.isObject(thumbsParams.swiper)) {\n        swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n          watchSlidesVisibility: true,\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        }));\n        swiper.thumbs.swiperCreated = true;\n      }\n      swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n      swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n    },\n    onThumbClick: function onThumbClick() {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) { return; }\n      var clickedIndex = thumbsSwiper.clickedIndex;\n      var clickedSlide = thumbsSwiper.clickedSlide;\n      if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) { return; }\n      if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }\n      var slideToIndex;\n      if (thumbsSwiper.params.loop) {\n        slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      } else {\n        slideToIndex = clickedIndex;\n      }\n      if (swiper.params.loop) {\n        var currentIndex = swiper.activeIndex;\n        if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n          swiper.loopFix();\n          // eslint-disable-next-line\n          swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n          currentIndex = swiper.activeIndex;\n        }\n        var prevIndex = swiper.slides.eq(currentIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n        var nextIndex = swiper.slides.eq(currentIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n        if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }\n        else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }\n        else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; }\n        else { slideToIndex = prevIndex; }\n      }\n      swiper.slideTo(slideToIndex);\n    },\n    update: function update(initial) {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) { return; }\n\n      var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n        ? thumbsSwiper.slidesPerViewDynamic()\n        : thumbsSwiper.params.slidesPerView;\n\n      if (swiper.realIndex !== thumbsSwiper.realIndex) {\n        var currentThumbsIndex = thumbsSwiper.activeIndex;\n        var newThumbsIndex;\n        if (thumbsSwiper.params.loop) {\n          if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n            thumbsSwiper.loopFix();\n            // eslint-disable-next-line\n            thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n            currentThumbsIndex = thumbsSwiper.activeIndex;\n          }\n          // Find actual thumbs index to slide to\n          var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n          var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n          if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }\n          else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }\n          else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = currentThumbsIndex; }\n          else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }\n          else { newThumbsIndex = prevThumbsIndex; }\n        } else {\n          newThumbsIndex = swiper.realIndex;\n        }\n        if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n          if (thumbsSwiper.params.centeredSlides) {\n            if (newThumbsIndex > currentThumbsIndex) {\n              newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n            } else {\n              newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n            }\n          } else if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n          }\n          thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n        }\n      }\n\n      // Activate thumbs\n      var thumbsToActivate = 1;\n      var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n      if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n        thumbsToActivate = swiper.params.slidesPerView;\n      }\n\n      thumbsSwiper.slides.removeClass(thumbActiveClass);\n      if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual) {\n        for (var i = 0; i < thumbsToActivate; i += 1) {\n          thumbsSwiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\")).addClass(thumbActiveClass);\n        }\n      } else {\n        for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {\n          thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);\n        }\n      }\n    },\n  };\n  var Thumbs$1 = {\n    name: 'thumbs',\n    params: {\n      thumbs: {\n        swiper: null,\n        slideThumbActiveClass: 'swiper-slide-thumb-active',\n        thumbsContainerClass: 'swiper-container-thumbs',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        thumbs: {\n          swiper: null,\n          init: Thumbs.init.bind(swiper),\n          update: Thumbs.update.bind(swiper),\n          onThumbClick: Thumbs.onThumbClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        var ref = swiper.params;\n        var thumbs = ref.thumbs;\n        if (!thumbs || !thumbs.swiper) { return; }\n        swiper.thumbs.init();\n        swiper.thumbs.update(true);\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      update: function update() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) { return; }\n        thumbsSwiper.setTransition(duration);\n      },\n      beforeDestroy: function beforeDestroy() {\n        var swiper = this;\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) { return; }\n        if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n          thumbsSwiper.destroy();\n        }\n      },\n    },\n  };\n\n  // Swiper Class\n\n  var components = [\n    Device$1,\n    Support$1,\n    Browser$1,\n    Resize,\n    Observer$1,\n    Virtual$1,\n    Keyboard$1,\n    Mousewheel$1,\n    Navigation$1,\n    Pagination$1,\n    Scrollbar$1,\n    Parallax$1,\n    Zoom$1,\n    Lazy$1,\n    Controller$1,\n    A11y,\n    History$1,\n    HashNavigation$1,\n    Autoplay$1,\n    EffectFade,\n    EffectCube,\n    EffectFlip,\n    EffectCoverflow,\n    Thumbs$1\n  ];\n\n  if (typeof Swiper.use === 'undefined') {\n    Swiper.use = Swiper.Class.use;\n    Swiper.installModule = Swiper.Class.installModule;\n  }\n\n  Swiper.use(components);\n\n  return Swiper;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanM/YzAwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN3aXBlciA0LjUuMVxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcbiAqIGh0dHA6Ly93d3cuaWRhbmdlcm8udXMvc3dpcGVyL1xuICpcbiAqIENvcHlyaWdodCAyMDE0LTIwMTkgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqXG4gKiBSZWxlYXNlZCBvbjogU2VwdGVtYmVyIDEzLCAyMDE5XG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2lwZXIgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogU1NSIFdpbmRvdyAxLjAuMVxuICAgKiBCZXR0ZXIgaGFuZGxpbmcgZm9yIHdpbmRvdyBvYmplY3QgaW4gU1NSIGVudmlyb25tZW50XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICAgKlxuICAgKiBDb3B5cmlnaHQgMjAxOCwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAgICpcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUXG4gICAqXG4gICAqIFJlbGVhc2VkIG9uOiBKdWx5IDE4LCAyMDE4XG4gICAqL1xuICB2YXIgZG9jID0gKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGJvZHk6IHt9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gICAgYWN0aXZlRWxlbWVudDoge1xuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHt9LFxuICAgICAgbm9kZU5hbWU6ICcnLFxuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24gcXVlcnlTZWxlY3RvcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdEV2ZW50OiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7IGhhc2g6ICcnIH0sXG4gIH0gOiBkb2N1bWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIHZhciB3aW4gPSAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGRvY3VtZW50OiBkb2MsXG4gICAgbmF2aWdhdG9yOiB7XG4gICAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIH0sXG4gICAgbG9jYXRpb246IHt9LFxuICAgIGhpc3Rvcnk6IHt9LFxuICAgIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZSgpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgSW1hZ2U6IGZ1bmN0aW9uIEltYWdlKCkge30sXG4gICAgRGF0ZTogZnVuY3Rpb24gRGF0ZSgpIHt9LFxuICAgIHNjcmVlbjoge30sXG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gc2V0VGltZW91dCgpIHt9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gY2xlYXJUaW1lb3V0KCkge30sXG4gIH0gOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvKipcbiAgICogRG9tNyAyLjEuM1xuICAgKiBNaW5pbWFsaXN0aWMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gbWFuaXB1bGF0aW9uLCB3aXRoIGEgalF1ZXJ5LWNvbXBhdGlibGUgQVBJXG4gICAqIGh0dHA6Ly9mcmFtZXdvcms3LmlvL2RvY3MvZG9tLmh0bWxcbiAgICpcbiAgICogQ29weXJpZ2h0IDIwMTksIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gICAqIFRoZSBpRGFuZ2Vyby51c1xuICAgKiBodHRwOi8vd3d3LmlkYW5nZXJvLnVzL1xuICAgKlxuICAgKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAgICpcbiAgICogUmVsZWFzZWQgb246IEZlYnJ1YXJ5IDExLCAyMDE5XG4gICAqL1xuXG4gIHZhciBEb203ID0gZnVuY3Rpb24gRG9tNyhhcnIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gQ3JlYXRlIGFycmF5LWxpa2Ugb2JqZWN0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNlbGZbaV0gPSBhcnJbaV07XG4gICAgfVxuICAgIHNlbGYubGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgICAvLyBSZXR1cm4gY29sbGVjdGlvbiB3aXRoIG1ldGhvZHNcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBpZiAoc2VsZWN0b3IgJiYgIWNvbnRleHQpIHtcbiAgICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZWxzO1xuICAgICAgICB2YXIgdGVtcFBhcmVudDtcbiAgICAgICAgdmFyIGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJzwnKSA+PSAwICYmIGh0bWwuaW5kZXhPZignPicpID49IDApIHtcbiAgICAgICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd1bCc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd0Ym9keSc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGQnKSA9PT0gMCB8fCBodG1sLmluZGV4T2YoJzx0aCcpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RyJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RhYmxlJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICdzZWxlY3QnOyB9XG4gICAgICAgICAgdGVtcFBhcmVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRvQ3JlYXRlKTtcbiAgICAgICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYXJyLnB1c2godGVtcFBhcmVudC5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yWzBdID09PSAnIycgJiYgIXNlbGVjdG9yLm1hdGNoKC9bIC48Pjp+XS8pKSB7XG4gICAgICAgICAgICAvLyBQdXJlIElEIHNlbGVjdG9yXG4gICAgICAgICAgICBlbHMgPSBbZG9jLmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLnRyaW0oKS5zcGxpdCgnIycpWzFdKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyIHNlbGVjdG9yc1xuICAgICAgICAgICAgZWxzID0gKGNvbnRleHQgfHwgZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yLnRyaW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChlbHNbaV0pIHsgYXJyLnB1c2goZWxzW2ldKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciA9PT0gd2luIHx8IHNlbGVjdG9yID09PSBkb2MpIHtcbiAgICAgICAgLy8gTm9kZS9lbGVtZW50XG4gICAgICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IubGVuZ3RoID4gMCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkge1xuICAgICAgICAvLyBBcnJheSBvZiBlbGVtZW50cyBvciBpbnN0YW5jZSBvZiBEb21cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdG9yLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgYXJyLnB1c2goc2VsZWN0b3JbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhhcnIpO1xuICB9XG5cbiAgJC5mbiA9IERvbTcucHJvdG90eXBlO1xuICAkLkNsYXNzID0gRG9tNztcbiAgJC5Eb203ID0gRG9tNztcblxuICBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XG4gICAgdmFyIHVuaXF1ZUFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB7IHVuaXF1ZUFycmF5LnB1c2goYXJyW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcXVlQXJyYXk7XG4gIH1cblxuICAvLyBDbGFzc2VzIGFuZCBhdHRyaWJ1dGVzXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzTmFtZSkge1xuICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LmFkZChjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tqXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXNbal0uY2xhc3NMaXN0ICE9PSAndW5kZWZpbmVkJykgeyB0aGlzW2pdLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlc1tpXSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgaWYgKCF0aGlzWzBdKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aGlzWzBdLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICB9XG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LnRvZ2dsZShjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdldCBhdHRyXG4gICAgICBpZiAodGhpc1swXSkgeyByZXR1cm4gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0cnMpOyB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNldCBhdHRyc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cyQxLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZm9yICh2YXIgYXR0ck5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgICB0aGlzW2ldW2F0dHJOYW1lXSA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgICB0aGlzW2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cnNbYXR0ck5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZnVuY3Rpb24gcmVtb3ZlQXR0cihhdHRyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gZGF0YShrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVsO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlbCA9IHRoaXNbMF07XG4gICAgICAvLyBHZXQgdmFsdWVcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiAoa2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhS2V5ID0gZWwuZ2V0QXR0cmlidXRlKChcImRhdGEtXCIgKyBrZXkpKTtcbiAgICAgICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YUtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdmFsdWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGVsID0gdGhpc1tpXTtcbiAgICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgeyBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlID0ge307IH1cbiAgICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBUcmFuc2Zvcm1zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIGVsU3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiB0cmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKyBcIm1zXCI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgZWxTdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gRXZlbnRzXG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHZhciBhc3NpZ247XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF07XG4gICAgdmFyIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXTtcbiAgICB2YXIgbGlzdGVuZXIgPSBhcmdzWzJdO1xuICAgIHZhciBjYXB0dXJlID0gYXJnc1szXTtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChhc3NpZ24gPSBhcmdzLCBldmVudFR5cGUgPSBhc3NpZ25bMF0sIGxpc3RlbmVyID0gYXNzaWduWzFdLCBjYXB0dXJlID0gYXNzaWduWzJdKTtcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIWNhcHR1cmUpIHsgY2FwdHVyZSA9IGZhbHNlOyB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVMaXZlRXZlbnQoZSkge1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgZXZlbnREYXRhID0gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBpZiAoJCh0YXJnZXQpLmlzKHRhcmdldFNlbGVjdG9yKSkgeyBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7IH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcGFyZW50cyA9ICQodGFyZ2V0KS5wYXJlbnRzKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwYXJlbnRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgICAgaWYgKCQocGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSB7IGxpc3RlbmVyLmFwcGx5KHBhcmVudHNba10sIGV2ZW50RGF0YSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICB2YXIgZXZlbnREYXRhID0gZSAmJiBlLnRhcmdldCA/IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW10gOiBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbiAgICB2YXIgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gICAgdmFyIGo7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzW2ldO1xuICAgICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgeyBlbC5kb203TGlzdGVuZXJzID0ge307IH1cbiAgICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdKSB7IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107IH1cbiAgICAgICAgICBlbC5kb203TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHZhciBldmVudCQxID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTsgfVxuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0pIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0gPSBbXTsgfVxuICAgICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW2V2ZW50JDFdLnB1c2goe1xuICAgICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQkMSwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBvZmYoKSB7XG4gICAgdmFyIGFzc2lnbjtcblxuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdO1xuICAgIHZhciBsaXN0ZW5lciA9IGFyZ3NbMl07XG4gICAgdmFyIGNhcHR1cmUgPSBhcmdzWzNdO1xuICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKGFzc2lnbiA9IGFyZ3MsIGV2ZW50VHlwZSA9IGFzc2lnblswXSwgbGlzdGVuZXIgPSBhc3NpZ25bMV0sIGNhcHR1cmUgPSBhc3NpZ25bMl0pO1xuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghY2FwdHVyZSkgeyBjYXB0dXJlID0gZmFsc2U7IH1cblxuICAgIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXNbal07XG4gICAgICAgIHZhciBoYW5kbGVycyA9ICh2b2lkIDApO1xuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZXJzICYmIGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSBoYW5kbGVycy5sZW5ndGggLSAxOyBrID49IDA7IGsgLT0gMSkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1trXTtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgZXZlbnRzID0gYXJnc1swXS5zcGxpdCgnICcpO1xuICAgIHZhciBldmVudERhdGEgPSBhcmdzWzFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpc1tqXTtcbiAgICAgICAgdmFyIGV2dCA9ICh2b2lkIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2dCA9IG5ldyB3aW4uQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBldnQgPSBkb2MuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgICAgZXZ0LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgZXZ0LmRldGFpbCA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChkYXRhLCBkYXRhSW5kZXgpIHsgcmV0dXJuIGRhdGFJbmRleCA+IDA7IH0pO1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgZGVsZXRlIGVsLmRvbTdFdmVudERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoY2FsbGJhY2spIHtcbiAgICB2YXIgZXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICB2YXIgZG9tID0gdGhpcztcbiAgICB2YXIgaTtcbiAgICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgICAgLyoganNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBkb20ub2ZmKGV2ZW50c1tpXSwgZmlyZUNhbGxCYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGRvbS5vbihldmVudHNbaV0sIGZpcmVDYWxsQmFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHZhciBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YXIgc3R5bGVzID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgICAgdmFyIGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIHZhciBjbGllbnRUb3AgPSBlbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgICAgIHZhciBjbGllbnRMZWZ0ID0gZWwuY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDtcbiAgICAgIHZhciBzY3JvbGxUb3AgPSBlbCA9PT0gd2luID8gd2luLnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsID09PSB3aW4gPyB3aW4uc2Nyb2xsWCA6IGVsLnNjcm9sbExlZnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IChib3gudG9wICsgc2Nyb2xsVG9wKSAtIGNsaWVudFRvcCxcbiAgICAgICAgbGVmdDogKGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCkgLSBjbGllbnRMZWZ0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZXMoKSB7XG4gICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpOyB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjb2xsZWN0aW9uIHBhc3NpbmcgZWxlbWVudHMgdG8gYGNhbGxiYWNrYFxuICBmdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbnRpbnVpbmcgd2l0aG91dCBhIGNhbGxiYWNrXG4gICAgaWYgKCFjYWxsYmFjaykgeyByZXR1cm4gdGhpczsgfVxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBjb2xsZWN0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc1tpXSwgaSwgdGhpc1tpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIEVuZCB0aGUgbG9vcCBlYXJseVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmV0dXJuIGB0aGlzYCB0byBhbGxvdyBjaGFpbmVkIERPTSBvcGVyYXRpb25zXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZ1bmN0aW9uIGh0bWwoaHRtbCkge1xuICAgIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzWzBdID8gdGhpc1swXS5pbm5lckhUTUwgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiB0ZXh0KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpc1swXSkge1xuICAgICAgICByZXR1cm4gdGhpc1swXS50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgdmFyIGNvbXBhcmVXaXRoO1xuICAgIHZhciBpO1xuICAgIGlmICghZWwgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGVsLm1hdGNoZXMpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpOyB9XG4gICAgICBlbHNlIGlmIChlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IpIHsgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7IH1cbiAgICAgIGVsc2UgaWYgKGVsLm1zTWF0Y2hlc1NlbGVjdG9yKSB7IHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7IH1cblxuICAgICAgY29tcGFyZVdpdGggPSAkKHNlbGVjdG9yKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gZG9jKSB7IHJldHVybiBlbCA9PT0gZG9jOyB9XG4gICAgZWxzZSBpZiAoc2VsZWN0b3IgPT09IHdpbikgeyByZXR1cm4gZWwgPT09IHdpbjsgfVxuXG4gICAgaWYgKHNlbGVjdG9yLm5vZGVUeXBlIHx8IHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgY29tcGFyZVdpdGggPSBzZWxlY3Rvci5ub2RlVHlwZSA/IFtzZWxlY3Rvcl0gOiBzZWxlY3RvcjtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBpbmRleCgpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzWzBdO1xuICAgIHZhciBpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgaSA9IDA7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgeyBpICs9IDE7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiBlcShpbmRleCkge1xuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB0aGlzOyB9XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciByZXR1cm5JbmRleDtcbiAgICBpZiAoaW5kZXggPiBsZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm5JbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgICAgaWYgKHJldHVybkluZGV4IDwgMCkgeyByZXR1cm4gbmV3IERvbTcoW10pOyB9XG4gICAgICByZXR1cm4gbmV3IERvbTcoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhbdGhpc1tpbmRleF1dKTtcbiAgfVxuICBmdW5jdGlvbiBhcHBlbmQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIG5ld0NoaWxkO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBhcmdzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICBuZXdDaGlsZCA9IGFyZ3Nba107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIgdGVtcERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuICAgICAgICAgIHdoaWxlICh0ZW1wRGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGVuZChuZXdDaGlsZCkge1xuICAgIHZhciBpO1xuICAgIHZhciBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgdGVtcERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcbiAgICAgICAgZm9yIChqID0gdGVtcERpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUodGVtcERpdi5jaGlsZE5vZGVzW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3Q2hpbGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZFtqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nICYmICQodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgRG9tNyhbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpIHsgcmV0dXJuIG5ldyBEb203KFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pOyB9XG4gICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICB9XG4gIGZ1bmN0aW9uIG5leHRBbGwoc2VsZWN0b3IpIHtcbiAgICB2YXIgbmV4dEVscyA9IFtdO1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgaWYgKCFlbCkgeyByZXR1cm4gbmV3IERvbTcoW10pOyB9XG4gICAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgdmFyIG5leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChuZXh0KS5pcyhzZWxlY3RvcikpIHsgbmV4dEVscy5wdXNoKG5leHQpOyB9XG4gICAgICB9IGVsc2UgeyBuZXh0RWxzLnB1c2gobmV4dCk7IH1cbiAgICAgIGVsID0gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KG5leHRFbHMpO1xuICB9XG4gIGZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICQoZWwucHJldmlvdXNFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEb203KFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHsgcmV0dXJuIG5ldyBEb203KFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7IH1cbiAgICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gIH1cbiAgZnVuY3Rpb24gcHJldkFsbChzZWxlY3Rvcikge1xuICAgIHZhciBwcmV2RWxzID0gW107XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSB7IHJldHVybiBuZXcgRG9tNyhbXSk7IH1cbiAgICB3aGlsZSAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgICAgdmFyIHByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCQocHJldikuaXMoc2VsZWN0b3IpKSB7IHByZXZFbHMucHVzaChwcmV2KTsgfVxuICAgICAgfSBlbHNlIHsgcHJldkVscy5wdXNoKHByZXYpOyB9XG4gICAgICBlbCA9IHByZXY7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhwcmV2RWxzKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIGlmICgkKHRoaXNbaV0ucGFyZW50Tm9kZSkuaXMoc2VsZWN0b3IpKSB7IHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICQodW5pcXVlKHBhcmVudHMpKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBpZiAoJChwYXJlbnQpLmlzKHNlbGVjdG9yKSkgeyBwYXJlbnRzLnB1c2gocGFyZW50KTsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJCh1bmlxdWUocGFyZW50cykpO1xuICB9XG4gIGZ1bmN0aW9uIGNsb3Nlc3Qoc2VsZWN0b3IpIHtcbiAgICB2YXIgY2xvc2VzdCA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICB9XG4gICAgaWYgKCFjbG9zZXN0LmlzKHNlbGVjdG9yKSkge1xuICAgICAgY2xvc2VzdCA9IGNsb3Nlc3QucGFyZW50cyhzZWxlY3RvcikuZXEoMCk7XG4gICAgfVxuICAgIHJldHVybiBjbG9zZXN0O1xuICB9XG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGZvdW5kID0gdGhpc1tpXS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm91bmQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgZm91bmRFbGVtZW50cy5wdXNoKGZvdW5kW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KGZvdW5kRWxlbWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIGNoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpc1tpXS5jaGlsZE5vZGVzO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkTm9kZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxKSB7IGNoaWxkcmVuLnB1c2goY2hpbGROb2Rlc1tqXSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxICYmICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcodW5pcXVlKGNoaWxkcmVuKSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSkgeyB0aGlzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc1tpXSk7IH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gYWRkKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciBkb20gPSB0aGlzO1xuICAgIHZhciBpO1xuICAgIHZhciBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgdG9BZGQgPSAkKGFyZ3NbaV0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IHRvQWRkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGRvbVtkb20ubGVuZ3RoXSA9IHRvQWRkW2pdO1xuICAgICAgICBkb20ubGVuZ3RoICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkb207XG4gIH1cblxuICB2YXIgTWV0aG9kcyA9IHtcbiAgICBhZGRDbGFzczogYWRkQ2xhc3MsXG4gICAgcmVtb3ZlQ2xhc3M6IHJlbW92ZUNsYXNzLFxuICAgIGhhc0NsYXNzOiBoYXNDbGFzcyxcbiAgICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gICAgYXR0cjogYXR0cixcbiAgICByZW1vdmVBdHRyOiByZW1vdmVBdHRyLFxuICAgIGRhdGE6IGRhdGEsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgICBvbjogb24sXG4gICAgb2ZmOiBvZmYsXG4gICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kLFxuICAgIG91dGVyV2lkdGg6IG91dGVyV2lkdGgsXG4gICAgb3V0ZXJIZWlnaHQ6IG91dGVySGVpZ2h0LFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIGNzczogY3NzLFxuICAgIGVhY2g6IGVhY2gsXG4gICAgaHRtbDogaHRtbCxcbiAgICB0ZXh0OiB0ZXh0LFxuICAgIGlzOiBpcyxcbiAgICBpbmRleDogaW5kZXgsXG4gICAgZXE6IGVxLFxuICAgIGFwcGVuZDogYXBwZW5kLFxuICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgbmV4dDogbmV4dCxcbiAgICBuZXh0QWxsOiBuZXh0QWxsLFxuICAgIHByZXY6IHByZXYsXG4gICAgcHJldkFsbDogcHJldkFsbCxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRzOiBwYXJlbnRzLFxuICAgIGNsb3Nlc3Q6IGNsb3Nlc3QsXG4gICAgZmluZDogZmluZCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgYWRkOiBhZGQsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gIH07XG5cbiAgT2JqZWN0LmtleXMoTWV0aG9kcykuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgICQuZm5bbWV0aG9kTmFtZV0gPSAkLmZuW21ldGhvZE5hbWVdIHx8IE1ldGhvZHNbbWV0aG9kTmFtZV07XG4gIH0pO1xuXG4gIHZhciBVdGlscyA9IHtcbiAgICBkZWxldGVQcm9wczogZnVuY3Rpb24gZGVsZXRlUHJvcHMob2JqKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gb2JqO1xuICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBubyBnZXR0ZXIgZm9yIG9iamVjdFxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gc29tZXRoaW5nIGdvdCB3cm9uZ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5leHRUaWNrOiBmdW5jdGlvbiBuZXh0VGljayhjYWxsYmFjaywgZGVsYXkpIHtcbiAgICAgIGlmICggZGVsYXkgPT09IHZvaWQgMCApIGRlbGF5ID0gMDtcblxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgICB9LFxuICAgIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgfSxcbiAgICBnZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIGdldFRyYW5zbGF0ZShlbCwgYXhpcykge1xuICAgICAgaWYgKCBheGlzID09PSB2b2lkIDAgKSBheGlzID0gJ3gnO1xuXG4gICAgICB2YXIgbWF0cml4O1xuICAgICAgdmFyIGN1clRyYW5zZm9ybTtcbiAgICAgIHZhciB0cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICAgIHZhciBjdXJTdHlsZSA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKTtcblxuICAgICAgaWYgKHdpbi5XZWJLaXRDU1NNYXRyaXgpIHtcbiAgICAgICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcbiAgICAgICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJUcmFuc2Zvcm0uc3BsaXQoJywgJykubWFwKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpOyB9KS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIFdlYmtpdCBjaG9rZSB3aGVuICdub25lJyBpcyBwYXNzZWQ7IHBhc3NcbiAgICAgICAgLy8gZW1wdHkgc3RyaW5nIGluc3RlYWQgaW4gdGhpcyBjYXNlXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyB3aW4uV2ViS2l0Q1NTTWF0cml4KGN1clRyYW5zZm9ybSA9PT0gJ25vbmUnID8gJycgOiBjdXJUcmFuc2Zvcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeC50b1N0cmluZygpLnNwbGl0KCcsJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgICAgaWYgKHdpbi5XZWJLaXRDU1NNYXRyaXgpIHsgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MTsgfVxuICAgICAgICAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgICAgICBlbHNlIGlmIChtYXRyaXgubGVuZ3RoID09PSAxNikgeyBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyB9XG4gICAgICAgIC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgICBlbHNlIHsgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNF0pOyB9XG4gICAgICB9XG4gICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgICAgIGlmICh3aW4uV2ViS2l0Q1NTTWF0cml4KSB7IGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDI7IH1cbiAgICAgICAgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIHsgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbMTNdKTsgfVxuICAgICAgICAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICAgICAgZWxzZSB7IGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN1clRyYW5zZm9ybSB8fCAwO1xuICAgIH0sXG4gICAgcGFyc2VVcmxRdWVyeTogZnVuY3Rpb24gcGFyc2VVcmxRdWVyeSh1cmwpIHtcbiAgICAgIHZhciBxdWVyeSA9IHt9O1xuICAgICAgdmFyIHVybFRvUGFyc2UgPSB1cmwgfHwgd2luLmxvY2F0aW9uLmhyZWY7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBwYXJhbXM7XG4gICAgICB2YXIgcGFyYW07XG4gICAgICB2YXIgbGVuZ3RoO1xuICAgICAgaWYgKHR5cGVvZiB1cmxUb1BhcnNlID09PSAnc3RyaW5nJyAmJiB1cmxUb1BhcnNlLmxlbmd0aCkge1xuICAgICAgICB1cmxUb1BhcnNlID0gdXJsVG9QYXJzZS5pbmRleE9mKCc/JykgPiAtMSA/IHVybFRvUGFyc2UucmVwbGFjZSgvXFxTKlxcPy8sICcnKSA6ICcnO1xuICAgICAgICBwYXJhbXMgPSB1cmxUb1BhcnNlLnNwbGl0KCcmJykuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbXNQYXJ0KSB7IHJldHVybiBwYXJhbXNQYXJ0ICE9PSAnJzsgfSk7XG4gICAgICAgIGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV0ucmVwbGFjZSgvI1xcUysvZywgJycpLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgcXVlcnlbZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtWzBdKV0gPSB0eXBlb2YgcGFyYW1bMV0gPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtWzFdKSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH0sXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiBvLmNvbnN0cnVjdG9yICYmIG8uY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICB9LFxuICAgIGV4dGVuZDogZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuJDEgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4kMS0tICkgYXJnc1sgbGVuJDEgXSA9IGFyZ3VtZW50c1sgbGVuJDEgXTtcblxuICAgICAgdmFyIHRvID0gT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBuZXh0U291cmNlID0gYXJnc1tpXTtcbiAgICAgICAgaWYgKG5leHRTb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBuZXh0U291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGtleXNBcnJheSA9IE9iamVjdC5rZXlzKE9iamVjdChuZXh0U291cmNlKSk7XG4gICAgICAgICAgZm9yICh2YXIgbmV4dEluZGV4ID0gMCwgbGVuID0ga2V5c0FycmF5Lmxlbmd0aDsgbmV4dEluZGV4IDwgbGVuOyBuZXh0SW5kZXggKz0gMSkge1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZXh0U291cmNlLCBuZXh0S2V5KTtcbiAgICAgICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICAgIGlmIChVdGlscy5pc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgVXRpbHMuaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5leHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgVXRpbHMuaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIFV0aWxzLmV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdG87XG4gICAgfSxcbiAgfTtcblxuICB2YXIgU3VwcG9ydCA9IChmdW5jdGlvbiBTdXBwb3J0KCkge1xuICAgIHZhciB0ZXN0RGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHJldHVybiB7XG4gICAgICB0b3VjaDogKHdpbi5Nb2Rlcm5penIgJiYgd2luLk1vZGVybml6ci50b3VjaCA9PT0gdHJ1ZSkgfHwgKGZ1bmN0aW9uIGNoZWNrVG91Y2goKSB7XG4gICAgICAgIHJldHVybiAhISgod2luLm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApIHx8ICgnb250b3VjaHN0YXJ0JyBpbiB3aW4pIHx8ICh3aW4uRG9jdW1lbnRUb3VjaCAmJiBkb2MgaW5zdGFuY2VvZiB3aW4uRG9jdW1lbnRUb3VjaCkpO1xuICAgICAgfSgpKSxcblxuICAgICAgcG9pbnRlckV2ZW50czogISEod2luLm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZCB8fCB3aW4uUG9pbnRlckV2ZW50IHx8ICgnbWF4VG91Y2hQb2ludHMnIGluIHdpbi5uYXZpZ2F0b3IgJiYgd2luLm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApKSxcbiAgICAgIHByZWZpeGVkUG9pbnRlckV2ZW50czogISF3aW4ubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQsXG5cbiAgICAgIHRyYW5zaXRpb246IChmdW5jdGlvbiBjaGVja1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRlc3REaXYuc3R5bGU7XG4gICAgICAgIHJldHVybiAoJ3RyYW5zaXRpb24nIGluIHN0eWxlIHx8ICd3ZWJraXRUcmFuc2l0aW9uJyBpbiBzdHlsZSB8fCAnTW96VHJhbnNpdGlvbicgaW4gc3R5bGUpO1xuICAgICAgfSgpKSxcbiAgICAgIHRyYW5zZm9ybXMzZDogKHdpbi5Nb2Rlcm5penIgJiYgd2luLk1vZGVybml6ci5jc3N0cmFuc2Zvcm1zM2QgPT09IHRydWUpIHx8IChmdW5jdGlvbiBjaGVja1RyYW5zZm9ybXMzZCgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGVzdERpdi5zdHlsZTtcbiAgICAgICAgcmV0dXJuICgnd2Via2l0UGVyc3BlY3RpdmUnIGluIHN0eWxlIHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gc3R5bGUgfHwgJ09QZXJzcGVjdGl2ZScgaW4gc3R5bGUgfHwgJ01zUGVyc3BlY3RpdmUnIGluIHN0eWxlIHx8ICdwZXJzcGVjdGl2ZScgaW4gc3R5bGUpO1xuICAgICAgfSgpKSxcblxuICAgICAgZmxleGJveDogKGZ1bmN0aW9uIGNoZWNrRmxleGJveCgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGVzdERpdi5zdHlsZTtcbiAgICAgICAgdmFyIHN0eWxlcyA9ICgnYWxpZ25JdGVtcyB3ZWJraXRBbGlnbkl0ZW1zIHdlYmtpdEJveEFsaWduIG1zRmxleEFsaWduIG1vekJveEFsaWduIHdlYmtpdEZsZXhEaXJlY3Rpb24gbXNGbGV4RGlyZWN0aW9uIG1vekJveERpcmVjdGlvbiBtb3pCb3hPcmllbnQgd2Via2l0Qm94RGlyZWN0aW9uIHdlYmtpdEJveE9yaWVudCcpLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHN0eWxlc1tpXSBpbiBzdHlsZSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0oKSksXG5cbiAgICAgIG9ic2VydmVyOiAoZnVuY3Rpb24gY2hlY2tPYnNlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuICgnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luIHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW4pO1xuICAgICAgfSgpKSxcblxuICAgICAgcGFzc2l2ZUxpc3RlbmVyOiAoZnVuY3Rpb24gY2hlY2tQYXNzaXZlTGlzdGVuZXIoKSB7XG4gICAgICAgIHZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVMaXN0ZW5lcicsIG51bGwsIG9wdHMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gTm8gc3VwcG9ydFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XG4gICAgICB9KCkpLFxuXG4gICAgICBnZXN0dXJlczogKGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbjtcbiAgICAgIH0oKSksXG4gICAgfTtcbiAgfSgpKTtcblxuICB2YXIgQnJvd3NlciA9IChmdW5jdGlvbiBCcm93c2VyKCkge1xuICAgIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgICAgdmFyIHVhID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiAodWEuaW5kZXhPZignc2FmYXJpJykgPj0gMCAmJiB1YS5pbmRleE9mKCdjaHJvbWUnKSA8IDAgJiYgdWEuaW5kZXhPZignYW5kcm9pZCcpIDwgMCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0lFOiAhIXdpbi5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50L2cpIHx8ICEhd2luLm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUvZyksXG4gICAgICBpc0VkZ2U6ICEhd2luLm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2UvZyksXG4gICAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICAgIGlzVWlXZWJWaWV3OiAvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdCg/IS4qU2FmYXJpKS9pLnRlc3Qod2luLm5hdmlnYXRvci51c2VyQWdlbnQpLFxuICAgIH07XG4gIH0oKSk7XG5cbiAgdmFyIFN3aXBlckNsYXNzID0gZnVuY3Rpb24gU3dpcGVyQ2xhc3MocGFyYW1zKSB7XG4gICAgaWYgKCBwYXJhbXMgPT09IHZvaWQgMCApIHBhcmFtcyA9IHt9O1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgLy8gRXZlbnRzXG4gICAgc2VsZi5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcblxuICAgIGlmIChzZWxmLnBhcmFtcyAmJiBzZWxmLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc2VsZi5wYXJhbXMub24pLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICBzZWxmLm9uKGV2ZW50TmFtZSwgc2VsZi5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHN0YXRpY0FjY2Vzc29ycyA9IHsgY29tcG9uZW50czogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uIChldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gc2VsZjsgfVxuICAgIHZhciBtZXRob2QgPSBwcmlvcml0eSA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcbiAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHsgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107IH1cbiAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XVttZXRob2RdKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSAoZXZlbnRzLCBoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIHNlbGY7IH1cbiAgICBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgaGFuZGxlci5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuICAgICAgaWYgKG9uY2VIYW5kbGVyLmY3cHJveHkpIHtcbiAgICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLmY3cHJveHk7XG4gICAgICB9XG4gICAgfVxuICAgIG9uY2VIYW5kbGVyLmY3cHJveHkgPSBoYW5kbGVyO1xuICAgIHJldHVybiBzZWxmLm9uKGV2ZW50cywgb25jZUhhbmRsZXIsIHByaW9yaXR5KTtcbiAgfTtcblxuICBTd2lwZXJDbGFzcy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmIChldmVudHMsIGhhbmRsZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgeyByZXR1cm4gc2VsZjsgfVxuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRIYW5kbGVyLCBpbmRleCkge1xuICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09IGhhbmRsZXIgfHwgKGV2ZW50SGFuZGxlci5mN3Byb3h5ICYmIGV2ZW50SGFuZGxlci5mN3Byb3h5ID09PSBoYW5kbGVyKSkge1xuICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICBTd2lwZXJDbGFzcy5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgeyByZXR1cm4gc2VsZjsgfVxuICAgIHZhciBldmVudHM7XG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIGNvbnRleHQ7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBldmVudHMgPSBhcmdzWzBdO1xuICAgICAgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF0uZXZlbnRzO1xuICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgIGNvbnRleHQgPSBhcmdzWzBdLmNvbnRleHQgfHwgc2VsZjtcbiAgICB9XG4gICAgdmFyIGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG4gICAgZXZlbnRzQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBoYW5kbGVycy5wdXNoKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuYXBwbHkoY29udGV4dCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS51c2VNb2R1bGVzUGFyYW1zID0gZnVuY3Rpb24gdXNlTW9kdWxlc1BhcmFtcyAoaW5zdGFuY2VQYXJhbXMpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB0aGlzO1xuICAgIGlmICghaW5zdGFuY2UubW9kdWxlcykgeyByZXR1cm47IH1cbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZS5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICB2YXIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgIC8vIEV4dGVuZCBwYXJhbXNcbiAgICAgIGlmIChtb2R1bGUucGFyYW1zKSB7XG4gICAgICAgIFV0aWxzLmV4dGVuZChpbnN0YW5jZVBhcmFtcywgbW9kdWxlLnBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MucHJvdG90eXBlLnVzZU1vZHVsZXMgPSBmdW5jdGlvbiB1c2VNb2R1bGVzIChtb2R1bGVzUGFyYW1zKSB7XG4gICAgICBpZiAoIG1vZHVsZXNQYXJhbXMgPT09IHZvaWQgMCApIG1vZHVsZXNQYXJhbXMgPSB7fTtcblxuICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG4gICAgaWYgKCFpbnN0YW5jZS5tb2R1bGVzKSB7IHJldHVybjsgfVxuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBpbnN0YW5jZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZXNQYXJhbXNbbW9kdWxlTmFtZV0gfHwge307XG4gICAgICAvLyBFeHRlbmQgaW5zdGFuY2UgbWV0aG9kcyBhbmQgcHJvcHNcbiAgICAgIGlmIChtb2R1bGUuaW5zdGFuY2UpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLmluc3RhbmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVQcm9wTmFtZSkge1xuICAgICAgICAgIHZhciBtb2R1bGVQcm9wID0gbW9kdWxlLmluc3RhbmNlW21vZHVsZVByb3BOYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3AuYmluZChpbnN0YW5jZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3A7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAgIGlmIChtb2R1bGUub24gJiYgaW5zdGFuY2Uub24pIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVFdmVudE5hbWUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5vbihtb2R1bGVFdmVudE5hbWUsIG1vZHVsZS5vblttb2R1bGVFdmVudE5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcbiAgICAgIGlmIChtb2R1bGUuY3JlYXRlKSB7XG4gICAgICAgIG1vZHVsZS5jcmVhdGUuYmluZChpbnN0YW5jZSkobW9kdWxlUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWNBY2Nlc3NvcnMuY29tcG9uZW50cy5zZXQgPSBmdW5jdGlvbiAoY29tcG9uZW50cykge1xuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKCFDbGFzcy51c2UpIHsgcmV0dXJuOyB9XG4gICAgQ2xhc3MudXNlKGNvbXBvbmVudHMpO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLmluc3RhbGxNb2R1bGUgPSBmdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChtb2R1bGUpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHBhcmFtc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKCFDbGFzcy5wcm90b3R5cGUubW9kdWxlcykgeyBDbGFzcy5wcm90b3R5cGUubW9kdWxlcyA9IHt9OyB9XG4gICAgdmFyIG5hbWUgPSBtb2R1bGUubmFtZSB8fCAoKChPYmplY3Qua2V5cyhDbGFzcy5wcm90b3R5cGUubW9kdWxlcykubGVuZ3RoKSArIFwiX1wiICsgKFV0aWxzLm5vdygpKSkpO1xuICAgIENsYXNzLnByb3RvdHlwZS5tb2R1bGVzW25hbWVdID0gbW9kdWxlO1xuICAgIC8vIFByb3RvdHlwZVxuICAgIGlmIChtb2R1bGUucHJvdG8pIHtcbiAgICAgIE9iamVjdC5rZXlzKG1vZHVsZS5wcm90bykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIENsYXNzLnByb3RvdHlwZVtrZXldID0gbW9kdWxlLnByb3RvW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gQ2xhc3NcbiAgICBpZiAobW9kdWxlLnN0YXRpYykge1xuICAgICAgT2JqZWN0LmtleXMobW9kdWxlLnN0YXRpYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIENsYXNzW2tleV0gPSBtb2R1bGUuc3RhdGljW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gQ2FsbGJhY2tcbiAgICBpZiAobW9kdWxlLmluc3RhbGwpIHtcbiAgICAgIG1vZHVsZS5pbnN0YWxsLmFwcGx5KENsYXNzLCBwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gQ2xhc3M7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MudXNlID0gZnVuY3Rpb24gdXNlIChtb2R1bGUpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHBhcmFtc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0dXJuIENsYXNzLmluc3RhbGxNb2R1bGUobSk7IH0pO1xuICAgICAgcmV0dXJuIENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gQ2xhc3MuaW5zdGFsbE1vZHVsZS5hcHBseShDbGFzcywgWyBtb2R1bGUgXS5jb25jYXQoIHBhcmFtcyApKTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggU3dpcGVyQ2xhc3MsIHN0YXRpY0FjY2Vzc29ycyApO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNpemUgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSAkZWxbMF0uY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoZWlnaHQgPSBzd2lwZXIucGFyYW1zLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgICB9XG4gICAgaWYgKCh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHx8IChoZWlnaHQgPT09IDAgJiYgc3dpcGVyLmlzVmVydGljYWwoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdWJ0cmFjdCBwYWRkaW5nc1xuICAgIHdpZHRoID0gd2lkdGggLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWxlZnQnKSwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1yaWdodCcpLCAxMCk7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy10b3AnKSwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1ib3R0b20nKSwgMTApO1xuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBzaXplOiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB3aWR0aCA6IGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcyAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG5cbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzd2lwZXJTaXplID0gc3dpcGVyLnNpemU7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIHdyb25nUlRMID0gc3dpcGVyLndyb25nUlRMO1xuICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgIHZhciBwcmV2aW91c1NsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICB2YXIgc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuICAgIHZhciBzbGlkZXNMZW5ndGggPSBpc1ZpcnR1YWwgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc2xpZGVzLmxlbmd0aDtcbiAgICB2YXIgc25hcEdyaWQgPSBbXTtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IFtdO1xuICAgIHZhciBzbGlkZXNTaXplc0dyaWQgPSBbXTtcblxuICAgIHZhciBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0QmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXI7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICB2YXIgcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcblxuICAgIHZhciBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIHZhciBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgICB2YXIgcHJldlNsaWRlU2l6ZSA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAodHlwZW9mIHN3aXBlclNpemUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3BhY2VCZXR3ZWVuID09PSAnc3RyaW5nJyAmJiBzcGFjZUJldHdlZW4uaW5kZXhPZignJScpID49IDApIHtcbiAgICAgIHNwYWNlQmV0d2VlbiA9IChwYXJzZUZsb2F0KHNwYWNlQmV0d2Vlbi5yZXBsYWNlKCclJywgJycpKSAvIDEwMCkgKiBzd2lwZXJTaXplO1xuICAgIH1cblxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IC1zcGFjZUJldHdlZW47XG5cbiAgICAvLyByZXNldCBtYXJnaW5zXG4gICAgaWYgKHJ0bCkgeyBzbGlkZXMuY3NzKHsgbWFyZ2luTGVmdDogJycsIG1hcmdpblRvcDogJycgfSk7IH1cbiAgICBlbHNlIHsgc2xpZGVzLmNzcyh7IG1hcmdpblJpZ2h0OiAnJywgbWFyZ2luQm90dG9tOiAnJyB9KTsgfVxuXG4gICAgdmFyIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICBpZiAoTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSA9PT0gc2xpZGVzTGVuZ3RoIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLmNlaWwoc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdyb3cnKSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLm1heChzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzLCBwYXJhbXMuc2xpZGVzUGVyVmlldyAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGMgc2xpZGVzXG4gICAgdmFyIHNsaWRlU2l6ZTtcbiAgICB2YXIgc2xpZGVzUGVyQ29sdW1uID0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbjtcbiAgICB2YXIgc2xpZGVzUGVyUm93ID0gc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgICB2YXIgbnVtRnVsbENvbHVtbnMgPSBNYXRoLmZsb29yKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNsaWRlU2l6ZSA9IDA7XG4gICAgICB2YXIgc2xpZGUgPSBzbGlkZXMuZXEoaSk7XG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgICAgLy8gU2V0IHNsaWRlcyBvcmRlclxuICAgICAgICB2YXIgbmV3U2xpZGVPcmRlckluZGV4ID0gKHZvaWQgMCk7XG4gICAgICAgIHZhciBjb2x1bW4gPSAodm9pZCAwKTtcbiAgICAgICAgdmFyIHJvdyA9ICh2b2lkIDApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJylcbiAgICAgICAgICB8fCAocGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdyb3cnICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA+IDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgICByb3cgPSBpIC0gKGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sdW1uID4gbnVtRnVsbENvbHVtbnMgfHwgKGNvbHVtbiA9PT0gbnVtRnVsbENvbHVtbnMgJiYgcm93ID09PSBzbGlkZXNQZXJDb2x1bW4gLSAxKSkge1xuICAgICAgICAgICAgICByb3cgKz0gMTtcbiAgICAgICAgICAgICAgaWYgKHJvdyA+PSBzbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICByb3cgPSAwO1xuICAgICAgICAgICAgICAgIGNvbHVtbiArPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3KSAtIGdyb3VwSW5kZXggKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgICAgICAgY29sdW1uID0gaSAtIHJvdyAqIHBhcmFtcy5zbGlkZXNQZXJWaWV3IC0gZ3JvdXBJbmRleCAqIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdTbGlkZU9yZGVySW5kZXggPSBjb2x1bW4gKyAoKHJvdyAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MpIC8gc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgICAgICBzbGlkZVxuICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLW1vei1ib3gtb3JkaW5hbC1ncm91cCc6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgJy1tcy1mbGV4LW9yZGVyJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLXdlYmtpdC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgb3JkZXI6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlclJvdyk7XG4gICAgICAgICAgY29sdW1uID0gaSAtIChyb3cgKiBzbGlkZXNQZXJSb3cpO1xuICAgICAgICB9XG4gICAgICAgIHNsaWRlXG4gICAgICAgICAgLmNzcyhcbiAgICAgICAgICAgIChcIm1hcmdpbi1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAndG9wJyA6ICdsZWZ0JykpLFxuICAgICAgICAgICAgKHJvdyAhPT0gMCAmJiBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAmJiAoKChwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXN3aXBlci1jb2x1bW4nLCBjb2x1bW4pXG4gICAgICAgICAgLmF0dHIoJ2RhdGEtc3dpcGVyLXJvdycsIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGUuY3NzKCdkaXNwbGF5JykgPT09ICdub25lJykgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHZhciBzbGlkZVN0eWxlcyA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdLCBudWxsKTtcbiAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgICAgPyBzbGlkZS5vdXRlcldpZHRoKHRydWUpXG4gICAgICAgICAgICA6IHNsaWRlLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctbGVmdCcpKTtcbiAgICAgICAgICAgIHZhciBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKTtcbiAgICAgICAgICAgIHZhciBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG4gICAgICAgICAgICBpZiAoYm94U2l6aW5nICYmIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnICYmICFCcm93c2VyLmlzSUUpIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tdG9wJykpO1xuICAgICAgICAgICAgdmFyIG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpKTtcbiAgICAgICAgICAgIHZhciBib3hTaXppbmckMSA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgICAgICAgICAgIGlmIChib3hTaXppbmckMSAmJiBib3hTaXppbmckMSA9PT0gJ2JvcmRlci1ib3gnICYmICFCcm93c2VyLmlzSUUpIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gaGVpZ2h0ICsgbWFyZ2luVG9wICsgbWFyZ2luQm90dG9tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gaGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBtYXJnaW5Ub3AgKyBtYXJnaW5Cb3R0b207XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gY3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtICgocGFyYW1zLnNsaWRlc1BlclZpZXcgLSAxKSAqIHNwYWNlQmV0d2VlbikpIC8gcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTsgfVxuXG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICBzbGlkZXNbaV0uc3R5bGUud2lkdGggPSBzbGlkZVNpemUgKyBcInB4XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsaWRlc1tpXS5zdHlsZS5oZWlnaHQgPSBzbGlkZVNpemUgKyBcInB4XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgICB9XG4gICAgICBzbGlkZXNTaXplc0dyaWQucHVzaChzbGlkZVNpemUpO1xuXG5cbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyAoc2xpZGVTaXplIC8gMikgKyAocHJldlNsaWRlU2l6ZSAvIDIpICsgc3BhY2VCZXR3ZWVuO1xuICAgICAgICBpZiAocHJldlNsaWRlU2l6ZSA9PT0gMCAmJiBpICE9PSAwKSB7IHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gKHN3aXBlclNpemUgLyAyKSAtIHNwYWNlQmV0d2VlbjsgfVxuICAgICAgICBpZiAoaSA9PT0gMCkgeyBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiAtIChzd2lwZXJTaXplIC8gMikgLSBzcGFjZUJldHdlZW47IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHNsaWRlUG9zaXRpb24pIDwgMSAvIDEwMDApIHsgc2xpZGVQb3NpdGlvbiA9IDA7IH1cbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVQb3NpdGlvbiA9IE1hdGguZmxvb3Ioc2xpZGVQb3NpdGlvbik7IH1cbiAgICAgICAgaWYgKChpbmRleCkgJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHsgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3RocykgeyBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBpZiAoKGluZGV4KSAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgeyBzbmFwR3JpZC5wdXNoKHNsaWRlUG9zaXRpb24pOyB9XG4gICAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsU2l6ZSArPSBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG5cbiAgICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG5cbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGgubWF4KHN3aXBlci52aXJ0dWFsU2l6ZSwgc3dpcGVyU2l6ZSkgKyBvZmZzZXRBZnRlcjtcbiAgICB2YXIgbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChcbiAgICAgIHJ0bCAmJiB3cm9uZ1JUTCAmJiAocGFyYW1zLmVmZmVjdCA9PT0gJ3NsaWRlJyB8fCBwYXJhbXMuZWZmZWN0ID09PSAnY292ZXJmbG93JykpIHtcbiAgICAgICR3cmFwcGVyRWwuY3NzKHsgd2lkdGg6ICgoc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKyBcInB4XCIpIH0pO1xuICAgIH1cbiAgICBpZiAoIVN1cHBvcnQuZmxleGJveCB8fCBwYXJhbXMuc2V0V3JhcHBlclNpemUpIHtcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHsgJHdyYXBwZXJFbC5jc3MoeyB3aWR0aDogKChzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikgfSk7IH1cbiAgICAgIGVsc2UgeyAkd3JhcHBlckVsLmNzcyh7IGhlaWdodDogKChzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikgfSk7IH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IChzbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gICAgICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLmNlaWwoc3dpcGVyLnZpcnR1YWxTaXplIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgLSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkgeyAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgICAgZWxzZSB7ICR3cmFwcGVyRWwuY3NzKHsgaGVpZ2h0OiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNuYXBHcmlkLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgICB2YXIgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtpJDFdO1xuICAgICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlc0dyaWRJdGVtID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkSXRlbSk7IH1cbiAgICAgICAgICBpZiAoc25hcEdyaWRbaSQxXSA8IHN3aXBlci52aXJ0dWFsU2l6ZSArIHNuYXBHcmlkWzBdKSB7IG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7IH1cbiAgICAgICAgfVxuICAgICAgICBzbmFwR3JpZCA9IG5ld1NsaWRlc0dyaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGxhc3QgZ3JpZCBlbGVtZW50cyBkZXBlbmRpbmcgb24gd2lkdGhcbiAgICBpZiAoIXBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgbmV3U2xpZGVzR3JpZCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSQyID0gMDsgaSQyIDwgc25hcEdyaWQubGVuZ3RoOyBpJDIgKz0gMSkge1xuICAgICAgICB2YXIgc2xpZGVzR3JpZEl0ZW0kMSA9IHNuYXBHcmlkW2kkMl07XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlc0dyaWRJdGVtJDEgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtJDEpOyB9XG4gICAgICAgIGlmIChzbmFwR3JpZFtpJDJdIDw9IHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIHtcbiAgICAgICAgICBuZXdTbGlkZXNHcmlkLnB1c2goc2xpZGVzR3JpZEl0ZW0kMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICAgIGlmIChNYXRoLmZsb29yKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIC0gTWF0aC5mbG9vcihzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSkgPiAxKSB7XG4gICAgICAgIHNuYXBHcmlkLnB1c2goc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHsgc25hcEdyaWQgPSBbMF07IH1cblxuICAgIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIGlmIChydGwpIHsgc2xpZGVzLmNzcyh7IG1hcmdpbkxlZnQ6IChzcGFjZUJldHdlZW4gKyBcInB4XCIpIH0pOyB9XG4gICAgICAgIGVsc2UgeyBzbGlkZXMuY3NzKHsgbWFyZ2luUmlnaHQ6IChzcGFjZUJldHdlZW4gKyBcInB4XCIpIH0pOyB9XG4gICAgICB9IGVsc2UgeyBzbGlkZXMuY3NzKHsgbWFyZ2luQm90dG9tOiAoc3BhY2VCZXR3ZWVuICsgXCJweFwiKSB9KTsgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY2VudGVySW5zdWZmaWNpZW50U2xpZGVzKSB7XG4gICAgICB2YXIgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVTaXplVmFsdWUpIHtcbiAgICAgICAgYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgICAgfSk7XG4gICAgICBhbGxTbGlkZXNTaXplIC09IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gICAgICBpZiAoYWxsU2xpZGVzU2l6ZSA8IHN3aXBlclNpemUpIHtcbiAgICAgICAgdmFyIGFsbFNsaWRlc09mZnNldCA9IChzd2lwZXJTaXplIC0gYWxsU2xpZGVzU2l6ZSkgLyAyO1xuICAgICAgICBzbmFwR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgICBzbmFwR3JpZFtzbmFwSW5kZXhdID0gc25hcCAtIGFsbFNsaWRlc09mZnNldDtcbiAgICAgICAgfSk7XG4gICAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCwgc25hcEluZGV4KSB7XG4gICAgICAgICAgc2xpZGVzR3JpZFtzbmFwSW5kZXhdID0gc25hcCArIGFsbFNsaWRlc09mZnNldDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgc2xpZGVzOiBzbGlkZXMsXG4gICAgICBzbmFwR3JpZDogc25hcEdyaWQsXG4gICAgICBzbGlkZXNHcmlkOiBzbGlkZXNHcmlkLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBzbGlkZXNTaXplc0dyaWQsXG4gICAgfSk7XG5cbiAgICBpZiAoc2xpZGVzTGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0xlbmd0aCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlc0xlbmd0aENoYW5nZScpO1xuICAgIH1cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7IHN3aXBlci5jaGVja092ZXJmbG93KCk7IH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbmFwR3JpZExlbmd0aENoYW5nZScpO1xuICAgIH1cbiAgICBpZiAoc2xpZGVzR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlc0dyaWRMZW5ndGhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUF1dG9IZWlnaHQgKHNwZWVkKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICAgIHZhciBuZXdIZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuICAgIC8vIEZpbmQgc2xpZGVzIGN1cnJlbnRseSBpbiB2aWV3XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBNYXRoLmNlaWwoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3KTsgaSArPSAxKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCArIGk7XG4gICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoKSB7IGJyZWFrOyB9XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlU2xpZGVzLnB1c2goc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpWzBdKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIG5ldyBoZWlnaHQgZnJvbSBoaWdoZXN0IHNsaWRlIGluIHZpZXdcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGFjdGl2ZVNsaWRlc1tpXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgSGVpZ2h0XG4gICAgaWYgKG5ld0hlaWdodCkgeyBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ2hlaWdodCcsIChuZXdIZWlnaHQgKyBcInB4XCIpKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0ICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlT2Zmc2V0ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc1Byb2dyZXNzICh0cmFuc2xhdGUpIHtcbiAgICBpZiAoIHRyYW5zbGF0ZSA9PT0gdm9pZCAwICkgdHJhbnNsYXRlID0gKHRoaXMgJiYgdGhpcy50cmFuc2xhdGUpIHx8IDA7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcblxuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuXG4gICAgaWYgKHNsaWRlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgaWYgKHR5cGVvZiBzbGlkZXNbMF0uc3dpcGVyU2xpZGVPZmZzZXQgPT09ICd1bmRlZmluZWQnKSB7IHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTsgfVxuXG4gICAgdmFyIG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gICAgaWYgKHJ0bCkgeyBvZmZzZXRDZW50ZXIgPSB0cmFuc2xhdGU7IH1cblxuICAgIC8vIFZpc2libGUgU2xpZGVzXG4gICAgc2xpZGVzLnJlbW92ZUNsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG5cbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBzbGlkZSA9IHNsaWRlc1tpXTtcbiAgICAgIHZhciBzbGlkZVByb2dyZXNzID0gKFxuICAgICAgICAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApKSAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0XG4gICAgICApIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuICAgICAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgICAgdmFyIHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldCk7XG4gICAgICAgIHZhciBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgaXNWaXNpYmxlID0gKHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEpXG4gICAgICAgICAgICAgICAgICB8fCAoc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSlcbiAgICAgICAgICAgICAgICAgIHx8IChzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemUpO1xuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNsaWRlLnByb2dyZXNzID0gcnRsID8gLXNsaWRlUHJvZ3Jlc3MgOiBzbGlkZVByb2dyZXNzO1xuICAgIH1cbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9ICQoc3dpcGVyLnZpc2libGVTbGlkZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MgKHRyYW5zbGF0ZSkge1xuICAgIGlmICggdHJhbnNsYXRlID09PSB2b2lkIDAgKSB0cmFuc2xhdGUgPSAodGhpcyAmJiB0aGlzLnRyYW5zbGF0ZSkgfHwgMDtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuXG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIHZhciBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICB2YXIgaXNCZWdpbm5pbmcgPSBzd2lwZXIuaXNCZWdpbm5pbmc7XG4gICAgdmFyIGlzRW5kID0gc3dpcGVyLmlzRW5kO1xuICAgIHZhciB3YXNCZWdpbm5pbmcgPSBpc0JlZ2lubmluZztcbiAgICB2YXIgd2FzRW5kID0gaXNFbmQ7XG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICBpc0JlZ2lubmluZyA9IHRydWU7XG4gICAgICBpc0VuZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyAodHJhbnNsYXRlc0RpZmYpO1xuICAgICAgaXNCZWdpbm5pbmcgPSBwcm9ncmVzcyA8PSAwO1xuICAgICAgaXNFbmQgPSBwcm9ncmVzcyA+PSAxO1xuICAgIH1cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICBpc0JlZ2lubmluZzogaXNCZWdpbm5pbmcsXG4gICAgICBpc0VuZDogaXNFbmQsXG4gICAgfSk7XG5cbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkgeyBzd2lwZXIudXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKTsgfVxuXG4gICAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgICB9XG4gICAgaWYgKGlzRW5kICYmICF3YXNFbmQpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEVuZCB0b0VkZ2UnKTtcbiAgICB9XG4gICAgaWYgKCh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nKSB8fCAod2FzRW5kICYmICFpc0VuZCkpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG5cbiAgICBzbGlkZXMucmVtb3ZlQ2xhc3MoKChwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpICsgXCIgXCIgKyAocGFyYW1zLnNsaWRlUHJldkNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpKSk7XG5cbiAgICB2YXIgYWN0aXZlU2xpZGU7XG4gICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBhY3RpdmVJbmRleCArIFwiXFxcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IHNsaWRlcy5lcShhY3RpdmVJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIGNsYXNzZXNcbiAgICBhY3RpdmVTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKGFjdGl2ZVNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIjpub3QoLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiKVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5leHQgU2xpZGVcbiAgICB2YXIgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbCgoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgICBpZiAocGFyYW1zLmxvb3AgJiYgbmV4dFNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbmV4dFNsaWRlID0gc2xpZGVzLmVxKDApO1xuICAgICAgbmV4dFNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gICAgfVxuICAgIC8vIFByZXYgU2xpZGVcbiAgICB2YXIgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbCgoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICBpZiAocGFyYW1zLmxvb3AgJiYgcHJldlNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJldlNsaWRlID0gc2xpZGVzLmVxKC0xKTtcbiAgICAgIHByZXZTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKG5leHRTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCI6bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAobmV4dFNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykpICsgXCJcXFwiXVwiKSlcbiAgICAgICAgICAuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlTmV4dENsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2U2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiOm5vdCguXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChwcmV2U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIuXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHByZXZTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZlSW5kZXggKG5ld0FjdGl2ZUluZGV4KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gICAgdmFyIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZDtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHByZXZpb3VzSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHByZXZpb3VzUmVhbEluZGV4ID0gc3dpcGVyLnJlYWxJbmRleDtcbiAgICB2YXIgcHJldmlvdXNTbmFwSW5kZXggPSBzd2lwZXIuc25hcEluZGV4O1xuICAgIHZhciBhY3RpdmVJbmRleCA9IG5ld0FjdGl2ZUluZGV4O1xuICAgIHZhciBzbmFwSW5kZXg7XG4gICAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtICgoc2xpZGVzR3JpZFtpICsgMV0gLSBzbGlkZXNHcmlkW2ldKSAvIDIpKSB7XG4gICAgICAgICAgICBhY3RpdmVJbmRleCA9IGk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gICAgICBpZiAocGFyYW1zLm5vcm1hbGl6ZVNsaWRlSW5kZXgpIHtcbiAgICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMCB8fCB0eXBlb2YgYWN0aXZlSW5kZXggPT09ICd1bmRlZmluZWQnKSB7IGFjdGl2ZUluZGV4ID0gMDsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICAgIHNuYXBJbmRleCA9IHNuYXBHcmlkLmluZGV4T2YodHJhbnNsYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hcEluZGV4ID0gTWF0aC5mbG9vcihhY3RpdmVJbmRleCAvIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgfVxuICAgIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSB7IHNuYXBJbmRleCA9IHNuYXBHcmlkLmxlbmd0aCAtIDE7IH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChzbmFwSW5kZXggIT09IHByZXZpb3VzU25hcEluZGV4KSB7XG4gICAgICAgIHN3aXBlci5zbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICAgIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgcmVhbCBpbmRleFxuICAgIHZhciByZWFsSW5kZXggPSBwYXJzZUludChzd2lwZXIuc2xpZGVzLmVxKGFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpIHx8IGFjdGl2ZUluZGV4LCAxMCk7XG5cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBzbmFwSW5kZXg6IHNuYXBJbmRleCxcbiAgICAgIHJlYWxJbmRleDogcmVhbEluZGV4LFxuICAgICAgcHJldmlvdXNJbmRleDogcHJldmlvdXNJbmRleCxcbiAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCxcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnYWN0aXZlSW5kZXhDaGFuZ2UnKTtcbiAgICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG4gICAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFsSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCB8fCBzd2lwZXIucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDbGlja2VkU2xpZGUgKGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgc2xpZGUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKVswXTtcbiAgICB2YXIgc2xpZGVGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChzbGlkZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkgeyBzbGlkZUZvdW5kID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbGlkZSAmJiBzbGlkZUZvdW5kKSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gc2xpZGU7XG4gICAgICBpZiAoc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHBhcnNlSW50KCQoc2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSAkKHNsaWRlKS5pbmRleCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gdW5kZWZpbmVkO1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zbGlkZVRvQ2xpY2tlZFNsaWRlICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICB1cGRhdGVTaXplOiB1cGRhdGVTaXplLFxuICAgIHVwZGF0ZVNsaWRlczogdXBkYXRlU2xpZGVzLFxuICAgIHVwZGF0ZUF1dG9IZWlnaHQ6IHVwZGF0ZUF1dG9IZWlnaHQsXG4gICAgdXBkYXRlU2xpZGVzT2Zmc2V0OiB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gICAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3M6IHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICAgIHVwZGF0ZVByb2dyZXNzOiB1cGRhdGVQcm9ncmVzcyxcbiAgICB1cGRhdGVTbGlkZXNDbGFzc2VzOiB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICAgIHVwZGF0ZUFjdGl2ZUluZGV4OiB1cGRhdGVBY3RpdmVJbmRleCxcbiAgICB1cGRhdGVDbGlja2VkU2xpZGU6IHVwZGF0ZUNsaWNrZWRTbGlkZSxcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRUcmFuc2xhdGUgKGF4aXMpIHtcbiAgICBpZiAoIGF4aXMgPT09IHZvaWQgMCApIGF4aXMgPSB0aGlzLmlzSG9yaXpvbnRhbCgpID8gJ3gnIDogJ3knO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuXG4gICAgaWYgKHBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgICByZXR1cm4gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudFRyYW5zbGF0ZSA9IFV0aWxzLmdldFRyYW5zbGF0ZSgkd3JhcHBlckVsWzBdLCBheGlzKTtcbiAgICBpZiAocnRsKSB7IGN1cnJlbnRUcmFuc2xhdGUgPSAtY3VycmVudFRyYW5zbGF0ZTsgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRUcmFuc2xhdGUgfHwgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSAodHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICB2YXIgeCA9IDA7XG4gICAgdmFyIHkgPSAwO1xuICAgIHZhciB6ID0gMDtcblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHggPSBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB5ID0gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICAgIHkgPSBNYXRoLmZsb29yKHkpO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICAgIGlmIChTdXBwb3J0LnRyYW5zZm9ybXMzZCkgeyAkd3JhcHBlckVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCBcIiArIHogKyBcInB4KVwiKSk7IH1cbiAgICAgIGVsc2UgeyAkd3JhcHBlckVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIikpOyB9XG4gICAgfVxuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHggOiB5O1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcbiAgICB2YXIgbmV3UHJvZ3Jlc3M7XG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgICB9XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiBtaW5UcmFuc2xhdGUgKCkge1xuICAgIHJldHVybiAoLXRoaXMuc25hcEdyaWRbMF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4VHJhbnNsYXRlICgpIHtcbiAgICByZXR1cm4gKC10aGlzLnNuYXBHcmlkW3RoaXMuc25hcEdyaWQubGVuZ3RoIC0gMV0pO1xuICB9XG5cbiAgdmFyIHRyYW5zbGF0ZSA9IHtcbiAgICBnZXRUcmFuc2xhdGU6IGdldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2xhdGU6IHNldFRyYW5zbGF0ZSxcbiAgICBtaW5UcmFuc2xhdGU6IG1pblRyYW5zbGF0ZSxcbiAgICBtYXhUcmFuc2xhdGU6IG1heFRyYW5zbGF0ZSxcbiAgfTtcblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uIChkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcblxuICAgIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQgKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKSB7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleDtcbiAgICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgdmFyIGRpciA9IGRpcmVjdGlvbjtcbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgeyBkaXIgPSAnbmV4dCc7IH1cbiAgICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgeyBkaXIgPSAncHJldic7IH1cbiAgICAgIGVsc2UgeyBkaXIgPSAncmVzZXQnOyB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVQcmV2VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCQxIChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuXG4gICAgdmFyIGRpciA9IGRpcmVjdGlvbjtcbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgeyBkaXIgPSAnbmV4dCc7IH1cbiAgICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgeyBkaXIgPSAncHJldic7IH1cbiAgICAgIGVsc2UgeyBkaXIgPSAncmVzZXQnOyB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcblxuICAgIGlmIChydW5DYWxsYmFja3MgJiYgYWN0aXZlSW5kZXggIT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUmVzZXRUcmFuc2l0aW9uRW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZVRyYW5zaXRpb25FbmQnKTtcbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25FbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbiQxID0ge1xuICAgIHNldFRyYW5zaXRpb246IHNldFRyYW5zaXRpb24sXG4gICAgdHJhbnNpdGlvblN0YXJ0OiB0cmFuc2l0aW9uU3RhcnQsXG4gICAgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCQxLFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNsaWRlVG8gKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gMDtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNsaWRlSW5kZXggPSBpbmRleDtcbiAgICBpZiAoc2xpZGVJbmRleCA8IDApIHsgc2xpZGVJbmRleCA9IDA7IH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkO1xuICAgIHZhciBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgc25hcEluZGV4ID0gTWF0aC5mbG9vcihzbGlkZUluZGV4IC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgeyBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxOyB9XG5cbiAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IHBhcmFtcy5pbml0aWFsU2xpZGUgfHwgMCkgPT09IChwcmV2aW91c0luZGV4IHx8IDApICYmIHJ1bkNhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07XG5cbiAgICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKTtcblxuICAgIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKC1NYXRoLmZsb29yKHRyYW5zbGF0ZSAqIDEwMCkgPj0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2ldICogMTAwKSkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IDApICE9PSBzbGlkZUluZGV4KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaXJlY3Rpb247XG4gICAgaWYgKHNsaWRlSW5kZXggPiBhY3RpdmVJbmRleCkgeyBkaXJlY3Rpb24gPSAnbmV4dCc7IH1cbiAgICBlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIHsgZGlyZWN0aW9uID0gJ3ByZXYnOyB9XG4gICAgZWxzZSB7IGRpcmVjdGlvbiA9ICdyZXNldCc7IH1cblxuXG4gICAgLy8gVXBkYXRlIEluZGV4XG4gICAgaWYgKChydGwgJiYgLXRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSkgfHwgKCFydGwgJiYgdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgICAgLy8gVXBkYXRlIEhlaWdodFxuICAgICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhU3VwcG9ydC50cmFuc2l0aW9uKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVRvTG9vcCAoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSAwO1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgbmV3SW5kZXggPSBpbmRleDtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBuZXdJbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlTmV4dCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGFuaW1hdGluZyA9IHN3aXBlci5hbmltYXRpbmc7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBpZiAoYW5pbWF0aW5nKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXAsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCArIHBhcmFtcy5zbGlkZXNQZXJHcm91cCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlUHJldiAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGFuaW1hdGluZyA9IHN3aXBlci5hbmltYXRpbmc7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgdmFyIHJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChhbmltYXRpbmcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgIH1cbiAgICB2YXIgdHJhbnNsYXRlID0gcnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICAgIGlmICh2YWwgPCAwKSB7IHJldHVybiAtTWF0aC5mbG9vcihNYXRoLmFicyh2YWwpKTsgfVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsKTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSBub3JtYWxpemUodHJhbnNsYXRlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNuYXBHcmlkID0gc25hcEdyaWQubWFwKGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICB2YXIgbm9ybWFsaXplZFNsaWRlc0dyaWQgPSBzbGlkZXNHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiBub3JtYWxpemUodmFsKTsgfSk7XG5cbiAgICB2YXIgY3VycmVudFNuYXAgPSBzbmFwR3JpZFtub3JtYWxpemVkU25hcEdyaWQuaW5kZXhPZihub3JtYWxpemVkVHJhbnNsYXRlKV07XG4gICAgdmFyIHByZXZTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSkgLSAxXTtcbiAgICB2YXIgcHJldkluZGV4O1xuICAgIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcmV2SW5kZXggPSBzbGlkZXNHcmlkLmluZGV4T2YocHJldlNuYXApO1xuICAgICAgaWYgKHByZXZJbmRleCA8IDApIHsgcHJldkluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IC0gMTsgfVxuICAgIH1cbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8ocHJldkluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbiAgZnVuY3Rpb24gc2xpZGVSZXNldCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlVG9DbG9zZXN0IChzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHNuYXBJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgIGlmIChzbmFwSW5kZXggPCBzd2lwZXIuc25hcEdyaWQubGVuZ3RoIC0gMSkge1xuICAgICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG5cbiAgICAgIHZhciBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuICAgICAgdmFyIG5leHRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCArIDFdO1xuXG4gICAgICBpZiAoKHRyYW5zbGF0ZSAtIGN1cnJlbnRTbmFwKSA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAvIDIpIHtcbiAgICAgICAgaW5kZXggPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcblxuICAgIHZhciBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgdmFyIHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleDtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7IHJldHVybjsgfVxuICAgICAgcmVhbEluZGV4ID0gcGFyc2VJbnQoJChzd2lwZXIuY2xpY2tlZFNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2xpZGVUb0luZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcyAtIChzbGlkZXNQZXJWaWV3IC8gMikpXG4gICAgICAgICAgfHwgKHNsaWRlVG9JbmRleCA+IChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpICsgKHNsaWRlc1BlclZpZXcgLyAyKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsXG4gICAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilcIikpXG4gICAgICAgICAgICAuZXEoMClcbiAgICAgICAgICAgIC5pbmRleCgpO1xuXG4gICAgICAgICAgVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc2xpZGVzUGVyVmlldykge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpXCIpKVxuICAgICAgICAgIC5lcSgwKVxuICAgICAgICAgIC5pbmRleCgpO1xuXG4gICAgICAgIFV0aWxzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWRlID0ge1xuICAgIHNsaWRlVG86IHNsaWRlVG8sXG4gICAgc2xpZGVUb0xvb3A6IHNsaWRlVG9Mb29wLFxuICAgIHNsaWRlTmV4dDogc2xpZGVOZXh0LFxuICAgIHNsaWRlUHJldjogc2xpZGVQcmV2LFxuICAgIHNsaWRlUmVzZXQ6IHNsaWRlUmVzZXQsXG4gICAgc2xpZGVUb0Nsb3Nlc3Q6IHNsaWRlVG9DbG9zZXN0LFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IHNsaWRlVG9DbGlja2VkU2xpZGUsXG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcENyZWF0ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAvLyBSZW1vdmUgZHVwbGljYXRlZCBzbGlkZXNcbiAgICAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpKS5yZW1vdmUoKTtcblxuICAgIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKTtcblxuICAgIGlmIChwYXJhbXMubG9vcEZpbGxHcm91cFdpdGhCbGFuaykge1xuICAgICAgdmFyIGJsYW5rU2xpZGVzTnVtID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwIC0gKHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgaWYgKGJsYW5rU2xpZGVzTnVtICE9PSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibGFua1NsaWRlc051bTsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGJsYW5rTm9kZSA9ICQoZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcygoKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpKSk7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiAhcGFyYW1zLmxvb3BlZFNsaWRlcykgeyBwYXJhbXMubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDsgfVxuXG4gICAgc3dpcGVyLmxvb3BlZFNsaWRlcyA9IHBhcnNlSW50KHBhcmFtcy5sb29wZWRTbGlkZXMgfHwgcGFyYW1zLnNsaWRlc1BlclZpZXcsIDEwKTtcbiAgICBzd2lwZXIubG9vcGVkU2xpZGVzICs9IHBhcmFtcy5sb29wQWRkaXRpb25hbFNsaWRlcztcbiAgICBpZiAoc3dpcGVyLmxvb3BlZFNsaWRlcyA+IHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBwcmVwZW5kU2xpZGVzID0gW107XG4gICAgdmFyIGFwcGVuZFNsaWRlcyA9IFtdO1xuICAgIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgIHZhciBzbGlkZSA9ICQoZWwpO1xuICAgICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykgeyBhcHBlbmRTbGlkZXMucHVzaChlbCk7IH1cbiAgICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHsgcHJlcGVuZFNsaWRlcy5wdXNoKGVsKTsgfVxuICAgICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW2kkMV0uY2xvbmVOb2RlKHRydWUpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpJDIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IGkkMiA+PSAwOyBpJDIgLT0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tpJDJdLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wRml4ICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgdmFyIGFsbG93U2xpZGVQcmV2ID0gc3dpcGVyLmFsbG93U2xpZGVQcmV2O1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIG5ld0luZGV4O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gdHJ1ZTtcblxuICAgIHZhciBzbmFwVHJhbnNsYXRlID0gLXNuYXBHcmlkW2FjdGl2ZUluZGV4XTtcbiAgICB2YXIgZGlmZiA9IHNuYXBUcmFuc2xhdGUgLSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG5cblxuICAgIC8vIEZpeCBGb3IgTmVnYXRpdmUgT3ZlcnNsaWRpbmdcbiAgICBpZiAoYWN0aXZlSW5kZXggPCBsb29wZWRTbGlkZXMpIHtcbiAgICAgIG5ld0luZGV4ID0gKHNsaWRlcy5sZW5ndGggLSAobG9vcGVkU2xpZGVzICogMykpICsgYWN0aXZlSW5kZXg7XG4gICAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgICB2YXIgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBhY3RpdmVJbmRleCA+PSBsb29wZWRTbGlkZXMgKiAyKSB8fCAoYWN0aXZlSW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIGxvb3BlZFNsaWRlcykpIHtcbiAgICAgIC8vIEZpeCBGb3IgUG9zaXRpdmUgT3ZlcnNsaWRpbmdcbiAgICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICAgIHZhciBzbGlkZUNoYW5nZWQkMSA9IHN3aXBlci5zbGlkZVRvKG5ld0luZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICBpZiAoc2xpZGVDaGFuZ2VkJDEgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IGFsbG93U2xpZGVQcmV2O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcERlc3Ryb3kgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIuXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIsLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpKSkucmVtb3ZlKCk7XG4gICAgc2xpZGVzLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gIH1cblxuICB2YXIgbG9vcCA9IHtcbiAgICBsb29wQ3JlYXRlOiBsb29wQ3JlYXRlLFxuICAgIGxvb3BGaXg6IGxvb3BGaXgsXG4gICAgbG9vcERlc3Ryb3k6IGxvb3BEZXN0cm95LFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IgKG1vdmluZykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQpKSB7IHJldHVybjsgfVxuICAgIHZhciBlbCA9IHN3aXBlci5lbDtcbiAgICBlbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy13ZWJraXQtZ3JhYmJpbmcnIDogJy13ZWJraXQtZ3JhYic7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy1tb3otZ3JhYmJpbicgOiAnLW1vei1ncmFiJztcbiAgICBlbC5zdHlsZS5jdXJzb3IgPSBtb3ZpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5zZXRHcmFiQ3Vyc29yICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoU3VwcG9ydC50b3VjaCB8fCAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCkpIHsgcmV0dXJuOyB9XG4gICAgc3dpcGVyLmVsLnN0eWxlLmN1cnNvciA9ICcnO1xuICB9XG5cbiAgdmFyIGdyYWJDdXJzb3IgPSB7XG4gICAgc2V0R3JhYkN1cnNvcjogc2V0R3JhYkN1cnNvcixcbiAgICB1bnNldEdyYWJDdXJzb3I6IHVuc2V0R3JhYkN1cnNvcixcbiAgfTtcblxuICBmdW5jdGlvbiBhcHBlbmRTbGlkZSAoc2xpZGVzKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSB7ICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc1tpXSk7IH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwZW5kU2xpZGUgKHNsaWRlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG4gICAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyAxO1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHsgJHdyYXBwZXJFbC5wcmVwZW5kKHNsaWRlc1tpXSk7IH1cbiAgICAgIH1cbiAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLnByZXBlbmQoc2xpZGVzKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFNsaWRlIChpbmRleCwgc2xpZGVzKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIGFjdGl2ZUluZGV4QnVmZmVyID0gYWN0aXZlSW5kZXg7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSk7XG4gICAgfVxuICAgIHZhciBiYXNlTGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgIHN3aXBlci5wcmVwZW5kU2xpZGUoc2xpZGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IGJhc2VMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5hcHBlbmRTbGlkZShzbGlkZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyAxIDogYWN0aXZlSW5kZXhCdWZmZXI7XG5cbiAgICB2YXIgc2xpZGVzQnVmZmVyID0gW107XG4gICAgZm9yICh2YXIgaSA9IGJhc2VMZW5ndGggLSAxOyBpID49IGluZGV4OyBpIC09IDEpIHtcbiAgICAgIHZhciBjdXJyZW50U2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgY3VycmVudFNsaWRlLnJlbW92ZSgpO1xuICAgICAgc2xpZGVzQnVmZmVyLnVuc2hpZnQoY3VycmVudFNsaWRlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzbGlkZXMubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2kkMV0pIHsgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzW2kkMV0pOyB9XG4gICAgICB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIHNsaWRlcy5sZW5ndGggOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBzbGlkZXNCdWZmZXIubGVuZ3RoOyBpJDIgKz0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzQnVmZmVyW2kkMl0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU2xpZGUgKHNsaWRlc0luZGV4ZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcblxuICAgIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgYWN0aXZlSW5kZXhCdWZmZXIgLT0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuICAgIH1cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgaW5kZXhUb1JlbW92ZTtcblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzSW5kZXhlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzW2ldO1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgeyBzd2lwZXIuc2xpZGVzLmVxKGluZGV4VG9SZW1vdmUpLnJlbW92ZSgpOyB9XG4gICAgICAgIGlmIChpbmRleFRvUmVtb3ZlIDwgbmV3QWN0aXZlSW5kZXgpIHsgbmV3QWN0aXZlSW5kZXggLT0gMTsgfVxuICAgICAgfVxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzO1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0pIHsgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTsgfVxuICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgeyBuZXdBY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBzbGlkZXNJbmRleGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgfVxuICAgIHN3aXBlci5yZW1vdmVTbGlkZShzbGlkZXNJbmRleGVzKTtcbiAgfVxuXG4gIHZhciBtYW5pcHVsYXRpb24gPSB7XG4gICAgYXBwZW5kU2xpZGU6IGFwcGVuZFNsaWRlLFxuICAgIHByZXBlbmRTbGlkZTogcHJlcGVuZFNsaWRlLFxuICAgIGFkZFNsaWRlOiBhZGRTbGlkZSxcbiAgICByZW1vdmVTbGlkZTogcmVtb3ZlU2xpZGUsXG4gICAgcmVtb3ZlQWxsU2xpZGVzOiByZW1vdmVBbGxTbGlkZXMsXG4gIH07XG5cbiAgdmFyIERldmljZSA9IChmdW5jdGlvbiBEZXZpY2UoKSB7XG4gICAgdmFyIHVhID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICB2YXIgZGV2aWNlID0ge1xuICAgICAgaW9zOiBmYWxzZSxcbiAgICAgIGFuZHJvaWQ6IGZhbHNlLFxuICAgICAgYW5kcm9pZENocm9tZTogZmFsc2UsXG4gICAgICBkZXNrdG9wOiBmYWxzZSxcbiAgICAgIHdpbmRvd3M6IGZhbHNlLFxuICAgICAgaXBob25lOiBmYWxzZSxcbiAgICAgIGlwb2Q6IGZhbHNlLFxuICAgICAgaXBhZDogZmFsc2UsXG4gICAgICBjb3Jkb3ZhOiB3aW4uY29yZG92YSB8fCB3aW4ucGhvbmVnYXAsXG4gICAgICBwaG9uZWdhcDogd2luLmNvcmRvdmEgfHwgd2luLnBob25lZ2FwLFxuICAgIH07XG5cbiAgICB2YXIgd2luZG93cyA9IHVhLm1hdGNoKC8oV2luZG93cyBQaG9uZSk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBhbmRyb2lkID0gdWEubWF0Y2goLyhBbmRyb2lkKTs/W1xcc1xcL10rKFtcXGQuXSspPy8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICAgIHZhciBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG5cblxuICAgIC8vIFdpbmRvd3NcbiAgICBpZiAod2luZG93cykge1xuICAgICAgZGV2aWNlLm9zID0gJ3dpbmRvd3MnO1xuICAgICAgZGV2aWNlLm9zVmVyc2lvbiA9IHdpbmRvd3NbMl07XG4gICAgICBkZXZpY2Uud2luZG93cyA9IHRydWU7XG4gICAgfVxuICAgIC8vIEFuZHJvaWRcbiAgICBpZiAoYW5kcm9pZCAmJiAhd2luZG93cykge1xuICAgICAgZGV2aWNlLm9zID0gJ2FuZHJvaWQnO1xuICAgICAgZGV2aWNlLm9zVmVyc2lvbiA9IGFuZHJvaWRbMl07XG4gICAgICBkZXZpY2UuYW5kcm9pZCA9IHRydWU7XG4gICAgICBkZXZpY2UuYW5kcm9pZENocm9tZSA9IHVhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPj0gMDtcbiAgICB9XG4gICAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICAgIGRldmljZS5vcyA9ICdpb3MnO1xuICAgICAgZGV2aWNlLmlvcyA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlPU1xuICAgIGlmIChpcGhvbmUgJiYgIWlwb2QpIHtcbiAgICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcGhvbmVbMl0ucmVwbGFjZSgvXy9nLCAnLicpO1xuICAgICAgZGV2aWNlLmlwaG9uZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpcGFkKSB7XG4gICAgICBkZXZpY2Uub3NWZXJzaW9uID0gaXBhZFsyXS5yZXBsYWNlKC9fL2csICcuJyk7XG4gICAgICBkZXZpY2UuaXBhZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpcG9kKSB7XG4gICAgICBkZXZpY2Uub3NWZXJzaW9uID0gaXBvZFszXSA/IGlwb2RbM10ucmVwbGFjZSgvXy9nLCAnLicpIDogbnVsbDtcbiAgICAgIGRldmljZS5pcGhvbmUgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpT1MgOCsgY2hhbmdlZCBVQVxuICAgIGlmIChkZXZpY2UuaW9zICYmIGRldmljZS5vc1ZlcnNpb24gJiYgdWEuaW5kZXhPZignVmVyc2lvbi8nKSA+PSAwKSB7XG4gICAgICBpZiAoZGV2aWNlLm9zVmVyc2lvbi5zcGxpdCgnLicpWzBdID09PSAnMTAnKSB7XG4gICAgICAgIGRldmljZS5vc1ZlcnNpb24gPSB1YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCd2ZXJzaW9uLycpWzFdLnNwbGl0KCcgJylbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVza3RvcFxuICAgIGRldmljZS5kZXNrdG9wID0gIShkZXZpY2Uub3MgfHwgZGV2aWNlLmFuZHJvaWQgfHwgZGV2aWNlLndlYlZpZXcpO1xuXG4gICAgLy8gV2Vidmlld1xuICAgIGRldmljZS53ZWJWaWV3ID0gKGlwaG9uZSB8fCBpcGFkIHx8IGlwb2QpICYmIHVhLm1hdGNoKC8uKkFwcGxlV2ViS2l0KD8hLipTYWZhcmkpL2kpO1xuXG4gICAgLy8gTWluaW1hbCBVSVxuICAgIGlmIChkZXZpY2Uub3MgJiYgZGV2aWNlLm9zID09PSAnaW9zJykge1xuICAgICAgdmFyIG9zVmVyc2lvbkFyciA9IGRldmljZS5vc1ZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgIHZhciBtZXRhVmlld3BvcnQgPSBkb2MucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidmlld3BvcnRcIl0nKTtcbiAgICAgIGRldmljZS5taW5pbWFsVWkgPSAhZGV2aWNlLndlYlZpZXdcbiAgICAgICAgJiYgKGlwb2QgfHwgaXBob25lKVxuICAgICAgICAmJiAob3NWZXJzaW9uQXJyWzBdICogMSA9PT0gNyA/IG9zVmVyc2lvbkFyclsxXSAqIDEgPj0gMSA6IG9zVmVyc2lvbkFyclswXSAqIDEgPiA3KVxuICAgICAgICAmJiBtZXRhVmlld3BvcnQgJiYgbWV0YVZpZXdwb3J0LmdldEF0dHJpYnV0ZSgnY29udGVudCcpLmluZGV4T2YoJ21pbmltYWwtdWknKSA+PSAwO1xuICAgIH1cblxuICAgIC8vIFBpeGVsIFJhdGlvXG4gICAgZGV2aWNlLnBpeGVsUmF0aW8gPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgLy8gRXhwb3J0IG9iamVjdFxuICAgIHJldHVybiBkZXZpY2U7XG4gIH0oKSk7XG5cbiAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0IChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7IGUgPSBlLm9yaWdpbmFsRXZlbnQ7IH1cbiAgICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICAgIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uID4gMCkgeyByZXR1cm47IH1cbiAgICBpZiAoZGF0YS5pc1RvdWNoZWQgJiYgZGF0YS5pc01vdmVkKSB7IHJldHVybjsgfVxuICAgIGlmIChwYXJhbXMubm9Td2lwaW5nICYmICQoZS50YXJnZXQpLmNsb3Nlc3QocGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yID8gcGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yIDogKFwiLlwiICsgKHBhcmFtcy5ub1N3aXBpbmdDbGFzcykpKVswXSkge1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnN3aXBlSGFuZGxlcikge1xuICAgICAgaWYgKCEkKGUpLmNsb3Nlc3QocGFyYW1zLnN3aXBlSGFuZGxlcilbMF0pIHsgcmV0dXJuOyB9XG4gICAgfVxuXG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIHZhciBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuXG4gICAgLy8gRG8gTk9UIHN0YXJ0IGlmIGlPUyBlZGdlIHN3aXBlIGlzIGRldGVjdGVkLiBPdGhlcndpc2UgaU9TIGFwcCAoVUlXZWJWaWV3KSBjYW5ub3Qgc3dpcGUtdG8tZ28tYmFjayBhbnltb3JlXG5cbiAgICB2YXIgZWRnZVN3aXBlRGV0ZWN0aW9uID0gcGFyYW1zLmVkZ2VTd2lwZURldGVjdGlvbiB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlRGV0ZWN0aW9uO1xuICAgIHZhciBlZGdlU3dpcGVUaHJlc2hvbGQgPSBwYXJhbXMuZWRnZVN3aXBlVGhyZXNob2xkIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVUaHJlc2hvbGQ7XG4gICAgaWYgKFxuICAgICAgZWRnZVN3aXBlRGV0ZWN0aW9uXG4gICAgICAmJiAoKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQpXG4gICAgICB8fCAoc3RhcnRYID49IHdpbi5zY3JlZW4ud2lkdGggLSBlZGdlU3dpcGVUaHJlc2hvbGQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWxzLmV4dGVuZChkYXRhLCB7XG4gICAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgICBpc01vdmVkOiBmYWxzZSxcbiAgICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHRydWUsXG4gICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gc3RhcnRZO1xuICAgIGRhdGEudG91Y2hTdGFydFRpbWUgPSBVdGlscy5ub3coKTtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSB7IGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7IH1cbiAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoJChlLnRhcmdldCkuaXMoZGF0YS5mb3JtRWxlbWVudHMpKSB7IHByZXZlbnREZWZhdWx0ID0gZmFsc2U7IH1cbiAgICAgIGlmIChcbiAgICAgICAgZG9jLmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgJiYgJChkb2MuYWN0aXZlRWxlbWVudCkuaXMoZGF0YS5mb3JtRWxlbWVudHMpXG4gICAgICAgICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBlLnRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIGRvYy5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQgJiYgc3dpcGVyLmFsbG93VG91Y2hNb3ZlICYmIHBhcmFtcy50b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ7XG4gICAgICBpZiAocGFyYW1zLnRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0IHx8IHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoU3RhcnQnLCBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlIChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIHZhciBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9XG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgICAgaWYgKGRhdGEuc3RhcnRNb3ZpbmcgJiYgZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHsgcmV0dXJuOyB9XG4gICAgdmFyIHBhZ2VYID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gICAgdmFyIHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgaWYgKGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIpIHtcbiAgICAgIHRvdWNoZXMuc3RhcnRYID0gcGFnZVg7XG4gICAgICB0b3VjaGVzLnN0YXJ0WSA9IHBhZ2VZO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgICAgLy8gaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKGRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICAgIFV0aWxzLmV4dGVuZCh0b3VjaGVzLCB7XG4gICAgICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgICAgICBzdGFydFk6IHBhZ2VZLFxuICAgICAgICAgIGN1cnJlbnRYOiBwYWdlWCxcbiAgICAgICAgICBjdXJyZW50WTogcGFnZVksXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gVXRpbHMubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBwYXJhbXMudG91Y2hSZWxlYXNlT25FZGdlcyAmJiAhcGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICAgIC8vIFZlcnRpY2FsXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFnZVkgPCB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSlcbiAgICAgICAgICB8fCAocGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChwYWdlWCA8IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKVxuICAgICAgICB8fCAocGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBkb2MuYWN0aXZlRWxlbWVudCkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2MuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvcm1FbGVtZW50cykpIHtcbiAgICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlJywgZSk7XG4gICAgfVxuICAgIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHsgcmV0dXJuOyB9XG5cbiAgICB0b3VjaGVzLmN1cnJlbnRYID0gcGFnZVg7XG4gICAgdG91Y2hlcy5jdXJyZW50WSA9IHBhZ2VZO1xuXG4gICAgdmFyIGRpZmZYID0gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYO1xuICAgIHZhciBkaWZmWSA9IHRvdWNoZXMuY3VycmVudFkgLSB0b3VjaGVzLnN0YXJ0WTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQgJiYgTWF0aC5zcXJ0KChNYXRoLnBvdyggZGlmZlgsIDIgKSkgKyAoTWF0aC5wb3coIGRpZmZZLCAyICkpKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLmlzU2Nyb2xsaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIHRvdWNoQW5nbGU7XG4gICAgICBpZiAoKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgdG91Y2hlcy5jdXJyZW50WCA9PT0gdG91Y2hlcy5zdGFydFgpKSB7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAoKGRpZmZYICogZGlmZlgpICsgKGRpZmZZICogZGlmZlkpID49IDI1KSB7XG4gICAgICAgICAgdG91Y2hBbmdsZSA9IChNYXRoLmF0YW4yKE1hdGguYWJzKGRpZmZZKSwgTWF0aC5hYnMoZGlmZlgpKSAqIDE4MCkgLyBNYXRoLlBJO1xuICAgICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiAoOTAgLSB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLnN0YXJ0TW92aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRvdWNoZXMuY3VycmVudFggIT09IHRvdWNoZXMuc3RhcnRYIHx8IHRvdWNoZXMuY3VycmVudFkgIT09IHRvdWNoZXMuc3RhcnRZKSB7XG4gICAgICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChwYXJhbXMudG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uICYmICFwYXJhbXMubmVzdGVkKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIH1cbiAgICAgIGRhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyaWdnZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZCcpO1xuICAgICAgfVxuICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgICAvLyBHcmFiIEN1cnNvclxuICAgICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXJGaXJzdE1vdmUnLCBlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlck1vdmUnLCBlKTtcbiAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuXG4gICAgdmFyIGRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBkaWZmWCA6IGRpZmZZO1xuICAgIHRvdWNoZXMuZGlmZiA9IGRpZmY7XG5cbiAgICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICAgIGlmIChydGwpIHsgZGlmZiA9IC1kaWZmOyB9XG5cbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcblxuICAgIHZhciBkaXNhYmxlUGFyZW50U3dpcGVyID0gdHJ1ZTtcbiAgICB2YXIgcmVzaXN0YW5jZVJhdGlvID0gcGFyYW1zLnJlc2lzdGFuY2VSYXRpbztcbiAgICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gICAgfVxuICAgIGlmICgoZGlmZiA+IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSB7IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IChzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxKSArIChNYXRoLnBvdyggKC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZiksIHJlc2lzdGFuY2VSYXRpbyApKTsgfVxuICAgIH0gZWxzZSBpZiAoZGlmZiA8IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIHsgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEpIC0gKE1hdGgucG93KCAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gZGF0YS5zdGFydFRyYW5zbGF0ZSAtIGRpZmYpLCByZXNpc3RhbmNlUmF0aW8gKSk7IH1cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGlyZWN0aW9ucyBsb2Nrc1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuXG5cbiAgICAvLyBUaHJlc2hvbGRcbiAgICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIHtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICAgIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgICAgdG91Y2hlcy5zdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuICAgICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyYW1zLmZvbGxvd0ZpbmdlcikgeyByZXR1cm47IH1cblxuICAgIC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZSB8fCBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIC8vIFZlbG9jaXR5XG4gICAgICBpZiAoZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3N0YXJ0WCcgOiAnc3RhcnRZJ10sXG4gICAgICAgICAgdGltZTogZGF0YS50b3VjaFN0YXJ0VGltZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdjdXJyZW50WCcgOiAnY3VycmVudFknXSxcbiAgICAgICAgdGltZTogVXRpbHMubm93KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHByb2dyZXNzXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7XG4gICAgLy8gVXBkYXRlIHRyYW5zbGF0ZVxuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQgKGV2ZW50KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuXG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgIHZhciBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9XG4gICAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gICAgfVxuICAgIGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcyA9IGZhbHNlO1xuICAgIGlmICghZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICAgICAgfVxuICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJldHVybiBHcmFiIEN1cnNvclxuICAgIGlmIChwYXJhbXMuZ3JhYkN1cnNvciAmJiBkYXRhLmlzTW92ZWQgJiYgZGF0YS5pc1RvdWNoZWQgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gVGltZSBkaWZmXG4gICAgdmFyIHRvdWNoRW5kVGltZSA9IFV0aWxzLm5vdygpO1xuICAgIHZhciB0aW1lRGlmZiA9IHRvdWNoRW5kVGltZSAtIGRhdGEudG91Y2hTdGFydFRpbWU7XG5cbiAgICAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcbiAgICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUoZSk7XG4gICAgICBzd2lwZXIuZW1pdCgndGFwJywgZSk7XG4gICAgICBpZiAodGltZURpZmYgPCAzMDAgJiYgKHRvdWNoRW5kVGltZSAtIGRhdGEubGFzdENsaWNrVGltZSkgPiAzMDApIHtcbiAgICAgICAgaWYgKGRhdGEuY2xpY2tUaW1lb3V0KSB7IGNsZWFyVGltZW91dChkYXRhLmNsaWNrVGltZW91dCk7IH1cbiAgICAgICAgZGF0YS5jbGlja1RpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzd2lwZXIuZW1pdCgnY2xpY2snLCBlKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiAodG91Y2hFbmRUaW1lIC0gZGF0YS5sYXN0Q2xpY2tUaW1lKSA8IDMwMCkge1xuICAgICAgICBpZiAoZGF0YS5jbGlja1RpbWVvdXQpIHsgY2xlYXJUaW1lb3V0KGRhdGEuY2xpY2tUaW1lb3V0KTsgfVxuICAgICAgICBzd2lwZXIuZW1pdCgnZG91YmxlVGFwJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0YS5sYXN0Q2xpY2tUaW1lID0gVXRpbHMubm93KCk7XG4gICAgVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzd2lwZXIuZGVzdHJveWVkKSB7IHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTsgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwIHx8IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9PT0gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcblxuICAgIHZhciBjdXJyZW50UG9zO1xuICAgIGlmIChwYXJhbXMuZm9sbG93RmluZ2VyKSB7XG4gICAgICBjdXJyZW50UG9zID0gcnRsID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UG9zID0gLWRhdGEuY3VycmVudFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBpZiAoY3VycmVudFBvcyA8IC1zd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRQb3MgPiAtc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA8IHNuYXBHcmlkLmxlbmd0aCkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHNuYXBHcmlkLmxlbmd0aCAtIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW0pIHtcbiAgICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGxhc3RNb3ZlRXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG5cbiAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBsYXN0TW92ZUV2ZW50LnBvc2l0aW9uIC0gdmVsb2NpdHlFdmVudC5wb3NpdGlvbjtcbiAgICAgICAgICB2YXIgdGltZSA9IGxhc3RNb3ZlRXZlbnQudGltZSAtIHZlbG9jaXR5RXZlbnQudGltZTtcbiAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSBkaXN0YW5jZSAvIHRpbWU7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5IC89IDI7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlci52ZWxvY2l0eSkgPCBwYXJhbXMuZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHkpIHtcbiAgICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMgaW1wbGllcyB0aGF0IHRoZSB1c2VyIHN0b3BwZWQgbW92aW5nIGEgZmluZ2VyIHRoZW4gcmVsZWFzZWQuXG4gICAgICAgICAgLy8gVGhlcmUgd291bGQgYmUgbm8gZXZlbnRzIHdpdGggZGlzdGFuY2UgemVybywgc28gdGhlIGxhc3QgZXZlbnQgaXMgc3RhbGUuXG4gICAgICAgICAgaWYgKHRpbWUgPiAxNTAgfHwgKFV0aWxzLm5vdygpIC0gbGFzdE1vdmVFdmVudC50aW1lKSA+IDMwMCkge1xuICAgICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIudmVsb2NpdHkgKj0gcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1WZWxvY2l0eVJhdGlvO1xuXG4gICAgICAgIGRhdGEudmVsb2NpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICB2YXIgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVJhdGlvO1xuICAgICAgICB2YXIgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG5cbiAgICAgICAgdmFyIG5ld1Bvc2l0aW9uID0gc3dpcGVyLnRyYW5zbGF0ZSArIG1vbWVudHVtRGlzdGFuY2U7XG4gICAgICAgIGlmIChydGwpIHsgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247IH1cblxuICAgICAgICB2YXIgZG9Cb3VuY2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGFmdGVyQm91bmNlUG9zaXRpb247XG4gICAgICAgIHZhciBib3VuY2VBbW91bnQgPSBNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpICogMjAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZVJhdGlvO1xuICAgICAgICB2YXIgbmVlZHNMb29wRml4O1xuICAgICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHsgbmVlZHNMb29wRml4ID0gdHJ1ZTsgfVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHsgbmVlZHNMb29wRml4ID0gdHJ1ZTsgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGU7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzbmFwR3JpZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNuYXBHcmlkW2pdID4gLW5ld1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIG5leHRTbGlkZSA9IGo7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGVdIC0gbmV3UG9zaXRpb24pIDwgTWF0aC5hYnMoc25hcEdyaWRbbmV4dFNsaWRlIC0gMV0gLSBuZXdQb3NpdGlvbikgfHwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICAgIHN3aXBlci5vbmNlKCd0cmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXggZHVyYXRpb25cbiAgICAgICAgaWYgKHN3aXBlci52ZWxvY2l0eSAhPT0gMCkge1xuICAgICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygoLW5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UgJiYgZG9Cb3VuY2UpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24obW9tZW50dW1EdXJhdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnbW9tZW50dW1Cb3VuY2UnKTtcblxuICAgICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24ocGFyYW1zLnNwZWVkKTtcbiAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG4gICAgICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJhbXMuZnJlZU1vZGVNb21lbnR1bSB8fCB0aW1lRGlmZiA+PSBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGN1cnJlbnQgc2xpZGVcbiAgICB2YXIgc3RvcEluZGV4ID0gMDtcbiAgICB2YXIgZ3JvdXBTaXplID0gc3dpcGVyLnNsaWRlc1NpemVzR3JpZFswXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCkge1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoY3VycmVudFBvcyA+PSBzbGlkZXNHcmlkW2ldICYmIGN1cnJlbnRQb3MgPCBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdKSB7XG4gICAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgICBncm91cFNpemUgPSBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmQgY3VycmVudCBzbGlkZSBzaXplXG4gICAgdmFyIHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuXG4gICAgaWYgKHRpbWVEaWZmID4gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgICAgLy8gTG9uZyB0b3VjaGVzXG4gICAgICBpZiAoIXBhcmFtcy5sb25nU3dpcGVzKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBpZiAocmF0aW8gPj0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApOyB9XG4gICAgICAgIGVsc2UgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgaWYgKHJhdGlvID4gKDEgLSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSkgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApOyB9XG4gICAgICAgIGVsc2UgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpOyB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNob3J0IHN3aXBlc1xuICAgICAgaWYgKCFwYXJhbXMuc2hvcnRTd2lwZXMpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG5cbiAgICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2Nrc1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgYWxsb3dTbGlkZVByZXYgPSBzd2lwZXIuYWxsb3dTbGlkZVByZXY7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuXG4gICAgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG5cbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcblxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heChzd2lwZXIudHJhbnNsYXRlLCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpLCBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5ICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIGxvY2tzIGFmdGVyIHJlc2l6ZVxuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IGFsbG93U2xpZGVQcmV2O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2sgKGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5hbGxvd0NsaWNrKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzKSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uICYmIHN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzO1xuICAgIHZhciBlbCA9IHN3aXBlci5lbDtcbiAgICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcblxuICAgIHtcbiAgICAgIHN3aXBlci5vblRvdWNoU3RhcnQgPSBvblRvdWNoU3RhcnQuYmluZChzd2lwZXIpO1xuICAgICAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICAgICAgc3dpcGVyLm9uVG91Y2hFbmQgPSBvblRvdWNoRW5kLmJpbmQoc3dpcGVyKTtcbiAgICB9XG5cbiAgICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuXG4gICAgdmFyIHRhcmdldCA9IHBhcmFtcy50b3VjaEV2ZW50c1RhcmdldCA9PT0gJ2NvbnRhaW5lcicgPyBlbCA6IHdyYXBwZXJFbDtcbiAgICB2YXIgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDtcblxuICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgIHtcbiAgICAgIGlmICghU3VwcG9ydC50b3VjaCAmJiAoU3VwcG9ydC5wb2ludGVyRXZlbnRzIHx8IFN1cHBvcnQucHJlZml4ZWRQb2ludGVyRXZlbnRzKSkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoU3VwcG9ydC50b3VjaCkge1xuICAgICAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGNhcHR1cmUgfSA6IGNhcHR1cmUpO1xuICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhRGV2aWNlLmlvcyAmJiAhRGV2aWNlLmFuZHJvaWQpIHx8IChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhU3VwcG9ydC50b3VjaCAmJiBEZXZpY2UuaW9zKSkge1xuICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuICAgICAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2l6ZSBoYW5kbGVyXG4gICAgc3dpcGVyLm9uKChEZXZpY2UuaW9zIHx8IERldmljZS5hbmRyb2lkID8gJ3Jlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSBvYnNlcnZlclVwZGF0ZScgOiAncmVzaXplIG9ic2VydmVyVXBkYXRlJyksIG9uUmVzaXplLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0b3VjaEV2ZW50cyA9IHN3aXBlci50b3VjaEV2ZW50cztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgdmFyIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICB2YXIgdGFyZ2V0ID0gcGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/IGVsIDogd3JhcHBlckVsO1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkO1xuXG4gICAgLy8gVG91Y2ggRXZlbnRzXG4gICAge1xuICAgICAgaWYgKCFTdXBwb3J0LnRvdWNoICYmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChTdXBwb3J0LnRvdWNoKSB7XG4gICAgICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHRvdWNoRXZlbnRzLnN0YXJ0ID09PSAnb25Ub3VjaFN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFEZXZpY2UuaW9zICYmICFEZXZpY2UuYW5kcm9pZCkgfHwgKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFTdXBwb3J0LnRvdWNoICYmIERldmljZS5pb3MpKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG4gICAgICBpZiAocGFyYW1zLnByZXZlbnRDbGlja3MgfHwgcGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbikge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIGhhbmRsZXJcbiAgICBzd2lwZXIub2ZmKChEZXZpY2UuaW9zIHx8IERldmljZS5hbmRyb2lkID8gJ3Jlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSBvYnNlcnZlclVwZGF0ZScgOiAncmVzaXplIG9ic2VydmVyVXBkYXRlJyksIG9uUmVzaXplKTtcbiAgfVxuXG4gIHZhciBldmVudHMgPSB7XG4gICAgYXR0YWNoRXZlbnRzOiBhdHRhY2hFdmVudHMsXG4gICAgZGV0YWNoRXZlbnRzOiBkZXRhY2hFdmVudHMsXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBpbml0aWFsaXplZCA9IHN3aXBlci5pbml0aWFsaXplZDtcbiAgICB2YXIgbG9vcGVkU2xpZGVzID0gc3dpcGVyLmxvb3BlZFNsaWRlczsgaWYgKCBsb29wZWRTbGlkZXMgPT09IHZvaWQgMCApIGxvb3BlZFNsaWRlcyA9IDA7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICAgIGlmICghYnJlYWtwb2ludHMgfHwgKGJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5sZW5ndGggPT09IDApKSB7IHJldHVybjsgfVxuXG4gICAgLy8gU2V0IGJyZWFrcG9pbnQgZm9yIHdpbmRvdyB3aWR0aCBhbmQgdXBkYXRlIHBhcmFtZXRlcnNcbiAgICB2YXIgYnJlYWtwb2ludCA9IHN3aXBlci5nZXRCcmVha3BvaW50KGJyZWFrcG9pbnRzKTtcblxuICAgIGlmIChicmVha3BvaW50ICYmIHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCAhPT0gYnJlYWtwb2ludCkge1xuICAgICAgdmFyIGJyZWFrcG9pbnRPbmx5UGFyYW1zID0gYnJlYWtwb2ludCBpbiBicmVha3BvaW50cyA/IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGJyZWFrcG9pbnRPbmx5UGFyYW1zKSB7XG4gICAgICAgIFsnc2xpZGVzUGVyVmlldycsICdzcGFjZUJldHdlZW4nLCAnc2xpZGVzUGVyR3JvdXAnXS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgIHZhciBwYXJhbVZhbHVlID0gYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycgJiYgKHBhcmFtVmFsdWUgPT09ICdBVVRPJyB8fCBwYXJhbVZhbHVlID09PSAnYXV0bycpKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ3NsaWRlc1BlclZpZXcnKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUludChwYXJhbVZhbHVlLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJyZWFrcG9pbnRQYXJhbXMgPSBicmVha3BvaW50T25seVBhcmFtcyB8fCBzd2lwZXIub3JpZ2luYWxQYXJhbXM7XG4gICAgICB2YXIgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG5lZWRzUmVMb29wID0gcGFyYW1zLmxvb3AgJiYgKGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gcGFyYW1zLnNsaWRlc1BlclZpZXcgfHwgZGlyZWN0aW9uQ2hhbmdlZCk7XG5cbiAgICAgIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgICAgIHN3aXBlci5jaGFuZ2VEaXJlY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGFsbG93VG91Y2hNb3ZlOiBzd2lwZXIucGFyYW1zLmFsbG93VG91Y2hNb3ZlLFxuICAgICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXYsXG4gICAgICB9KTtcblxuICAgICAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcblxuICAgICAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKChhY3RpdmVJbmRleCAtIGxvb3BlZFNsaWRlcykgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdicmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludCAoYnJlYWtwb2ludHMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoXG4gICAgaWYgKCFicmVha3BvaW50cykgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgdmFyIGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICB2YXIgcG9pbnRzID0gW107XG4gICAgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmZvckVhY2goZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICBwb2ludHMucHVzaChwb2ludCk7XG4gICAgfSk7XG4gICAgcG9pbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKTsgfSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzSW52ZXJzZSkge1xuICAgICAgICBpZiAocG9pbnQgPD0gd2luLmlubmVyV2lkdGgpIHtcbiAgICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocG9pbnQgPj0gd2luLmlubmVyV2lkdGggJiYgIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnJlYWtwb2ludCB8fCAnbWF4JztcbiAgfVxuXG4gIHZhciBicmVha3BvaW50cyA9IHsgc2V0QnJlYWtwb2ludDogc2V0QnJlYWtwb2ludCwgZ2V0QnJlYWtwb2ludDogZ2V0QnJlYWtwb2ludCB9O1xuXG4gIGZ1bmN0aW9uIGFkZENsYXNzZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGw7XG4gICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgdmFyIHN1ZmZpeGVzID0gW107XG5cbiAgICBzdWZmaXhlcy5wdXNoKCdpbml0aWFsaXplZCcpO1xuICAgIHN1ZmZpeGVzLnB1c2gocGFyYW1zLmRpcmVjdGlvbik7XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdmcmVlLW1vZGUnKTtcbiAgICB9XG4gICAgaWYgKCFTdXBwb3J0LmZsZXhib3gpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ25vLWZsZXhib3gnKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdhdXRvaGVpZ2h0Jyk7XG4gICAgfVxuICAgIGlmIChydGwpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ3J0bCcpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ211bHRpcm93Jyk7XG4gICAgfVxuICAgIGlmIChEZXZpY2UuYW5kcm9pZCkge1xuICAgICAgc3VmZml4ZXMucHVzaCgnYW5kcm9pZCcpO1xuICAgIH1cbiAgICBpZiAoRGV2aWNlLmlvcykge1xuICAgICAgc3VmZml4ZXMucHVzaCgnaW9zJyk7XG4gICAgfVxuICAgIC8vIFdQOCBUb3VjaCBFdmVudHMgRml4XG4gICAgaWYgKChCcm93c2VyLmlzSUUgfHwgQnJvd3Nlci5pc0VkZ2UpICYmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKChcIndwOC1cIiArIChwYXJhbXMuZGlyZWN0aW9uKSkpO1xuICAgIH1cblxuICAgIHN1ZmZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgc3VmZml4KTtcbiAgICB9KTtcblxuICAgICRlbC5hZGRDbGFzcyhjbGFzc05hbWVzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICB2YXIgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzO1xuXG4gICAgJGVsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0geyBhZGRDbGFzc2VzOiBhZGRDbGFzc2VzLCByZW1vdmVDbGFzc2VzOiByZW1vdmVDbGFzc2VzIH07XG5cbiAgZnVuY3Rpb24gbG9hZEltYWdlIChpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGltYWdlO1xuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfVxuICAgIH1cbiAgICBpZiAoIWltYWdlRWwuY29tcGxldGUgfHwgIWNoZWNrRm9yQ29tcGxldGUpIHtcbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgaW1hZ2UgPSBuZXcgd2luLkltYWdlKCk7XG4gICAgICAgIGltYWdlLm9ubG9hZCA9IG9uUmVhZHk7XG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBvblJlYWR5O1xuICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICBpbWFnZS5zaXplcyA9IHNpemVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICBpbWFnZS5zcmNzZXQgPSBzcmNzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgIGltYWdlLnNyYyA9IHNyYztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25SZWFkeSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbWFnZSBhbHJlYWR5IGxvYWRlZC4uLlxuICAgICAgb25SZWFkeSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWxvYWRJbWFnZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlciA9PT0gJ3VuZGVmaW5lZCcgfHwgc3dpcGVyID09PSBudWxsIHx8ICFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuaW1hZ2VzTG9hZGVkICE9PSB1bmRlZmluZWQpIHsgc3dpcGVyLmltYWdlc0xvYWRlZCArPSAxOyB9XG4gICAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCA9PT0gc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudXBkYXRlT25JbWFnZXNSZWFkeSkgeyBzd2lwZXIudXBkYXRlKCk7IH1cbiAgICAgICAgc3dpcGVyLmVtaXQoJ2ltYWdlc1JlYWR5Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgICAgc3dpcGVyLmxvYWRJbWFnZShcbiAgICAgICAgaW1hZ2VFbCxcbiAgICAgICAgaW1hZ2VFbC5jdXJyZW50U3JjIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzcmMnKSxcbiAgICAgICAgaW1hZ2VFbC5zcmNzZXQgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLFxuICAgICAgICBpbWFnZUVsLnNpemVzIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzaXplcycpLFxuICAgICAgICB0cnVlLFxuICAgICAgICBvblJlYWR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbWFnZXMgPSB7XG4gICAgbG9hZEltYWdlOiBsb2FkSW1hZ2UsXG4gICAgcHJlbG9hZEltYWdlczogcHJlbG9hZEltYWdlcyxcbiAgfTtcblxuICBmdW5jdGlvbiBjaGVja092ZXJmbG93KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3YXNMb2NrZWQgPSBzd2lwZXIuaXNMb2NrZWQ7XG5cbiAgICBzd2lwZXIuaXNMb2NrZWQgPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoID09PSAxO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gIXN3aXBlci5pc0xvY2tlZDtcblxuICAgIC8vIGV2ZW50c1xuICAgIGlmICh3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkgeyBzd2lwZXIuZW1pdChzd2lwZXIuaXNMb2NrZWQgPyAnbG9jaycgOiAndW5sb2NrJyk7IH1cblxuICAgIGlmICh3YXNMb2NrZWQgJiYgd2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICAgIHN3aXBlci5pc0VuZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoZWNrT3ZlcmZsb3ckMSA9IHsgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvdyB9O1xuXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBpbml0OiB0cnVlLFxuICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgICBpbml0aWFsU2xpZGU6IDAsXG4gICAgc3BlZWQ6IDMwMCxcbiAgICAvL1xuICAgIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG5cbiAgICAvLyBUbyBzdXBwb3J0IGlPUydzIHN3aXBlLXRvLWdvLWJhY2sgZ2VzdHVyZSAod2hlbiBiZWluZyB1c2VkIGluLWFwcCwgd2l0aCBVSVdlYlZpZXcpLlxuICAgIGVkZ2VTd2lwZURldGVjdGlvbjogZmFsc2UsXG4gICAgZWRnZVN3aXBlVGhyZXNob2xkOiAyMCxcblxuICAgIC8vIEZyZWUgbW9kZVxuICAgIGZyZWVNb2RlOiBmYWxzZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtOiB0cnVlLFxuICAgIGZyZWVNb2RlTW9tZW50dW1SYXRpbzogMSxcbiAgICBmcmVlTW9kZU1vbWVudHVtQm91bmNlOiB0cnVlLFxuICAgIGZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbzogMSxcbiAgICBmcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbzogMSxcbiAgICBmcmVlTW9kZVN0aWNreTogZmFsc2UsXG4gICAgZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHk6IDAuMDIsXG5cbiAgICAvLyBBdXRvaGVpZ2h0XG4gICAgYXV0b0hlaWdodDogZmFsc2UsXG5cbiAgICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICAgIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcblxuICAgIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gICAgdmlydHVhbFRyYW5zbGF0ZTogZmFsc2UsXG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZWZmZWN0OiAnc2xpZGUnLCAvLyAnc2xpZGUnIG9yICdmYWRlJyBvciAnY3ViZScgb3IgJ2NvdmVyZmxvdycgb3IgJ2ZsaXAnXG5cbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG4gICAgYnJlYWtwb2ludHNJbnZlcnNlOiBmYWxzZSxcblxuICAgIC8vIFNsaWRlcyBncmlkXG4gICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgIHNsaWRlc1BlckNvbHVtbkZpbGw6ICdjb2x1bW4nLFxuICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICBzbGlkZXNPZmZzZXRCZWZvcmU6IDAsIC8vIGluIHB4XG4gICAgc2xpZGVzT2Zmc2V0QWZ0ZXI6IDAsIC8vIGluIHB4XG4gICAgbm9ybWFsaXplU2xpZGVJbmRleDogdHJ1ZSxcbiAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuXG4gICAgLy8gRGlzYWJsZSBzd2lwZXIgYW5kIGhpZGUgbmF2aWdhdGlvbiB3aGVuIGNvbnRhaW5lciBub3Qgb3ZlcmZsb3dcbiAgICB3YXRjaE92ZXJmbG93OiBmYWxzZSxcblxuICAgIC8vIFJvdW5kIGxlbmd0aFxuICAgIHJvdW5kTGVuZ3RoczogZmFsc2UsXG5cbiAgICAvLyBUb3VjaGVzXG4gICAgdG91Y2hSYXRpbzogMSxcbiAgICB0b3VjaEFuZ2xlOiA0NSxcbiAgICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICAgIHNob3J0U3dpcGVzOiB0cnVlLFxuICAgIGxvbmdTd2lwZXM6IHRydWUsXG4gICAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gICAgbG9uZ1N3aXBlc01zOiAzMDAsXG4gICAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICAgIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICAgIHRocmVzaG9sZDogMCxcbiAgICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgdG91Y2hTdGFydFByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgIHRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgICB0b3VjaFJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcblxuICAgIC8vIFVuaXF1ZSBOYXZpZ2F0aW9uIEVsZW1lbnRzXG4gICAgdW5pcXVlTmF2RWxlbWVudHM6IHRydWUsXG5cbiAgICAvLyBSZXNpc3RhbmNlXG4gICAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgICByZXNpc3RhbmNlUmF0aW86IDAuODUsXG5cbiAgICAvLyBQcm9ncmVzc1xuICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHdhdGNoU2xpZGVzVmlzaWJpbGl0eTogZmFsc2UsXG5cbiAgICAvLyBDdXJzb3JcbiAgICBncmFiQ3Vyc29yOiBmYWxzZSxcblxuICAgIC8vIENsaWNrc1xuICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG4gICAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuXG4gICAgLy8gSW1hZ2VzXG4gICAgcHJlbG9hZEltYWdlczogdHJ1ZSxcbiAgICB1cGRhdGVPbkltYWdlc1JlYWR5OiB0cnVlLFxuXG4gICAgLy8gbG9vcFxuICAgIGxvb3A6IGZhbHNlLFxuICAgIGxvb3BBZGRpdGlvbmFsU2xpZGVzOiAwLFxuICAgIGxvb3BlZFNsaWRlczogbnVsbCxcbiAgICBsb29wRmlsbEdyb3VwV2l0aEJsYW5rOiBmYWxzZSxcblxuICAgIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICAgIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICAgIGFsbG93U2xpZGVOZXh0OiB0cnVlLFxuICAgIHN3aXBlSGFuZGxlcjogbnVsbCwgLy8gJy5zd2lwZS1oYW5kbGVyJyxcbiAgICBub1N3aXBpbmc6IHRydWUsXG4gICAgbm9Td2lwaW5nQ2xhc3M6ICdzd2lwZXItbm8tc3dpcGluZycsXG4gICAgbm9Td2lwaW5nU2VsZWN0b3I6IG51bGwsXG5cbiAgICAvLyBQYXNzaXZlIExpc3RlbmVyc1xuICAgIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG5cbiAgICAvLyBOU1xuICAgIGNvbnRhaW5lck1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLScsIC8vIE5FV1xuICAgIHNsaWRlQ2xhc3M6ICdzd2lwZXItc2xpZGUnLFxuICAgIHNsaWRlQmxhbmtDbGFzczogJ3N3aXBlci1zbGlkZS1pbnZpc2libGUtYmxhbmsnLFxuICAgIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgICBzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1hY3RpdmUnLFxuICAgIHNsaWRlVmlzaWJsZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXZpc2libGUnLFxuICAgIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgICBzbGlkZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1uZXh0JyxcbiAgICBzbGlkZUR1cGxpY2F0ZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtbmV4dCcsXG4gICAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gICAgc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlLXByZXYnLFxuICAgIHdyYXBwZXJDbGFzczogJ3N3aXBlci13cmFwcGVyJyxcblxuICAgIC8vIENhbGxiYWNrc1xuICAgIHJ1bkNhbGxiYWNrc09uSW5pdDogdHJ1ZSxcbiAgfTtcblxuICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IFwib2ZmXCIgKi9cblxuICB2YXIgcHJvdG90eXBlcyA9IHtcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uJDEsXG4gICAgc2xpZGU6IHNsaWRlLFxuICAgIGxvb3A6IGxvb3AsXG4gICAgZ3JhYkN1cnNvcjogZ3JhYkN1cnNvcixcbiAgICBtYW5pcHVsYXRpb246IG1hbmlwdWxhdGlvbixcbiAgICBldmVudHM6IGV2ZW50cyxcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMsXG4gICAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvdyQxLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgaW1hZ2VzOiBpbWFnZXMsXG4gIH07XG5cbiAgdmFyIGV4dGVuZGVkRGVmYXVsdHMgPSB7fTtcblxuICB2YXIgU3dpcGVyID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU3dpcGVyQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiBTd2lwZXIoKSB7XG4gICAgICB2YXIgYXNzaWduO1xuXG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgIHZhciBlbDtcbiAgICAgIHZhciBwYXJhbXM7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChhc3NpZ24gPSBhcmdzLCBlbCA9IGFzc2lnblswXSwgcGFyYW1zID0gYXNzaWduWzFdKTtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyYW1zKSB7IHBhcmFtcyA9IHt9OyB9XG5cbiAgICAgIHBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICAgIGlmIChlbCAmJiAhcGFyYW1zLmVsKSB7IHBhcmFtcy5lbCA9IGVsOyB9XG5cbiAgICAgIFN3aXBlckNsYXNzLmNhbGwodGhpcywgcGFyYW1zKTtcblxuICAgICAgT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvdG90eXBlR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMocHJvdG90eXBlc1twcm90b3R5cGVHcm91cF0pLmZvckVhY2goZnVuY3Rpb24gKHByb3RvTWV0aG9kKSB7XG4gICAgICAgICAgaWYgKCFTd2lwZXIucHJvdG90eXBlW3Byb3RvTWV0aG9kXSkge1xuICAgICAgICAgICAgU3dpcGVyLnByb3RvdHlwZVtwcm90b01ldGhvZF0gPSBwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXVtwcm90b01ldGhvZF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTd2lwZXIgSW5zdGFuY2VcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIubW9kdWxlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc3dpcGVyLm1vZHVsZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBzd2lwZXIubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZS5wYXJhbXNbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVBhcmFtcyAhPT0gJ29iamVjdCcgfHwgbW9kdWxlUGFyYW1zID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmICghKG1vZHVsZVBhcmFtTmFtZSBpbiBwYXJhbXMgJiYgJ2VuYWJsZWQnIGluIG1vZHVsZVBhcmFtcykpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHsgZW5hYmxlZDogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICAmJiAhKCdlbmFibGVkJyBpbiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSB7IHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0geyBlbmFibGVkOiBmYWxzZSB9OyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBtb2R1bGVzIHBhcmFtc1xuICAgICAgdmFyIHN3aXBlclBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgZGVmYXVsdHMpO1xuICAgICAgc3dpcGVyLnVzZU1vZHVsZXNQYXJhbXMoc3dpcGVyUGFyYW1zKTtcblxuICAgICAgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuICAgICAgc3dpcGVyLnBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgc3dpcGVyUGFyYW1zLCBleHRlbmRlZERlZmF1bHRzLCBwYXJhbXMpO1xuICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBzd2lwZXIucGFyYW1zKTtcbiAgICAgIHN3aXBlci5wYXNzZWRQYXJhbXMgPSBVdGlscy5leHRlbmQoe30sIHBhcmFtcyk7XG5cbiAgICAgIC8vIFNhdmUgRG9tIGxpYlxuICAgICAgc3dpcGVyLiQgPSAkO1xuXG4gICAgICAvLyBGaW5kIGVsXG4gICAgICB2YXIgJGVsID0gJChzd2lwZXIucGFyYW1zLmVsKTtcbiAgICAgIGVsID0gJGVsWzBdO1xuXG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICgkZWwubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgc3dpcGVycyA9IFtdO1xuICAgICAgICAkZWwuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGNvbnRhaW5lckVsKSB7XG4gICAgICAgICAgdmFyIG5ld1BhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zLCB7IGVsOiBjb250YWluZXJFbCB9KTtcbiAgICAgICAgICBzd2lwZXJzLnB1c2gobmV3IFN3aXBlcihuZXdQYXJhbXMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzd2lwZXJzO1xuICAgICAgfVxuXG4gICAgICBlbC5zd2lwZXIgPSBzd2lwZXI7XG4gICAgICAkZWwuZGF0YSgnc3dpcGVyJywgc3dpcGVyKTtcblxuICAgICAgLy8gRmluZCBXcmFwcGVyXG4gICAgICB2YXIgJHdyYXBwZXJFbCA9ICRlbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MpKSk7XG5cbiAgICAgIC8vIEV4dGVuZCBTd2lwZXJcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgJGVsOiAkZWwsXG4gICAgICAgIGVsOiBlbCxcbiAgICAgICAgJHdyYXBwZXJFbDogJHdyYXBwZXJFbCxcbiAgICAgICAgd3JhcHBlckVsOiAkd3JhcHBlckVsWzBdLFxuXG4gICAgICAgIC8vIENsYXNzZXNcbiAgICAgICAgY2xhc3NOYW1lczogW10sXG5cbiAgICAgICAgLy8gU2xpZGVzXG4gICAgICAgIHNsaWRlczogJCgpLFxuICAgICAgICBzbGlkZXNHcmlkOiBbXSxcbiAgICAgICAgc25hcEdyaWQ6IFtdLFxuICAgICAgICBzbGlkZXNTaXplc0dyaWQ6IFtdLFxuXG4gICAgICAgIC8vIGlzRGlyZWN0aW9uXG4gICAgICAgIGlzSG9yaXpvbnRhbDogZnVuY3Rpb24gaXNIb3Jpem9udGFsKCkge1xuICAgICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICB9LFxuICAgICAgICBpc1ZlcnRpY2FsOiBmdW5jdGlvbiBpc1ZlcnRpY2FsKCkge1xuICAgICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUlRMXG4gICAgICAgIHJ0bDogKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgICBydGxUcmFuc2xhdGU6IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgICB3cm9uZ1JUTDogJHdyYXBwZXJFbC5jc3MoJ2Rpc3BsYXknKSA9PT0gJy13ZWJraXQtYm94JyxcblxuICAgICAgICAvLyBJbmRleGVzXG4gICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICByZWFsSW5kZXg6IDAsXG5cbiAgICAgICAgLy9cbiAgICAgICAgaXNCZWdpbm5pbmc6IHRydWUsXG4gICAgICAgIGlzRW5kOiBmYWxzZSxcblxuICAgICAgICAvLyBQcm9wc1xuICAgICAgICB0cmFuc2xhdGU6IDAsXG4gICAgICAgIHByZXZpb3VzVHJhbnNsYXRlOiAwLFxuICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgdmVsb2NpdHk6IDAsXG4gICAgICAgIGFuaW1hdGluZzogZmFsc2UsXG5cbiAgICAgICAgLy8gTG9ja3NcbiAgICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuXG4gICAgICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgICAgICB0b3VjaEV2ZW50czogKGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICAgIHZhciB0b3VjaCA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnXTtcbiAgICAgICAgICB2YXIgZGVza3RvcCA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJ107XG4gICAgICAgICAgaWYgKFN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJ107XG4gICAgICAgICAgfSBlbHNlIGlmIChTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsnTVNQb2ludGVyRG93bicsICdNU1BvaW50ZXJNb3ZlJywgJ01TUG9pbnRlclVwJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXBlci50b3VjaEV2ZW50c1RvdWNoID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHRvdWNoWzBdLFxuICAgICAgICAgICAgbW92ZTogdG91Y2hbMV0sXG4gICAgICAgICAgICBlbmQ6IHRvdWNoWzJdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBkZXNrdG9wWzBdLFxuICAgICAgICAgICAgbW92ZTogZGVza3RvcFsxXSxcbiAgICAgICAgICAgIGVuZDogZGVza3RvcFsyXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggPyBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA6IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICAgIH0oKSksXG4gICAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICAgIGlzVG91Y2hlZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTW92ZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG91Y2hTdGFydFRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFRyYW5zbGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGFsbG93VGhyZXNob2xkTW92ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgICBmb3JtRWxlbWVudHM6ICdpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhLCBidXR0b24sIHZpZGVvJyxcbiAgICAgICAgICAvLyBMYXN0IGNsaWNrIHRpbWVcbiAgICAgICAgICBsYXN0Q2xpY2tUaW1lOiBVdGlscy5ub3coKSxcbiAgICAgICAgICBjbGlja1RpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBWZWxvY2l0aWVzXG4gICAgICAgICAgdmVsb2NpdGllczogW10sXG4gICAgICAgICAgYWxsb3dNb21lbnR1bUJvdW5jZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzVG91Y2hFdmVudDogdW5kZWZpbmVkLFxuICAgICAgICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQ2xpY2tzXG4gICAgICAgIGFsbG93Q2xpY2s6IHRydWUsXG5cbiAgICAgICAgLy8gVG91Y2hlc1xuICAgICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcblxuICAgICAgICB0b3VjaGVzOiB7XG4gICAgICAgICAgc3RhcnRYOiAwLFxuICAgICAgICAgIHN0YXJ0WTogMCxcbiAgICAgICAgICBjdXJyZW50WDogMCxcbiAgICAgICAgICBjdXJyZW50WTogMCxcbiAgICAgICAgICBkaWZmOiAwLFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIEltYWdlc1xuICAgICAgICBpbWFnZXNUb0xvYWQ6IFtdLFxuICAgICAgICBpbWFnZXNMb2FkZWQ6IDAsXG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbnN0YWxsIE1vZHVsZXNcbiAgICAgIHN3aXBlci51c2VNb2R1bGVzKCk7XG5cbiAgICAgIC8vIEluaXRcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgICAgc3dpcGVyLmluaXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9XG5cbiAgICBpZiAoIFN3aXBlckNsYXNzICkgU3dpcGVyLl9fcHJvdG9fXyA9IFN3aXBlckNsYXNzO1xuICAgIFN3aXBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTd2lwZXJDbGFzcyAmJiBTd2lwZXJDbGFzcy5wcm90b3R5cGUgKTtcbiAgICBTd2lwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3dpcGVyO1xuXG4gICAgdmFyIHN0YXRpY0FjY2Vzc29ycyA9IHsgZXh0ZW5kZWREZWZhdWx0czogeyBjb25maWd1cmFibGU6IHRydWUgfSxkZWZhdWx0czogeyBjb25maWd1cmFibGU6IHRydWUgfSxDbGFzczogeyBjb25maWd1cmFibGU6IHRydWUgfSwkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLnNsaWRlc1BlclZpZXdEeW5hbWljID0gZnVuY3Rpb24gc2xpZGVzUGVyVmlld0R5bmFtaWMgKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZDtcbiAgICAgIHZhciBzd2lwZXJTaXplID0gc3dpcGVyLnNpemU7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgc3B2ID0gMTtcbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICB2YXIgYnJlYWtMb29wO1xuICAgICAgICBmb3IgKHZhciBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIHsgYnJlYWtMb29wID0gdHJ1ZTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpJDEgPSBhY3RpdmVJbmRleCAtIDE7IGkkMSA+PSAwOyBpJDEgLT0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaSQxXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2kkMV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgeyBicmVha0xvb3AgPSB0cnVlOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpJDIgPSBhY3RpdmVJbmRleCArIDE7IGkkMiA8IHNsaWRlcy5sZW5ndGg7IGkkMiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc0dyaWRbaSQyXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3B2O1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIC8vIEJyZWFrcG9pbnRzXG4gICAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciB0cmFuc2xhdGVWYWx1ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlICogLTEgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgICB2YXIgbmV3VHJhbnNsYXRlID0gTWF0aC5taW4oTWF0aC5tYXgodHJhbnNsYXRlVmFsdWUsIHN3aXBlci5tYXhUcmFuc2xhdGUoKSksIHN3aXBlci5taW5UcmFuc2xhdGUoKSk7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJhbnNsYXRlZDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHJhbnNsYXRlZCkge1xuICAgICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3VwZGF0ZScpO1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLmNoYW5nZURpcmVjdGlvbiA9IGZ1bmN0aW9uIGNoYW5nZURpcmVjdGlvbiAobmV3RGlyZWN0aW9uLCBuZWVkVXBkYXRlKSB7XG4gICAgICBpZiAoIG5lZWRVcGRhdGUgPT09IHZvaWQgMCApIG5lZWRVcGRhdGUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG4gICAgICBpZiAoIW5ld0RpcmVjdGlvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgbmV3RGlyZWN0aW9uID0gY3VycmVudERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgIH1cbiAgICAgIGlmICgobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uKSB8fCAobmV3RGlyZWN0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgbmV3RGlyZWN0aW9uICE9PSAndmVydGljYWwnKSkge1xuICAgICAgICByZXR1cm4gc3dpcGVyO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuJGVsXG4gICAgICAgIC5yZW1vdmVDbGFzcygoXCJcIiArIChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgY3VycmVudERpcmVjdGlvbiArIFwiIHdwOC1cIiArIGN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAuYWRkQ2xhc3MoKFwiXCIgKyAoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIG5ld0RpcmVjdGlvbikpO1xuXG4gICAgICBpZiAoKEJyb3dzZXIuaXNJRSB8fCBCcm93c2VyLmlzRWRnZSkgJiYgKFN1cHBvcnQucG9pbnRlckV2ZW50cyB8fCBTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykpIHtcbiAgICAgICAgc3dpcGVyLiRlbC5hZGRDbGFzcygoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcIndwOC1cIiArIG5ld0RpcmVjdGlvbikpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcblxuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICAgIGlmIChuZWVkVXBkYXRlKSB7IHN3aXBlci51cGRhdGUoKTsgfVxuXG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0ICgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTtcblxuICAgICAgLy8gU2V0IGJyZWFrcG9pbnRcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDbGFzc2VzXG4gICAgICBzd2lwZXIuYWRkQ2xhc3NlcygpO1xuXG4gICAgICAvLyBDcmVhdGUgbG9vcFxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgc2l6ZVxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcblxuICAgICAgLy8gVXBkYXRlIHNsaWRlc1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7XG4gICAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBHcmFiIEN1cnNvclxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuYXR0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIEluaXQgRmxhZ1xuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgLy8gRW1pdFxuICAgICAgc3dpcGVyLmVtaXQoJ2luaXQnKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSAoZGVsZXRlSW5zdGFuY2UsIGNsZWFuU3R5bGVzKSB7XG4gICAgICBpZiAoIGRlbGV0ZUluc3RhbmNlID09PSB2b2lkIDAgKSBkZWxldGVJbnN0YW5jZSA9IHRydWU7XG4gICAgICBpZiAoIGNsZWFuU3R5bGVzID09PSB2b2lkIDAgKSBjbGVhblN0eWxlcyA9IHRydWU7XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcblxuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpO1xuXG4gICAgICAvLyBJbml0IEZsYWdcbiAgICAgIHN3aXBlci5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyBEZXRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIERlc3Ryb3kgbG9vcFxuICAgICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbnVwIHN0eWxlc1xuICAgICAgaWYgKGNsZWFuU3R5bGVzKSB7XG4gICAgICAgIHN3aXBlci5yZW1vdmVDbGFzc2VzKCk7XG4gICAgICAgICRlbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAkd3JhcHBlckVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHNsaWRlc1xuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKFtcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyxcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlTmV4dENsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVQcmV2Q2xhc3MgXS5qb2luKCcgJykpXG4gICAgICAgICAgICAucmVtb3ZlQXR0cignc3R5bGUnKVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JylcbiAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1jb2x1bW4nKVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXJvdycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7XG5cbiAgICAgIC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLmV2ZW50c0xpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgIHN3aXBlci5vZmYoZXZlbnROYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGVsZXRlSW5zdGFuY2UgIT09IGZhbHNlKSB7XG4gICAgICAgIHN3aXBlci4kZWxbMF0uc3dpcGVyID0gbnVsbDtcbiAgICAgICAgc3dpcGVyLiRlbC5kYXRhKCdzd2lwZXInLCBudWxsKTtcbiAgICAgICAgVXRpbHMuZGVsZXRlUHJvcHMoc3dpcGVyKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgU3dpcGVyLmV4dGVuZERlZmF1bHRzID0gZnVuY3Rpb24gZXh0ZW5kRGVmYXVsdHMgKG5ld0RlZmF1bHRzKSB7XG4gICAgICBVdGlscy5leHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICAgIH07XG5cbiAgICBzdGF0aWNBY2Nlc3NvcnMuZXh0ZW5kZWREZWZhdWx0cy5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLmRlZmF1bHRzLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLkNsYXNzLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBTd2lwZXJDbGFzcztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLiQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICQ7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTd2lwZXIsIHN0YXRpY0FjY2Vzc29ycyApO1xuXG4gICAgcmV0dXJuIFN3aXBlcjtcbiAgfShTd2lwZXJDbGFzcykpO1xuXG4gIHZhciBEZXZpY2UkMSA9IHtcbiAgICBuYW1lOiAnZGV2aWNlJyxcbiAgICBwcm90bzoge1xuICAgICAgZGV2aWNlOiBEZXZpY2UsXG4gICAgfSxcbiAgICBzdGF0aWM6IHtcbiAgICAgIGRldmljZTogRGV2aWNlLFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFN1cHBvcnQkMSA9IHtcbiAgICBuYW1lOiAnc3VwcG9ydCcsXG4gICAgcHJvdG86IHtcbiAgICAgIHN1cHBvcnQ6IFN1cHBvcnQsXG4gICAgfSxcbiAgICBzdGF0aWM6IHtcbiAgICAgIHN1cHBvcnQ6IFN1cHBvcnQsXG4gICAgfSxcbiAgfTtcblxuICB2YXIgQnJvd3NlciQxID0ge1xuICAgIG5hbWU6ICdicm93c2VyJyxcbiAgICBwcm90bzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICAgIHN0YXRpYzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICB9O1xuXG4gIHZhciBSZXNpemUgPSB7XG4gICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgcmVzaXplOiB7XG4gICAgICAgICAgcmVzaXplSGFuZGxlcjogZnVuY3Rpb24gcmVzaXplSGFuZGxlcigpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ29yaWVudGF0aW9uY2hhbmdlJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICAvLyBFbWl0IHJlc2l6ZVxuICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTtcblxuICAgICAgICAvLyBFbWl0IG9yaWVudGF0aW9uY2hhbmdlXG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICAgIHdpbi5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIgPSB7XG4gICAgZnVuYzogd2luLk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luLldlYmtpdE11dGF0aW9uT2JzZXJ2ZXIsXG4gICAgYXR0YWNoOiBmdW5jdGlvbiBhdHRhY2godGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIHZhciBPYnNlcnZlckZ1bmMgPSBPYnNlcnZlci5mdW5jO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2JzZXJ2ZXJVcGRhdGUgPSBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh3aW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgICAgd2luLnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luLnNldFRpbWVvdXQob2JzZXJ2ZXJVcGRhdGUsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICBjaGlsZExpc3Q6IHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGlsZExpc3QsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YSxcbiAgICAgIH0pO1xuXG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFTdXBwb3J0Lm9ic2VydmVyIHx8ICFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMub2JzZXJ2ZVBhcmVudHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lclBhcmVudHMgPSBzd2lwZXIuJGVsLnBhcmVudHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXJQYXJlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChjb250YWluZXJQYXJlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2JzZXJ2ZSBjb250YWluZXJcbiAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiRlbFswXSwgeyBjaGlsZExpc3Q6IHN3aXBlci5wYXJhbXMub2JzZXJ2ZVNsaWRlQ2hpbGRyZW4gfSk7XG5cbiAgICAgIC8vIE9ic2VydmUgd3JhcHBlclxuICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChzd2lwZXIuJHdyYXBwZXJFbFswXSwgeyBhdHRyaWJ1dGVzOiBmYWxzZSB9KTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzID0gW107XG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIkMSA9IHtcbiAgICBuYW1lOiAnb2JzZXJ2ZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVBhcmVudHM6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVNsaWRlQ2hpbGRyZW46IGZhbHNlLFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgb2JzZXJ2ZXI6IHtcbiAgICAgICAgICBpbml0OiBPYnNlcnZlci5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBhdHRhY2g6IE9ic2VydmVyLmF0dGFjaC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogT2JzZXJ2ZXIuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb2JzZXJ2ZXJzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuaW5pdCgpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBWaXJ0dWFsID0ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGZvcmNlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciByZWYgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSByZWYuc2xpZGVzUGVyVmlldztcbiAgICAgIHZhciBzbGlkZXNQZXJHcm91cCA9IHJlZi5zbGlkZXNQZXJHcm91cDtcbiAgICAgIHZhciBjZW50ZXJlZFNsaWRlcyA9IHJlZi5jZW50ZXJlZFNsaWRlcztcbiAgICAgIHZhciByZWYkMSA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIHZhciBhZGRTbGlkZXNCZWZvcmUgPSByZWYkMS5hZGRTbGlkZXNCZWZvcmU7XG4gICAgICB2YXIgYWRkU2xpZGVzQWZ0ZXIgPSByZWYkMS5hZGRTbGlkZXNBZnRlcjtcbiAgICAgIHZhciByZWYkMiA9IHN3aXBlci52aXJ0dWFsO1xuICAgICAgdmFyIHByZXZpb3VzRnJvbSA9IHJlZiQyLmZyb207XG4gICAgICB2YXIgcHJldmlvdXNUbyA9IHJlZiQyLnRvO1xuICAgICAgdmFyIHNsaWRlcyA9IHJlZiQyLnNsaWRlcztcbiAgICAgIHZhciBwcmV2aW91c1NsaWRlc0dyaWQgPSByZWYkMi5zbGlkZXNHcmlkO1xuICAgICAgdmFyIHJlbmRlclNsaWRlID0gcmVmJDIucmVuZGVyU2xpZGU7XG4gICAgICB2YXIgcHJldmlvdXNPZmZzZXQgPSByZWYkMi5vZmZzZXQ7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuXG4gICAgICB2YXIgb2Zmc2V0UHJvcDtcbiAgICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSB7IG9mZnNldFByb3AgPSAncmlnaHQnOyB9XG4gICAgICBlbHNlIHsgb2Zmc2V0UHJvcCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnOyB9XG5cbiAgICAgIHZhciBzbGlkZXNBZnRlcjtcbiAgICAgIHZhciBzbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc2xpZGVzQWZ0ZXIgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgICAgICBzbGlkZXNCZWZvcmUgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZXNBZnRlciA9IHNsaWRlc1BlclZpZXcgKyAoc2xpZGVzUGVyR3JvdXAgLSAxKSArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgICAgc2xpZGVzQmVmb3JlID0gc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgIH1cbiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgoKGFjdGl2ZUluZGV4IHx8IDApIC0gc2xpZGVzQmVmb3JlLCAwKTtcbiAgICAgIHZhciB0byA9IE1hdGgubWluKChhY3RpdmVJbmRleCB8fCAwKSArIHNsaWRlc0FmdGVyLCBzbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB2YXIgb2Zmc2V0ID0gKHN3aXBlci5zbGlkZXNHcmlkW2Zyb21dIHx8IDApIC0gKHN3aXBlci5zbGlkZXNHcmlkWzBdIHx8IDApO1xuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnZpcnR1YWwsIHtcbiAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgdG86IHRvLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2xpZGVzR3JpZDogc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gb25SZW5kZXJlZCgpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgICAgaWYgKHN3aXBlci5sYXp5ICYmIHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzR3JpZCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkICYmIG9mZnNldCAhPT0gcHJldmlvdXNPZmZzZXQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVzLmNzcyhvZmZzZXRQcm9wLCAob2Zmc2V0ICsgXCJweFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwpIHtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnJlbmRlckV4dGVybmFsLmNhbGwoc3dpcGVyLCB7XG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgICB0bzogdG8sXG4gICAgICAgICAgc2xpZGVzOiAoZnVuY3Rpb24gZ2V0U2xpZGVzKCkge1xuICAgICAgICAgICAgdmFyIHNsaWRlc1RvUmVuZGVyID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzbGlkZXNUb1JlbmRlcjtcbiAgICAgICAgICB9KCkpLFxuICAgICAgICB9KTtcbiAgICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcHJlcGVuZEluZGV4ZXMgPSBbXTtcbiAgICAgIHZhciBhcHBlbmRJbmRleGVzID0gW107XG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuZmluZCgoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSkpLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHByZXZpb3VzRnJvbTsgaSA8PSBwcmV2aW91c1RvOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoaSA8IGZyb20gfHwgaSA+IHRvKSB7XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaSArIFwiXFxcIl1cIikpLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgaWYgKGkkMSA+PSBmcm9tICYmIGkkMSA8PSB0bykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIGFwcGVuZEluZGV4ZXMucHVzaChpJDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSQxID4gcHJldmlvdXNUbykgeyBhcHBlbmRJbmRleGVzLnB1c2goaSQxKTsgfVxuICAgICAgICAgICAgaWYgKGkkMSA8IHByZXZpb3VzRnJvbSkgeyBwcmVwZW5kSW5kZXhlcy5wdXNoKGkkMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFwcGVuZEluZGV4ZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuYXBwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHByZXBlbmRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgLSBhOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5wcmVwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKCcuc3dpcGVyLXNsaWRlJykuY3NzKG9mZnNldFByb3AsIChvZmZzZXQgKyBcInB4XCIpKTtcbiAgICAgIG9uUmVuZGVyZWQoKTtcbiAgICB9LFxuICAgIHJlbmRlclNsaWRlOiBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIGlmIChwYXJhbXMuY2FjaGUgJiYgc3dpcGVyLnZpcnR1YWwuY2FjaGVbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgJHNsaWRlRWwgPSBwYXJhbXMucmVuZGVyU2xpZGVcbiAgICAgICAgPyAkKHBhcmFtcy5yZW5kZXJTbGlkZS5jYWxsKHN3aXBlciwgc2xpZGUsIGluZGV4KSlcbiAgICAgICAgOiAkKChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIlxcXCIgZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCI+XCIgKyBzbGlkZSArIFwiPC9kaXY+XCIpKTtcbiAgICAgIGlmICghJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgeyAkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIGluZGV4KTsgfVxuICAgICAgaWYgKHBhcmFtcy5jYWNoZSkgeyBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDsgfVxuICAgICAgcmV0dXJuICRzbGlkZUVsO1xuICAgIH0sXG4gICAgYXBwZW5kU2xpZGU6IGZ1bmN0aW9uIGFwcGVuZFNsaWRlKHNsaWRlcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSkgeyBzd2lwZXIudmlydHVhbC5zbGlkZXMucHVzaChzbGlkZXNbaV0pOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5wdXNoKHNsaWRlcyk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gICAgfSxcbiAgICBwcmVwZW5kU2xpZGU6IGZ1bmN0aW9uIHByZXBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyAxO1xuICAgICAgdmFyIG51bWJlck9mTmV3U2xpZGVzID0gMTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaV0pIHsgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnVuc2hpZnQoc2xpZGVzW2ldKTsgfVxuICAgICAgICB9XG4gICAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICAgICAgICBudW1iZXJPZk5ld1NsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBzd2lwZXIudmlydHVhbC5jYWNoZTtcbiAgICAgICAgdmFyIG5ld0NhY2hlID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGNhY2hlKS5mb3JFYWNoKGZ1bmN0aW9uIChjYWNoZWRJbmRleCkge1xuICAgICAgICAgIG5ld0NhY2hlW3BhcnNlSW50KGNhY2hlZEluZGV4LCAxMCkgKyBudW1iZXJPZk5ld1NsaWRlc10gPSBjYWNoZVtjYWNoZWRJbmRleF07XG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IG5ld0NhY2hlO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlU2xpZGU6IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAndW5kZWZpbmVkJyB8fCBzbGlkZXNJbmRleGVzID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzSW5kZXhlcykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNsaWRlc0luZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXNbaV0sIDEpO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIudmlydHVhbC5jYWNoZVtzbGlkZXNJbmRleGVzW2ldXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXNbaV0gPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5zcGxpY2Uoc2xpZGVzSW5kZXhlcywgMSk7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXMgPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlQWxsU2xpZGVzOiBmdW5jdGlvbiByZW1vdmVBbGxTbGlkZXMoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcyA9IFtdO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IHt9O1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgMCk7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgVmlydHVhbCQxID0ge1xuICAgIG5hbWU6ICd2aXJ0dWFsJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHZpcnR1YWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNsaWRlczogW10sXG4gICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICByZW5kZXJTbGlkZTogbnVsbCxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWw6IG51bGwsXG4gICAgICAgIGFkZFNsaWRlc0JlZm9yZTogMCxcbiAgICAgICAgYWRkU2xpZGVzQWZ0ZXI6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgdmlydHVhbDoge1xuICAgICAgICAgIHVwZGF0ZTogVmlydHVhbC51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGFwcGVuZFNsaWRlOiBWaXJ0dWFsLmFwcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBwcmVwZW5kU2xpZGU6IFZpcnR1YWwucHJlcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZW1vdmVTbGlkZTogVmlydHVhbC5yZW1vdmVTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVtb3ZlQWxsU2xpZGVzOiBWaXJ0dWFsLnJlbW92ZUFsbFNsaWRlcy5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVuZGVyU2xpZGU6IFZpcnR1YWwucmVuZGVyU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNsaWRlczogc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnNsaWRlcyxcbiAgICAgICAgICBjYWNoZToge30sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcInZpcnR1YWxcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkID0ge1xuICAgIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyIGUgPSBldmVudDtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfSAvLyBqcXVlcnkgZml4XG4gICAgICB2YXIga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzOSkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDQwKSB8fCBrYyA9PT0gMzQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzNykgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDM4KSB8fCBrYyA9PT0gMzMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAmJiBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZSAmJiAoZG9jLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQub25seUluVmlld3BvcnQgJiYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSB8fCBrYyA9PT0gMzggfHwga2MgPT09IDQwKSkge1xuICAgICAgICB2YXIgaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3dpcGVyIHNob3VsZCBiZSBpbnNpZGUgb2YgdmlzaWJsZSBhcmVhIG9mIHdpbmRvd1xuICAgICAgICBpZiAoc3dpcGVyLiRlbC5wYXJlbnRzKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpKSkubGVuZ3RoID4gMCAmJiBzd2lwZXIuJGVsLnBhcmVudHMoKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbi5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xuICAgICAgICB2YXIgc3dpcGVyT2Zmc2V0ID0gc3dpcGVyLiRlbC5vZmZzZXQoKTtcbiAgICAgICAgaWYgKHJ0bCkgeyBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7IH1cbiAgICAgICAgdmFyIHN3aXBlckNvb3JkID0gW1xuICAgICAgICAgIFtzd2lwZXJPZmZzZXQubGVmdCwgc3dpcGVyT2Zmc2V0LnRvcF0sXG4gICAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXIud2lkdGgsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSBdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlckNvb3JkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHBvaW50ID0gc3dpcGVyQ29vcmRbaV07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8PSB3aW5kb3dXaWR0aFxuICAgICAgICAgICAgJiYgcG9pbnRbMV0gPj0gMCAmJiBwb2ludFsxXSA8PSB3aW5kb3dIZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaW5WaWV3KSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSkge1xuICAgICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKChrYyA9PT0gMzQgfHwga2MgPT09IDM5KSAmJiAhcnRsKSB8fCAoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmIHJ0bCkpIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmICgoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmICFydGwpIHx8ICgoa2MgPT09IDM0IHx8IGtjID09PSAzOSkgJiYgcnRsKSkgeyBzd2lwZXIuc2xpZGVQcmV2KCk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM0IHx8IGtjID09PSAzOCB8fCBrYyA9PT0gNDApIHtcbiAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtjID09PSAzNCB8fCBrYyA9PT0gNDApIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM4KSB7IHN3aXBlci5zbGlkZVByZXYoKTsgfVxuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ2tleVByZXNzJywga2MpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub24oJ2tleWRvd24nLCBzd2lwZXIua2V5Ym9hcmQuaGFuZGxlKTtcbiAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub2ZmKCdrZXlkb3duJywgc3dpcGVyLmtleWJvYXJkLmhhbmRsZSk7XG4gICAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkJDEgPSB7XG4gICAgbmFtZTogJ2tleWJvYXJkJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGtleWJvYXJkOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBvbmx5SW5WaWV3cG9ydDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZTogS2V5Ym9hcmQuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkaXNhYmxlOiBLZXlib2FyZC5kaXNhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBoYW5kbGU6IEtleWJvYXJkLmhhbmRsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgICB2YXIgZXZlbnROYW1lID0gJ29ud2hlZWwnO1xuICAgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2M7XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkXG4gICAgICAmJiBkb2MuaW1wbGVtZW50YXRpb25cbiAgICAgICYmIGRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlXG4gICAgICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgICAgJiYgZG9jLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgICAgaXNTdXBwb3J0ZWQgPSBkb2MuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgfVxuICB2YXIgTW91c2V3aGVlbCA9IHtcbiAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgZXZlbnQ6IChmdW5jdGlvbiBnZXRFdmVudCgpIHtcbiAgICAgIGlmICh3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgPiAtMSkgeyByZXR1cm4gJ0RPTU1vdXNlU2Nyb2xsJzsgfVxuICAgICAgcmV0dXJuIGlzRXZlbnRTdXBwb3J0ZWQoKSA/ICd3aGVlbCcgOiAnbW91c2V3aGVlbCc7XG4gICAgfSgpKSxcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShlKSB7XG4gICAgICAvLyBSZWFzb25hYmxlIGRlZmF1bHRzXG4gICAgICB2YXIgUElYRUxfU1RFUCA9IDEwO1xuICAgICAgdmFyIExJTkVfSEVJR0hUID0gNDA7XG4gICAgICB2YXIgUEFHRV9IRUlHSFQgPSA4MDA7XG5cbiAgICAgIHZhciBzWCA9IDA7XG4gICAgICB2YXIgc1kgPSAwOyAvLyBzcGluWCwgc3BpbllcbiAgICAgIHZhciBwWCA9IDA7XG4gICAgICB2YXIgcFkgPSAwOyAvLyBwaXhlbFgsIHBpeGVsWVxuXG4gICAgICAvLyBMZWdhY3lcbiAgICAgIGlmICgnZGV0YWlsJyBpbiBlKSB7XG4gICAgICAgIHNZID0gZS5kZXRhaWw7XG4gICAgICB9XG4gICAgICBpZiAoJ3doZWVsRGVsdGEnIGluIGUpIHtcbiAgICAgICAgc1kgPSAtZS53aGVlbERlbHRhIC8gMTIwO1xuICAgICAgfVxuICAgICAgaWYgKCd3aGVlbERlbHRhWScgaW4gZSkge1xuICAgICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgICAgfVxuICAgICAgaWYgKCd3aGVlbERlbHRhWCcgaW4gZSkge1xuICAgICAgICBzWCA9IC1lLndoZWVsRGVsdGFYIC8gMTIwO1xuICAgICAgfVxuXG4gICAgICAvLyBzaWRlIHNjcm9sbGluZyBvbiBGRiB3aXRoIERPTU1vdXNlU2Nyb2xsXG4gICAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgICBzWCA9IHNZO1xuICAgICAgICBzWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHBYID0gc1ggKiBQSVhFTF9TVEVQO1xuICAgICAgcFkgPSBzWSAqIFBJWEVMX1NURVA7XG5cbiAgICAgIGlmICgnZGVsdGFZJyBpbiBlKSB7XG4gICAgICAgIHBZID0gZS5kZWx0YVk7XG4gICAgICB9XG4gICAgICBpZiAoJ2RlbHRhWCcgaW4gZSkge1xuICAgICAgICBwWCA9IGUuZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHBYIHx8IHBZKSAmJiBlLmRlbHRhTW9kZSkge1xuICAgICAgICBpZiAoZS5kZWx0YU1vZGUgPT09IDEpIHsgLy8gZGVsdGEgaW4gTElORSB1bml0c1xuICAgICAgICAgIHBYICo9IExJTkVfSEVJR0hUO1xuICAgICAgICAgIHBZICo9IExJTkVfSEVJR0hUO1xuICAgICAgICB9IGVsc2UgeyAvLyBkZWx0YSBpbiBQQUdFIHVuaXRzXG4gICAgICAgICAgcFggKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcbiAgICAgIGlmIChwWCAmJiAhc1gpIHtcbiAgICAgICAgc1ggPSAocFggPCAxKSA/IC0xIDogMTtcbiAgICAgIH1cbiAgICAgIGlmIChwWSAmJiAhc1kpIHtcbiAgICAgICAgc1kgPSAocFkgPCAxKSA/IC0xIDogMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Bpblg6IHNYLFxuICAgICAgICBzcGluWTogc1ksXG4gICAgICAgIHBpeGVsWDogcFgsXG4gICAgICAgIHBpeGVsWTogcFksXG4gICAgICB9O1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIubW91c2VFbnRlcmVkID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgdmFyIGUgPSBldmVudDtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubW91c2V3aGVlbDtcblxuICAgICAgaWYgKCFzd2lwZXIubW91c2VFbnRlcmVkICYmICFwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHsgcmV0dXJuIHRydWU7IH1cblxuICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9IC8vIGpxdWVyeSBmaXhcbiAgICAgIHZhciBkZWx0YSA9IDA7XG4gICAgICB2YXIgcnRsRmFjdG9yID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC0xIDogMTtcblxuICAgICAgdmFyIGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgICAgaWYgKHBhcmFtcy5mb3JjZVRvQXhpcykge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgeyBkZWx0YSA9IGRhdGEucGl4ZWxYICogcnRsRmFjdG9yOyB9XG4gICAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGF0YS5waXhlbFkpID4gTWF0aC5hYnMoZGF0YS5waXhlbFgpKSB7IGRlbHRhID0gZGF0YS5waXhlbFk7IH1cbiAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbHRhID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAgIGlmIChwYXJhbXMuaW52ZXJ0KSB7IGRlbHRhID0gLWRlbHRhOyB9XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICBpZiAoVXRpbHMubm93KCkgLSBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA+IDYwKSB7XG4gICAgICAgICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgICAgICAgaWYgKCghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgICAgICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsJywgZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZWxlYXNlT25FZGdlcykgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoKCFzd2lwZXIuaXNCZWdpbm5pbmcgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlbGVhc2VPbkVkZ2VzKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdFNjcm9sbFRpbWUgPSAobmV3IHdpbi5EYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZyZWVtb2RlIG9yIHNjcm9sbENvbnRhaW5lcjpcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgKGRlbHRhICogcGFyYW1zLnNlbnNpdGl2aXR5KTtcbiAgICAgICAgdmFyIHdhc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICAgICAgdmFyIHdhc0VuZCA9IHN3aXBlci5pc0VuZDtcblxuICAgICAgICBpZiAocG9zaXRpb24gPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7IHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpOyB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHsgcG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7IH1cblxuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgICAgICBpZiAoKCF3YXNCZWdpbm5pbmcgJiYgc3dpcGVyLmlzQmVnaW5uaW5nKSB8fCAoIXdhc0VuZCAmJiBzd2lwZXIuaXNFbmQpKSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQpO1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIGUpO1xuXG4gICAgICAgIC8vIFN0b3AgYXV0b3BsYXlcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uKSB7IHN3aXBlci5hdXRvcGxheS5zdG9wKCk7IH1cbiAgICAgICAgLy8gUmV0dXJuIHBhZ2Ugc2Nyb2xsIG9uIGVkZ2UgcG9zaXRpb25zXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIHx8IHBvc2l0aW9uID09PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XG4gICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFNb3VzZXdoZWVsLmV2ZW50KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB2YXIgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkICE9PSAnY29udGFpbmVyJykge1xuICAgICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0Lm9uKCdtb3VzZWVudGVyJywgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICB0YXJnZXQub24oJ21vdXNlbGVhdmUnLCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICAgIHRhcmdldC5vbihNb3VzZXdoZWVsLmV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghTW91c2V3aGVlbC5ldmVudCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmICghc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHZhciB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQgIT09ICdjb250YWluZXInKSB7XG4gICAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCk7XG4gICAgICB9XG4gICAgICB0YXJnZXQub2ZmKE1vdXNld2hlZWwuZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICBzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBNb3VzZXdoZWVsJDEgPSB7XG4gICAgbmFtZTogJ21vdXNld2hlZWwnLFxuICAgIHBhcmFtczoge1xuICAgICAgbW91c2V3aGVlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmVsZWFzZU9uRWRnZXM6IGZhbHNlLFxuICAgICAgICBpbnZlcnQ6IGZhbHNlLFxuICAgICAgICBmb3JjZVRvQXhpczogZmFsc2UsXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxuICAgICAgICBldmVudHNUYXJnZWQ6ICdjb250YWluZXInLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIG1vdXNld2hlZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBlbmFibGU6IE1vdXNld2hlZWwuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkaXNhYmxlOiBNb3VzZXdoZWVsLmRpc2FibGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGhhbmRsZTogTW91c2V3aGVlbC5oYW5kbGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGhhbmRsZU1vdXNlRW50ZXI6IE1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlci5iaW5kKHN3aXBlciksXG4gICAgICAgICAgaGFuZGxlTW91c2VMZWF2ZTogTW91c2V3aGVlbC5oYW5kbGVNb3VzZUxlYXZlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5lbmFibGVkKSB7IHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZSgpOyB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSB7IHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTsgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBOYXZpZ2F0aW9uID0ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgLy8gVXBkYXRlIE5hdmlnYXRpb24gQnV0dG9uc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHJlZiA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgICAgdmFyICRuZXh0RWwgPSByZWYuJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgICAgJHByZXZFbC5hZGRDbGFzcyhwYXJhbXMuZGlzYWJsZWRDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJHByZXZFbC5yZW1vdmVDbGFzcyhwYXJhbXMuZGlzYWJsZWRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgJHByZXZFbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICAkbmV4dEVsLmFkZENsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkbmV4dEVsLnJlbW92ZUNsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICAkbmV4dEVsW3N3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblByZXZDbGljazogZnVuY3Rpb24gb25QcmV2Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfSxcbiAgICBvbk5leHRDbGljazogZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuICAgICAgaWYgKCEocGFyYW1zLm5leHRFbCB8fCBwYXJhbXMucHJldkVsKSkgeyByZXR1cm47IH1cblxuICAgICAgdmFyICRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbDtcbiAgICAgIGlmIChwYXJhbXMubmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSAkKHBhcmFtcy5uZXh0RWwpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50c1xuICAgICAgICAgICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgICYmICRuZXh0RWwubGVuZ3RoID4gMVxuICAgICAgICAgICYmIHN3aXBlci4kZWwuZmluZChwYXJhbXMubmV4dEVsKS5sZW5ndGggPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgJG5leHRFbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMubmV4dEVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5wcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9ICQocGFyYW1zLnByZXZFbCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICAgJiYgdHlwZW9mIHBhcmFtcy5wcmV2RWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgJiYgJHByZXZFbC5sZW5ndGggPiAxXG4gICAgICAgICAgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5wcmV2RWwpLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAkcHJldkVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5wcmV2RWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkbmV4dEVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkcHJldkVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgICAgICRuZXh0RWw6ICRuZXh0RWwsXG4gICAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgICAkcHJldkVsOiAkcHJldkVsLFxuICAgICAgICBwcmV2RWw6ICRwcmV2RWwgJiYgJHByZXZFbFswXSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgICAgdmFyICRuZXh0RWwgPSByZWYuJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCkge1xuICAgICAgICAkbmV4dEVsLm9mZignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgICAgICRuZXh0RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGgpIHtcbiAgICAgICAgJHByZXZFbC5vZmYoJ2NsaWNrJywgc3dpcGVyLm5hdmlnYXRpb24ub25QcmV2Q2xpY2spO1xuICAgICAgICAkcHJldkVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5kaXNhYmxlZENsYXNzKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHZhciBOYXZpZ2F0aW9uJDEgPSB7XG4gICAgbmFtZTogJ25hdmlnYXRpb24nLFxuICAgIHBhcmFtczoge1xuICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICBuZXh0RWw6IG51bGwsXG4gICAgICAgIHByZXZFbDogbnVsbCxcblxuICAgICAgICBoaWRlT25DbGljazogZmFsc2UsXG4gICAgICAgIGRpc2FibGVkQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWRpc2FibGVkJyxcbiAgICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWhpZGRlbicsXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1idXR0b24tbG9jaycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIGluaXQ6IE5hdmlnYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgdXBkYXRlOiBOYXZpZ2F0aW9uLnVwZGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogTmF2aWdhdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbk5leHRDbGljazogTmF2aWdhdGlvbi5vbk5leHRDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25QcmV2Q2xpY2s6IE5hdmlnYXRpb24ub25QcmV2Q2xpY2suYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdG9FZGdlOiBmdW5jdGlvbiB0b0VkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICB2YXIgcmVmID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgICAgIHZhciAkbmV4dEVsID0gcmVmLiRuZXh0RWw7XG4gICAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZU9uQ2xpY2tcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaXMoJHByZXZFbClcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaXMoJG5leHRFbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuO1xuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gJHByZXZFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uU2hvdycsIHN3aXBlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uSGlkZScsIHN3aXBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICAkbmV4dEVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICAgICAkcHJldkVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFBhZ2luYXRpb24gPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICAgIC8vIEN1cnJlbnQvVG90YWxcbiAgICAgIHZhciBjdXJyZW50O1xuICAgICAgdmFyIHRvdGFsID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPiBzbGlkZXNMZW5ndGggLSAxIC0gKHN3aXBlci5sb29wZWRTbGlkZXMgKiAyKSkge1xuICAgICAgICAgIGN1cnJlbnQgLT0gKHNsaWRlc0xlbmd0aCAtIChzd2lwZXIubG9vcGVkU2xpZGVzICogMikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50ID4gdG90YWwgLSAxKSB7IGN1cnJlbnQgLT0gdG90YWw7IH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPCAwICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvblR5cGUgIT09ICdidWxsZXRzJykgeyBjdXJyZW50ID0gdG90YWwgKyBjdXJyZW50OyB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjdXJyZW50ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggfHwgMDtcbiAgICAgIH1cbiAgICAgIC8vIFR5cGVzXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgYnVsbGV0cyA9IHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHM7XG4gICAgICAgIHZhciBmaXJzdEluZGV4O1xuICAgICAgICB2YXIgbGFzdEluZGV4O1xuICAgICAgICB2YXIgbWlkSW5kZXg7XG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplID0gYnVsbGV0cy5lcSgwKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnb3V0ZXJXaWR0aCcgOiAnb3V0ZXJIZWlnaHQnXSh0cnVlKTtcbiAgICAgICAgICAkZWwuY3NzKHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd3aWR0aCcgOiAnaGVpZ2h0JywgKChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplICogKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KSkgKyBcInB4XCIpKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ICs9IChjdXJyZW50IC0gc3dpcGVyLnByZXZpb3VzSW5kZXgpO1xuICAgICAgICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA+IChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMSkpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3RJbmRleCA9IGN1cnJlbnQgLSBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXg7XG4gICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleCArIChNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykgLSAxKTtcbiAgICAgICAgICBtaWRJbmRleCA9IChsYXN0SW5kZXggKyBmaXJzdEluZGV4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgYnVsbGV0cy5yZW1vdmVDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dCBcIiArIChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dC1uZXh0IFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2IFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2LXByZXYgXCIgKyAocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICBpZiAoJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBidWxsZXRzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBidWxsZXQpIHtcbiAgICAgICAgICAgIHZhciAkYnVsbGV0ID0gJChidWxsZXQpO1xuICAgICAgICAgICAgdmFyIGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGZpcnN0SW5kZXggJiYgYnVsbGV0SW5kZXggPD0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1tYWluXCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAkYnVsbGV0XG4gICAgICAgICAgICAgICAgICAucHJldigpXG4gICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItcHJldlwiKSlcbiAgICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2LXByZXZcIikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldFxuICAgICAgICAgICAgICAgICAgLm5leHQoKVxuICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW5leHRcIikpXG4gICAgICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dC1uZXh0XCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciAkYnVsbGV0ID0gYnVsbGV0cy5lcShjdXJyZW50KTtcbiAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgdmFyICRmaXJzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEoZmlyc3RJbmRleCk7XG4gICAgICAgICAgICB2YXIgJGxhc3REaXNwbGF5ZWRCdWxsZXQgPSBidWxsZXRzLmVxKGxhc3RJbmRleCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBidWxsZXRzLmVxKGkpLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0XG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXZcIikpXG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldlwiKSk7XG4gICAgICAgICAgICAkbGFzdERpc3BsYXllZEJ1bGxldFxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0XCIpKVxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0LW5leHRcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgdmFyIGR5bmFtaWNCdWxsZXRzTGVuZ3RoID0gTWF0aC5taW4oYnVsbGV0cy5sZW5ndGgsIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KTtcbiAgICAgICAgICB2YXIgYnVsbGV0c09mZnNldCA9ICgoKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiBkeW5hbWljQnVsbGV0c0xlbmd0aCkgLSAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSkpIC8gMikgLSAobWlkSW5kZXggKiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplKTtcbiAgICAgICAgICB2YXIgb2Zmc2V0UHJvcCA9IHJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICAgYnVsbGV0cy5jc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gb2Zmc2V0UHJvcCA6ICd0b3AnLCAoYnVsbGV0c09mZnNldCArIFwicHhcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgICAgJGVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5jdXJyZW50Q2xhc3MpKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25DdXJyZW50KGN1cnJlbnQgKyAxKSk7XG4gICAgICAgICRlbC5maW5kKChcIi5cIiArIChwYXJhbXMudG90YWxDbGFzcykpKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuICAgICAgICBpZiAocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzY2FsZSA9IChjdXJyZW50ICsgMSkgLyB0b3RhbDtcbiAgICAgICAgdmFyIHNjYWxlWCA9IDE7XG4gICAgICAgIHZhciBzY2FsZVkgPSAxO1xuICAgICAgICBpZiAocHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlWSA9IHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgICRlbC5maW5kKChcIi5cIiArIChwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpKSkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoXCIgKyBzY2FsZVggKyBcIikgc2NhbGVZKFwiICsgc2NhbGVZICsgXCIpXCIpKS50cmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAgICRlbC5odG1sKHBhcmFtcy5yZW5kZXJDdXN0b20oc3dpcGVyLCBjdXJyZW50ICsgMSwgdG90YWwpKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBzd2lwZXIsICRlbFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblVwZGF0ZScsIHN3aXBlciwgJGVsWzBdKTtcbiAgICAgIH1cbiAgICAgICRlbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAvLyBSZW5kZXIgQ29udGFpbmVyXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuICAgICAgdmFyIHBhZ2luYXRpb25IVE1MID0gJyc7XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJykge1xuICAgICAgICB2YXIgbnVtYmVyT2ZCdWxsZXRzID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1bGxldHM7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBcIjxcIiArIChwYXJhbXMuYnVsbGV0RWxlbWVudCkgKyBcIiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSArIFwiXFxcIj48L1wiICsgKHBhcmFtcy5idWxsZXRFbGVtZW50KSArIFwiPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgPSAkZWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSkpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IHBhcmFtcy5yZW5kZXJGcmFjdGlvbi5jYWxsKHN3aXBlciwgcGFyYW1zLmN1cnJlbnRDbGFzcywgcGFyYW1zLnRvdGFsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLmN1cnJlbnRDbGFzcykgKyBcIlxcXCI+PC9zcGFuPlwiXG4gICAgICAgICAgKyAnIC8gJ1xuICAgICAgICAgICsgXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLnRvdGFsQ2xhc3MpICsgXCJcXFwiPjwvc3Bhbj5cIjtcbiAgICAgICAgfVxuICAgICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhcikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlclByb2dyZXNzYmFyLmNhbGwoc3dpcGVyLCBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSArIFwiXFxcIj48L3NwYW4+XCI7XG4gICAgICAgIH1cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblJlbmRlcicsIHN3aXBlci5wYWdpbmF0aW9uLiRlbFswXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICAgaWYgKCFwYXJhbXMuZWwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIHZhciAkZWwgPSAkKHBhcmFtcy5lbCk7XG4gICAgICBpZiAoJGVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgaWYgKFxuICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICYmICRlbC5sZW5ndGggPiAxXG4gICAgICAgICYmIHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAkZWwuYWRkQ2xhc3MoKFwiXCIgKyAocGFyYW1zLm1vZGlmaWVyQ2xhc3MpICsgKHBhcmFtcy50eXBlKSArIFwiLWR5bmFtaWNcIikpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA8IDEpIHtcbiAgICAgICAgICBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInICYmIHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICAgJGVsLm9uKCdjbGljaycsIChcIi5cIiArIChwYXJhbXMuYnVsbGV0Q2xhc3MpKSwgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuaW5kZXgoKSAqIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgeyBpbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzOyB9XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYWdpbmF0aW9uLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogJGVsWzBdLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG5cbiAgICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMuaGlkZGVuQ2xhc3MpO1xuICAgICAgJGVsLnJlbW92ZUNsYXNzKHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUpO1xuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMpIHsgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5yZW1vdmVDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpOyB9XG4gICAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgICAkZWwub2ZmKCdjbGljaycsIChcIi5cIiArIChwYXJhbXMuYnVsbGV0Q2xhc3MpKSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgUGFnaW5hdGlvbiQxID0ge1xuICAgIG5hbWU6ICdwYWdpbmF0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgZWw6IG51bGwsXG4gICAgICAgIGJ1bGxldEVsZW1lbnQ6ICdzcGFuJyxcbiAgICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICByZW5kZXJCdWxsZXQ6IG51bGwsXG4gICAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyQ3VzdG9tOiBudWxsLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2J1bGxldHMnLCAvLyAnYnVsbGV0cycgb3IgJ3Byb2dyZXNzYmFyJyBvciAnZnJhY3Rpb24nIG9yICdjdXN0b20nXG4gICAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSxcbiAgICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgICBmb3JtYXRGcmFjdGlvbkN1cnJlbnQ6IGZ1bmN0aW9uIChudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSxcbiAgICAgICAgZm9ybWF0RnJhY3Rpb25Ub3RhbDogZnVuY3Rpb24gKG51bWJlcikgeyByZXR1cm4gbnVtYmVyOyB9LFxuICAgICAgICBidWxsZXRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCcsXG4gICAgICAgIGJ1bGxldEFjdGl2ZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZScsXG4gICAgICAgIG1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi0nLCAvLyBORVdcbiAgICAgICAgY3VycmVudENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY3VycmVudCcsXG4gICAgICAgIHRvdGFsQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi10b3RhbCcsXG4gICAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24taGlkZGVuJyxcbiAgICAgICAgcHJvZ3Jlc3NiYXJGaWxsQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxsJyxcbiAgICAgICAgcHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItb3Bwb3NpdGUnLFxuICAgICAgICBjbGlja2FibGVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWNsaWNrYWJsZScsIC8vIE5FV1xuICAgICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1sb2NrJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgaW5pdDogUGFnaW5hdGlvbi5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZW5kZXI6IFBhZ2luYXRpb24ucmVuZGVyLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICB1cGRhdGU6IFBhZ2luYXRpb24udXBkYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBQYWdpbmF0aW9uLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleDogMCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5pbml0KCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBhY3RpdmVJbmRleENoYW5nZTogZnVuY3Rpb24gYWN0aXZlSW5kZXhDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbmFwSW5kZXhDaGFuZ2U6IGZ1bmN0aW9uIHNuYXBJbmRleENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZXNMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlc0xlbmd0aENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNuYXBHcmlkTGVuZ3RoQ2hhbmdlOiBmdW5jdGlvbiBzbmFwR3JpZExlbmd0aENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24ucmVuZGVyKCk7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVsXG4gICAgICAgICAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGVPbkNsaWNrXG4gICAgICAgICAgJiYgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA+IDBcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBzd2lwZXIucGFnaW5hdGlvbi4kZWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uU2hvdycsIHN3aXBlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uSGlkZScsIHN3aXBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC50b2dnbGVDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgICB2YXIgZHJhZ1NpemUgPSBzY3JvbGxiYXIuZHJhZ1NpemU7XG4gICAgICB2YXIgdHJhY2tTaXplID0gc2Nyb2xsYmFyLnRyYWNrU2l6ZTtcbiAgICAgIHZhciAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcblxuICAgICAgdmFyIG5ld1NpemUgPSBkcmFnU2l6ZTtcbiAgICAgIHZhciBuZXdQb3MgPSAodHJhY2tTaXplIC0gZHJhZ1NpemUpICogcHJvZ3Jlc3M7XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIG5ld1BvcyA9IC1uZXdQb3M7XG4gICAgICAgIGlmIChuZXdQb3MgPiAwKSB7XG4gICAgICAgICAgbmV3U2l6ZSA9IGRyYWdTaXplIC0gbmV3UG9zO1xuICAgICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoLW5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSArIG5ld1BvcztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdQb3MgPCAwKSB7XG4gICAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSArIG5ld1BvcztcbiAgICAgICAgbmV3UG9zID0gMDtcbiAgICAgIH0gZWxzZSBpZiAobmV3UG9zICsgZHJhZ1NpemUgPiB0cmFja1NpemUpIHtcbiAgICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSAtIG5ld1BvcztcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKFN1cHBvcnQudHJhbnNmb3JtczNkKSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyBuZXdQb3MgKyBcInB4LCAwLCAwKVwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlWChcIiArIG5ld1BvcyArIFwicHgpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChTdXBwb3J0LnRyYW5zZm9ybXMzZCkge1xuICAgICAgICAgICRkcmFnRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyBuZXdQb3MgKyBcInB4LCAwKVwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlWShcIiArIG5ld1BvcyArIFwicHgpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IG5ld1NpemUgKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIudGltZW91dCk7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICRlbC50cmFuc2l0aW9uKDQwMCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuICAgICAgc3dpcGVyLnNjcm9sbGJhci4kZHJhZ0VsLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIH0sXG4gICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gdXBkYXRlU2l6ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG5cbiAgICAgICRkcmFnRWxbMF0uc3R5bGUud2lkdGggPSAnJztcbiAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICB2YXIgdHJhY2tTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJGVsWzBdLm9mZnNldFdpZHRoIDogJGVsWzBdLm9mZnNldEhlaWdodDtcblxuICAgICAgdmFyIGRpdmlkZXIgPSBzd2lwZXIuc2l6ZSAvIHN3aXBlci52aXJ0dWFsU2l6ZTtcbiAgICAgIHZhciBtb3ZlRGl2aWRlciA9IGRpdmlkZXIgKiAodHJhY2tTaXplIC8gc3dpcGVyLnNpemUpO1xuICAgICAgdmFyIGRyYWdTaXplO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplID09PSAnYXV0bycpIHtcbiAgICAgICAgZHJhZ1NpemUgPSB0cmFja1NpemUgKiBkaXZpZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ1NpemUgPSBwYXJzZUludChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnU2l6ZSwgMTApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICRkcmFnRWxbMF0uc3R5bGUud2lkdGggPSBkcmFnU2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gZHJhZ1NpemUgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXZpZGVyID49IDEpIHtcbiAgICAgICAgJGVsWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmhpZGUpIHtcbiAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfVxuICAgICAgVXRpbHMuZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICB0cmFja1NpemU6IHRyYWNrU2l6ZSxcbiAgICAgICAgZGl2aWRlcjogZGl2aWRlcixcbiAgICAgICAgbW92ZURpdmlkZXI6IG1vdmVEaXZpZGVyLFxuICAgICAgICBkcmFnU2l6ZTogZHJhZ1NpemUsXG4gICAgICB9KTtcbiAgICAgIHNjcm9sbGJhci4kZWxbc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgIH0sXG4gICAgZ2V0UG9pbnRlclBvc2l0aW9uOiBmdW5jdGlvbiBnZXRQb2ludGVyUG9zaXRpb24oZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHJldHVybiAoKGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PT0gJ3RvdWNobW92ZScpID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWCB8fCBlLmNsaWVudFgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgoZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJykgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZIHx8IGUuY2xpZW50WSk7XG4gICAgfSxcbiAgICBzZXREcmFnUG9zaXRpb246IGZ1bmN0aW9uIHNldERyYWdQb3NpdGlvbihlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciBkcmFnU2l6ZSA9IHNjcm9sbGJhci5kcmFnU2l6ZTtcbiAgICAgIHZhciB0cmFja1NpemUgPSBzY3JvbGxiYXIudHJhY2tTaXplO1xuICAgICAgdmFyIGRyYWdTdGFydFBvcyA9IHNjcm9sbGJhci5kcmFnU3RhcnRQb3M7XG5cbiAgICAgIHZhciBwb3NpdGlvblJhdGlvO1xuICAgICAgcG9zaXRpb25SYXRpbyA9ICgoc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSkgLSAkZWwub2Zmc2V0KClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCddXG4gICAgICAgIC0gKGRyYWdTdGFydFBvcyAhPT0gbnVsbCA/IGRyYWdTdGFydFBvcyA6IGRyYWdTaXplIC8gMikpIC8gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKTtcbiAgICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHBvc2l0aW9uUmF0aW8gPSAxIC0gcG9zaXRpb25SYXRpbztcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgKChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpICogcG9zaXRpb25SYXRpbyk7XG5cbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhwb3NpdGlvbik7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHBvc2l0aW9uKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9LFxuICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiBvbkRyYWdTdGFydChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbDtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZHJhZ1N0YXJ0UG9zID0gKGUudGFyZ2V0ID09PSAkZHJhZ0VsWzBdIHx8IGUudGFyZ2V0ID09PSAkZHJhZ0VsKVxuICAgICAgICA/IHNjcm9sbGJhci5nZXRQb2ludGVyUG9zaXRpb24oZSkgLSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ10gOiBudWxsO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG5cbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0KTtcblxuICAgICAgJGVsLnRyYW5zaXRpb24oMCk7XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgJGVsLmNzcygnb3BhY2l0eScsIDEpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdTdGFydCcsIGUpO1xuICAgIH0sXG4gICAgb25EcmFnTW92ZTogZnVuY3Rpb24gb25EcmFnTW92ZShlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbDtcblxuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgZWxzZSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfVxuICAgICAgc2Nyb2xsYmFyLnNldERyYWdQb3NpdGlvbihlKTtcbiAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbigwKTtcbiAgICAgICRlbC50cmFuc2l0aW9uKDApO1xuICAgICAgJGRyYWdFbC50cmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdNb3ZlJywgZSk7XG4gICAgfSxcbiAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uIG9uRHJhZ0VuZChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcblxuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0ID0gVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAkZWwudHJhbnNpdGlvbig0MDApO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnRW5kJywgZSk7XG4gICAgICBpZiAocGFyYW1zLnNuYXBPblJlbGVhc2UpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmFibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGVuYWJsZURyYWdnYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHRvdWNoRXZlbnRzVG91Y2ggPSBzd2lwZXIudG91Y2hFdmVudHNUb3VjaDtcbiAgICAgIHZhciB0b3VjaEV2ZW50c0Rlc2t0b3AgPSBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciB0YXJnZXQgPSAkZWxbMF07XG4gICAgICB2YXIgYWN0aXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgaWYgKCFTdXBwb3J0LnRvdWNoKSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5lbmQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlRHJhZ2dhYmxlOiBmdW5jdGlvbiBkaXNhYmxlRHJhZ2dhYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgdG91Y2hFdmVudHNUb3VjaCA9IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoO1xuICAgICAgdmFyIHRvdWNoRXZlbnRzRGVza3RvcCA9IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICBpZiAoIVN1cHBvcnQudG91Y2gpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciAkc3dpcGVyRWwgPSBzd2lwZXIuJGVsO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuXG4gICAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgJGVsLmxlbmd0aCA+IDEgJiYgJHN3aXBlckVsLmZpbmQocGFyYW1zLmVsKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgJGVsID0gJHN3aXBlckVsLmZpbmQocGFyYW1zLmVsKTtcbiAgICAgIH1cblxuICAgICAgdmFyICRkcmFnRWwgPSAkZWwuZmluZCgoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ0NsYXNzKSkpO1xuICAgICAgaWYgKCRkcmFnRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICRkcmFnRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdDbGFzcykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgJGVsLmFwcGVuZCgkZHJhZ0VsKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6ICRlbFswXSxcbiAgICAgICAgJGRyYWdFbDogJGRyYWdFbCxcbiAgICAgICAgZHJhZ0VsOiAkZHJhZ0VsWzBdLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJhbXMuZHJhZ2dhYmxlKSB7XG4gICAgICAgIHNjcm9sbGJhci5lbmFibGVEcmFnZ2FibGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGlzYWJsZURyYWdnYWJsZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciQxID0ge1xuICAgIG5hbWU6ICdzY3JvbGxiYXInLFxuICAgIHBhcmFtczoge1xuICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgIGVsOiBudWxsLFxuICAgICAgICBkcmFnU2l6ZTogJ2F1dG8nLFxuICAgICAgICBoaWRlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgc25hcE9uUmVsZWFzZTogdHJ1ZSxcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLXNjcm9sbGJhci1sb2NrJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnc3dpcGVyLXNjcm9sbGJhci1kcmFnJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICBpbml0OiBTY3JvbGxiYXIuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogU2Nyb2xsYmFyLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHVwZGF0ZVNpemU6IFNjcm9sbGJhci51cGRhdGVTaXplLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IFNjcm9sbGJhci5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zaXRpb246IFNjcm9sbGJhci5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBlbmFibGVEcmFnZ2FibGU6IFNjcm9sbGJhci5lbmFibGVEcmFnZ2FibGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGRpc2FibGVEcmFnZ2FibGU6IFNjcm9sbGJhci5kaXNhYmxlRHJhZ2dhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXREcmFnUG9zaXRpb246IFNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICAgIGdldFBvaW50ZXJQb3NpdGlvbjogU2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25EcmFnU3RhcnQ6IFNjcm9sbGJhci5vbkRyYWdTdGFydC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25EcmFnTW92ZTogU2Nyb2xsYmFyLm9uRHJhZ01vdmUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uRHJhZ0VuZDogU2Nyb2xsYmFyLm9uRHJhZ0VuZC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgICAgIGRyYWdUaW1lb3V0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuaW5pdCgpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJVcGRhdGU6IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBQYXJhbGxheCA9IHtcbiAgICBzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIHNldFRyYW5zZm9ybShlbCwgcHJvZ3Jlc3MpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGw7XG5cbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgIHZhciBydGxGYWN0b3IgPSBydGwgPyAtMSA6IDE7XG5cbiAgICAgIHZhciBwID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4JykgfHwgJzAnO1xuICAgICAgdmFyIHggPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteCcpO1xuICAgICAgdmFyIHkgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteScpO1xuICAgICAgdmFyIHNjYWxlID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlJyk7XG4gICAgICB2YXIgb3BhY2l0eSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG5cbiAgICAgIGlmICh4IHx8IHkpIHtcbiAgICAgICAgeCA9IHggfHwgJzAnO1xuICAgICAgICB5ID0geSB8fCAnMCc7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB4ID0gcDtcbiAgICAgICAgeSA9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkgPSBwO1xuICAgICAgICB4ID0gJzAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHgpLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHggPSAocGFyc2VJbnQoeCwgMTApICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gKHggKiBwcm9ncmVzcyAqIHJ0bEZhY3RvcikgKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBpZiAoKHkpLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHkgPSAocGFyc2VJbnQoeSwgMTApICogcHJvZ3Jlc3MpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5ID0gKHkgKiBwcm9ncmVzcykgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3BhY2l0eSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudE9wYWNpdHkgPSBvcGFjaXR5IC0gKChvcGFjaXR5IC0gMSkgKiAoMSAtIE1hdGguYWJzKHByb2dyZXNzKSkpO1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IGN1cnJlbnRPcGFjaXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBzY2FsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2NhbGUgPT09IG51bGwpIHtcbiAgICAgICAgJGVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweClcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTY2FsZSA9IHNjYWxlIC0gKChzY2FsZSAtIDEpICogKDEgLSBNYXRoLmFicyhwcm9ncmVzcykpKTtcbiAgICAgICAgJGVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweCkgc2NhbGUoXCIgKyBjdXJyZW50U2NhbGUgKyBcIilcIikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgICAkZWwuY2hpbGRyZW4oJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKVxuICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zZm9ybShlbCwgcHJvZ3Jlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgIHZhciBzbGlkZVByb2dyZXNzID0gc2xpZGVFbC5wcm9ncmVzcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgICAgc2xpZGVQcm9ncmVzcyArPSBNYXRoLmNlaWwoc2xpZGVJbmRleCAvIDIpIC0gKHByb2dyZXNzICogKHNuYXBHcmlkLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBzbGlkZVByb2dyZXNzID0gTWF0aC5taW4oTWF0aC5tYXgoc2xpZGVQcm9ncmVzcywgLTEpLCAxKTtcbiAgICAgICAgJChzbGlkZUVsKS5maW5kKCdbZGF0YS1zd2lwZXItcGFyYWxsYXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC15XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGVdJylcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNmb3JtKGVsLCBzbGlkZVByb2dyZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgaWYgKCBkdXJhdGlvbiA9PT0gdm9pZCAwICkgZHVyYXRpb24gPSB0aGlzLnBhcmFtcy5zcGVlZDtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgICRlbC5maW5kKCdbZGF0YS1zd2lwZXItcGFyYWxsYXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC15XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGVdJylcbiAgICAgICAgLmVhY2goZnVuY3Rpb24gKGluZGV4LCBwYXJhbGxheEVsKSB7XG4gICAgICAgICAgdmFyICRwYXJhbGxheEVsID0gJChwYXJhbGxheEVsKTtcbiAgICAgICAgICB2YXIgcGFyYWxsYXhEdXJhdGlvbiA9IHBhcnNlSW50KCRwYXJhbGxheEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LWR1cmF0aW9uJyksIDEwKSB8fCBkdXJhdGlvbjtcbiAgICAgICAgICBpZiAoZHVyYXRpb24gPT09IDApIHsgcGFyYWxsYXhEdXJhdGlvbiA9IDA7IH1cbiAgICAgICAgICAkcGFyYWxsYXhFbC50cmFuc2l0aW9uKHBhcmFsbGF4RHVyYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBQYXJhbGxheCQxID0ge1xuICAgIG5hbWU6ICdwYXJhbGxheCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBwYXJhbGxheDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBwYXJhbGxheDoge1xuICAgICAgICAgIHNldFRyYW5zZm9ybTogUGFyYWxsYXguc2V0VHJhbnNmb3JtLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IFBhcmFsbGF4LnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogUGFyYWxsYXguc2V0VHJhbnNpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgWm9vbSA9IHtcbiAgICAvLyBDYWxjIFNjYWxlIEZyb20gTXVsdGktdG91Y2hlc1xuICAgIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXM6IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSB7IHJldHVybiAxOyB9XG4gICAgICB2YXIgeDEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICB2YXIgeTEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB2YXIgeDIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVg7XG4gICAgICB2YXIgeTIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVk7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKE1hdGgucG93KCAoeDIgLSB4MSksIDIgKSkgKyAoTWF0aC5wb3coICh5MiAtIHkxKSwgMiApKSk7XG4gICAgICByZXR1cm4gZGlzdGFuY2U7XG4gICAgfSxcbiAgICAvLyBFdmVudHNcbiAgICBvbkdlc3R1cmVTdGFydDogZnVuY3Rpb24gb25HZXN0dXJlU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuICAgICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIGlmIChlLnR5cGUgIT09ICd0b3VjaHN0YXJ0JyB8fCAoZS50eXBlID09PSAndG91Y2hzdGFydCcgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVUb3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgZ2VzdHVyZS5zY2FsZVN0YXJ0ID0gWm9vbS5nZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKGUpO1xuICAgICAgfVxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsIHx8ICFnZXN0dXJlLiRzbGlkZUVsLmxlbmd0aCkge1xuICAgICAgICBnZXN0dXJlLiRzbGlkZUVsID0gJChlLnRhcmdldCkuY2xvc2VzdCgnLnN3aXBlci1zbGlkZScpO1xuICAgICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGggPT09IDApIHsgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTsgfVxuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzJyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoKFwiLlwiICsgKHBhcmFtcy5jb250YWluZXJDbGFzcykpKTtcbiAgICAgICAgZ2VzdHVyZS5tYXhSYXRpbyA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICAgIGlmIChnZXN0dXJlLiRpbWFnZVdyYXBFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLnpvb20uaXNTY2FsaW5nID0gdHJ1ZTtcbiAgICB9LFxuICAgIG9uR2VzdHVyZUNoYW5nZTogZnVuY3Rpb24gb25HZXN0dXJlQ2hhbmdlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIGlmICghU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgICBpZiAoZS50eXBlICE9PSAndG91Y2htb3ZlJyB8fCAoZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gdHJ1ZTtcbiAgICAgICAgZ2VzdHVyZS5zY2FsZU1vdmUgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgICB6b29tLnNjYWxlID0gZS5zY2FsZSAqIHpvb20uY3VycmVudFNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IChnZXN0dXJlLnNjYWxlTW92ZSAvIGdlc3R1cmUuc2NhbGVTdGFydCkgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmICh6b29tLnNjYWxlID4gZ2VzdHVyZS5tYXhSYXRpbykge1xuICAgICAgICB6b29tLnNjYWxlID0gKGdlc3R1cmUubWF4UmF0aW8gLSAxKSArIChNYXRoLnBvdyggKCh6b29tLnNjYWxlIC0gZ2VzdHVyZS5tYXhSYXRpbykgKyAxKSwgMC41ICkpO1xuICAgICAgfVxuICAgICAgaWYgKHpvb20uc2NhbGUgPCBwYXJhbXMubWluUmF0aW8pIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IChwYXJhbXMubWluUmF0aW8gKyAxKSAtIChNYXRoLnBvdyggKChwYXJhbXMubWluUmF0aW8gLSB6b29tLnNjYWxlKSArIDEpLCAwLjUgKSk7XG4gICAgICB9XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyAoem9vbS5zY2FsZSkgKyBcIilcIikpO1xuICAgIH0sXG4gICAgb25HZXN0dXJlRW5kOiBmdW5jdGlvbiBvbkdlc3R1cmVFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIGlmICghem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgfHwgIXpvb20uZmFrZUdlc3R1cmVNb3ZlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS50eXBlICE9PSAndG91Y2hlbmQnIHx8IChlLnR5cGUgPT09ICd0b3VjaGVuZCcgJiYgZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCAyICYmICFEZXZpY2UuYW5kcm9pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICB6b29tLnNjYWxlID0gTWF0aC5tYXgoTWF0aC5taW4oem9vbS5zY2FsZSwgZ2VzdHVyZS5tYXhSYXRpbyksIHBhcmFtcy5taW5SYXRpbyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArICh6b29tLnNjYWxlKSArIFwiKVwiKSk7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IHpvb20uc2NhbGU7XG4gICAgICB6b29tLmlzU2NhbGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHpvb20uc2NhbGUgPT09IDEpIHsgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDsgfVxuICAgIH0sXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICB2YXIgaW1hZ2UgPSB6b29tLmltYWdlO1xuICAgICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgaWYgKGltYWdlLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChEZXZpY2UuYW5kcm9pZCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBpbWFnZS50b3VjaGVzU3RhcnQueCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNTdGFydC55ID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIH0sXG4gICAgb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgdmFyIGltYWdlID0gem9vbS5pbWFnZTtcbiAgICAgIHZhciB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWdlc3R1cmUuJHNsaWRlRWwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmICghaW1hZ2UuaXNNb3ZlZCkge1xuICAgICAgICBpbWFnZS53aWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlLmhlaWdodCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBpbWFnZS5zdGFydFggPSBVdGlscy5nZXRUcmFuc2xhdGUoZ2VzdHVyZS4kaW1hZ2VXcmFwRWxbMF0sICd4JykgfHwgMDtcbiAgICAgICAgaW1hZ2Uuc3RhcnRZID0gVXRpbHMuZ2V0VHJhbnNsYXRlKGdlc3R1cmUuJGltYWdlV3JhcEVsWzBdLCAneScpIHx8IDA7XG4gICAgICAgIGdlc3R1cmUuc2xpZGVXaWR0aCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGdlc3R1cmUuc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigwKTtcbiAgICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgICBpbWFnZS5zdGFydFggPSAtaW1hZ2Uuc3RhcnRYO1xuICAgICAgICAgIGltYWdlLnN0YXJ0WSA9IC1pbWFnZS5zdGFydFk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERlZmluZSBpZiB3ZSBuZWVkIGltYWdlIGRyYWdcbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuXG4gICAgICBpZiAoc2NhbGVkV2lkdGggPCBnZXN0dXJlLnNsaWRlV2lkdGggJiYgc2NhbGVkSGVpZ2h0IDwgZ2VzdHVyZS5zbGlkZUhlaWdodCkgeyByZXR1cm47IH1cblxuICAgICAgaW1hZ2UubWluWCA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgICAgaW1hZ2UubWluWSA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG5cbiAgICAgIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIDogZS5wYWdlWTtcblxuICAgICAgaWYgKCFpbWFnZS5pc01vdmVkICYmICF6b29tLmlzU2NhbGluZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLmlzSG9yaXpvbnRhbCgpXG4gICAgICAgICAgJiYgKFxuICAgICAgICAgICAgKE1hdGguZmxvb3IoaW1hZ2UubWluWCkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRYKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC54IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LngpXG4gICAgICAgICAgICB8fCAoTWF0aC5mbG9vcihpbWFnZS5tYXhYKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPiBpbWFnZS50b3VjaGVzU3RhcnQueClcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBpZiAoXG4gICAgICAgICAgIXN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgICYmIChcbiAgICAgICAgICAgIChNYXRoLmZsb29yKGltYWdlLm1pblkpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WSkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA8IGltYWdlLnRvdWNoZXNTdGFydC55KVxuICAgICAgICAgICAgfHwgKE1hdGguZmxvb3IoaW1hZ2UubWF4WSkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRZKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC55ID4gaW1hZ2UudG91Y2hlc1N0YXJ0LnkpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGltYWdlLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIGltYWdlLnRvdWNoZXNTdGFydC54KSArIGltYWdlLnN0YXJ0WDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gKGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSBpbWFnZS50b3VjaGVzU3RhcnQueSkgKyBpbWFnZS5zdGFydFk7XG5cbiAgICAgIGlmIChpbWFnZS5jdXJyZW50WCA8IGltYWdlLm1pblgpIHtcbiAgICAgICAgaW1hZ2UuY3VycmVudFggPSAoaW1hZ2UubWluWCArIDEpIC0gKE1hdGgucG93KCAoKGltYWdlLm1pblggLSBpbWFnZS5jdXJyZW50WCkgKyAxKSwgMC44ICkpO1xuICAgICAgfVxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYID4gaW1hZ2UubWF4WCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IChpbWFnZS5tYXhYIC0gMSkgKyAoTWF0aC5wb3coICgoaW1hZ2UuY3VycmVudFggLSBpbWFnZS5tYXhYKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZS5jdXJyZW50WSA8IGltYWdlLm1pblkpIHtcbiAgICAgICAgaW1hZ2UuY3VycmVudFkgPSAoaW1hZ2UubWluWSArIDEpIC0gKE1hdGgucG93KCAoKGltYWdlLm1pblkgLSBpbWFnZS5jdXJyZW50WSkgKyAxKSwgMC44ICkpO1xuICAgICAgfVxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZID4gaW1hZ2UubWF4WSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IChpbWFnZS5tYXhZIC0gMSkgKyAoTWF0aC5wb3coICgoaW1hZ2UuY3VycmVudFkgLSBpbWFnZS5tYXhZKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZlbG9jaXR5XG4gICAgICBpZiAoIXZlbG9jaXR5LnByZXZQb3NpdGlvblgpIHsgdmVsb2NpdHkucHJldlBvc2l0aW9uWCA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lng7IH1cbiAgICAgIGlmICghdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgeyB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTsgfVxuICAgICAgaWYgKCF2ZWxvY2l0eS5wcmV2VGltZSkgeyB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7IH1cbiAgICAgIHZlbG9jaXR5LnggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgICAgdmVsb2NpdHkueSA9IChpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIDwgMikgeyB2ZWxvY2l0eS54ID0gMDsgfVxuICAgICAgaWYgKE1hdGguYWJzKGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSA8IDIpIHsgdmVsb2NpdHkueSA9IDA7IH1cbiAgICAgIHZlbG9jaXR5LnByZXZQb3NpdGlvblggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54O1xuICAgICAgdmVsb2NpdHkucHJldlBvc2l0aW9uWSA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lnk7XG4gICAgICB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIChpbWFnZS5jdXJyZW50WCkgKyBcInB4LCBcIiArIChpbWFnZS5jdXJyZW50WSkgKyBcInB4LDApXCIpKTtcbiAgICB9LFxuICAgIG9uVG91Y2hFbmQ6IGZ1bmN0aW9uIG9uVG91Y2hFbmQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIHZhciBpbWFnZSA9IHpvb20uaW1hZ2U7XG4gICAgICB2YXIgdmVsb2NpdHkgPSB6b29tLnZlbG9jaXR5O1xuICAgICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpbWFnZS5pc01vdmVkID0gZmFsc2U7XG4gICAgICB2YXIgbW9tZW50dW1EdXJhdGlvblggPSAzMDA7XG4gICAgICB2YXIgbW9tZW50dW1EdXJhdGlvblkgPSAzMDA7XG4gICAgICB2YXIgbW9tZW50dW1EaXN0YW5jZVggPSB2ZWxvY2l0eS54ICogbW9tZW50dW1EdXJhdGlvblg7XG4gICAgICB2YXIgbmV3UG9zaXRpb25YID0gaW1hZ2UuY3VycmVudFggKyBtb21lbnR1bURpc3RhbmNlWDtcbiAgICAgIHZhciBtb21lbnR1bURpc3RhbmNlWSA9IHZlbG9jaXR5LnkgKiBtb21lbnR1bUR1cmF0aW9uWTtcbiAgICAgIHZhciBuZXdQb3NpdGlvblkgPSBpbWFnZS5jdXJyZW50WSArIG1vbWVudHVtRGlzdGFuY2VZO1xuXG4gICAgICAvLyBGaXggZHVyYXRpb25cbiAgICAgIGlmICh2ZWxvY2l0eS54ICE9PSAwKSB7IG1vbWVudHVtRHVyYXRpb25YID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uWCAtIGltYWdlLmN1cnJlbnRYKSAvIHZlbG9jaXR5LngpOyB9XG4gICAgICBpZiAodmVsb2NpdHkueSAhPT0gMCkgeyBtb21lbnR1bUR1cmF0aW9uWSA9IE1hdGguYWJzKChuZXdQb3NpdGlvblkgLSBpbWFnZS5jdXJyZW50WSkgLyB2ZWxvY2l0eS55KTsgfVxuICAgICAgdmFyIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLm1heChtb21lbnR1bUR1cmF0aW9uWCwgbW9tZW50dW1EdXJhdGlvblkpO1xuXG4gICAgICBpbWFnZS5jdXJyZW50WCA9IG5ld1Bvc2l0aW9uWDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gbmV3UG9zaXRpb25ZO1xuXG4gICAgICAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG4gICAgICB2YXIgc2NhbGVkV2lkdGggPSBpbWFnZS53aWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICB2YXIgc2NhbGVkSGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICAgIGltYWdlLm1pblggPSBNYXRoLm1pbigoKGdlc3R1cmUuc2xpZGVXaWR0aCAvIDIpIC0gKHNjYWxlZFdpZHRoIC8gMikpLCAwKTtcbiAgICAgIGltYWdlLm1heFggPSAtaW1hZ2UubWluWDtcbiAgICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbigoKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyKSAtIChzY2FsZWRIZWlnaHQgLyAyKSksIDApO1xuICAgICAgaW1hZ2UubWF4WSA9IC1pbWFnZS5taW5ZO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WCwgaW1hZ2UubWF4WCksIGltYWdlLm1pblgpO1xuICAgICAgaW1hZ2UuY3VycmVudFkgPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WSwgaW1hZ2UubWF4WSksIGltYWdlLm1pblkpO1xuXG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIChpbWFnZS5jdXJyZW50WCkgKyBcInB4LCBcIiArIChpbWFnZS5jdXJyZW50WSkgKyBcInB4LDApXCIpKTtcbiAgICB9LFxuICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbCAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gc3dpcGVyLmFjdGl2ZUluZGV4KSB7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoMSknKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcblxuICAgICAgICB6b29tLnNjYWxlID0gMTtcbiAgICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSAxO1xuXG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gVG9nZ2xlIFpvb21cbiAgICB0b2dnbGU6IGZ1bmN0aW9uIHRvZ2dsZShlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG5cbiAgICAgIGlmICh6b29tLnNjYWxlICYmIHpvb20uc2NhbGUgIT09IDEpIHtcbiAgICAgICAgLy8gWm9vbSBPdXRcbiAgICAgICAgem9vbS5vdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFpvb20gSW5cbiAgICAgICAgem9vbS5pbihlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluOiBmdW5jdGlvbiBpbiQxKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgdmFyIGltYWdlID0gem9vbS5pbWFnZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuY2xpY2tlZFNsaWRlID8gJChzd2lwZXIuY2xpY2tlZFNsaWRlKSA6IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IGdlc3R1cmUuJHNsaWRlRWwuZmluZCgnaW1nLCBzdmcsIGNhbnZhcycpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KChcIi5cIiArIChwYXJhbXMuY29udGFpbmVyQ2xhc3MpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwuYWRkQ2xhc3MoKFwiXCIgKyAocGFyYW1zLnpvb21lZFNsaWRlQ2xhc3MpKSk7XG5cbiAgICAgIHZhciB0b3VjaFg7XG4gICAgICB2YXIgdG91Y2hZO1xuICAgICAgdmFyIG9mZnNldFg7XG4gICAgICB2YXIgb2Zmc2V0WTtcbiAgICAgIHZhciBkaWZmWDtcbiAgICAgIHZhciBkaWZmWTtcbiAgICAgIHZhciB0cmFuc2xhdGVYO1xuICAgICAgdmFyIHRyYW5zbGF0ZVk7XG4gICAgICB2YXIgaW1hZ2VXaWR0aDtcbiAgICAgIHZhciBpbWFnZUhlaWdodDtcbiAgICAgIHZhciBzY2FsZWRXaWR0aDtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQ7XG4gICAgICB2YXIgdHJhbnNsYXRlTWluWDtcbiAgICAgIHZhciB0cmFuc2xhdGVNaW5ZO1xuICAgICAgdmFyIHRyYW5zbGF0ZU1heFg7XG4gICAgICB2YXIgdHJhbnNsYXRlTWF4WTtcbiAgICAgIHZhciBzbGlkZVdpZHRoO1xuICAgICAgdmFyIHNsaWRlSGVpZ2h0O1xuXG4gICAgICBpZiAodHlwZW9mIGltYWdlLnRvdWNoZXNTdGFydC54ID09PSAndW5kZWZpbmVkJyAmJiBlKSB7XG4gICAgICAgIHRvdWNoWCA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgICB0b3VjaFkgPSBlLnR5cGUgPT09ICd0b3VjaGVuZCcgPyBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZIDogZS5wYWdlWTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdWNoWCA9IGltYWdlLnRvdWNoZXNTdGFydC54O1xuICAgICAgICB0b3VjaFkgPSBpbWFnZS50b3VjaGVzU3RhcnQueTtcbiAgICAgIH1cblxuICAgICAgem9vbS5zY2FsZSA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICBpZiAoZSkge1xuICAgICAgICBzbGlkZVdpZHRoID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgb2Zmc2V0WCA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgb2Zmc2V0WSA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkudG9wO1xuICAgICAgICBkaWZmWCA9IChvZmZzZXRYICsgKHNsaWRlV2lkdGggLyAyKSkgLSB0b3VjaFg7XG4gICAgICAgIGRpZmZZID0gKG9mZnNldFkgKyAoc2xpZGVIZWlnaHQgLyAyKSkgLSB0b3VjaFk7XG5cbiAgICAgICAgaW1hZ2VXaWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlSGVpZ2h0ID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHNjYWxlZEhlaWdodCA9IGltYWdlSGVpZ2h0ICogem9vbS5zY2FsZTtcblxuICAgICAgICB0cmFuc2xhdGVNaW5YID0gTWF0aC5taW4oKChzbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgICAgICB0cmFuc2xhdGVNaW5ZID0gTWF0aC5taW4oKChzbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICAgIHRyYW5zbGF0ZU1heFggPSAtdHJhbnNsYXRlTWluWDtcbiAgICAgICAgdHJhbnNsYXRlTWF4WSA9IC10cmFuc2xhdGVNaW5ZO1xuXG4gICAgICAgIHRyYW5zbGF0ZVggPSBkaWZmWCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSBkaWZmWSAqIHpvb20uc2NhbGU7XG5cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVggPCB0cmFuc2xhdGVNaW5YKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1pblg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVggPiB0cmFuc2xhdGVNYXhYKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1heFg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNsYXRlWSA8IHRyYW5zbGF0ZU1pblkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWluWTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhbnNsYXRlWSA+IHRyYW5zbGF0ZU1heFkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWF4WTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgfVxuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHRyYW5zbGF0ZVggKyBcInB4LCBcIiArIHRyYW5zbGF0ZVkgKyBcInB4LDApXCIpKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyAoem9vbS5zY2FsZSkgKyBcIilcIikpO1xuICAgIH0sXG4gICAgb3V0OiBmdW5jdGlvbiBvdXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuY2xpY2tlZFNsaWRlID8gJChzd2lwZXIuY2xpY2tlZFNsaWRlKSA6IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IGdlc3R1cmUuJHNsaWRlRWwuZmluZCgnaW1nLCBzdmcsIGNhbnZhcycpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KChcIi5cIiArIChwYXJhbXMuY29udGFpbmVyQ2xhc3MpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIHpvb20uc2NhbGUgPSAxO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSAxO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApJyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMzAwKS50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKScpO1xuICAgICAgZ2VzdHVyZS4kc2xpZGVFbC5yZW1vdmVDbGFzcygoXCJcIiArIChwYXJhbXMuem9vbWVkU2xpZGVDbGFzcykpKTtcbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICAvLyBBdHRhY2gvRGV0YWNoIEV2ZW50c1xuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgaWYgKHpvb20uZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgIHpvb20uZW5hYmxlZCA9IHRydWU7XG5cbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcblxuICAgICAgLy8gU2NhbGUgaW1hZ2VcbiAgICAgIGlmIChTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKCdnZXN0dXJlc3RhcnQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKCdnZXN0dXJlY2hhbmdlJywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUNoYW5nZSwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oJ2dlc3R1cmVlbmQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgaW1hZ2VcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzKSksIHpvb20ub25Ub3VjaE1vdmUpO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIGlmICghem9vbS5lbmFibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICBzd2lwZXIuem9vbS5lbmFibGVkID0gZmFsc2U7XG5cbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcblxuICAgICAgLy8gU2NhbGUgaW1hZ2VcbiAgICAgIGlmIChTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZignZ2VzdHVyZXN0YXJ0JywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoJ2dlc3R1cmVjaGFuZ2UnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoJ2dlc3R1cmVlbmQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUNoYW5nZSwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgaW1hZ2VcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuem9vbS5jb250YWluZXJDbGFzcykpLCB6b29tLm9uVG91Y2hNb3ZlKTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBab29tJDEgPSB7XG4gICAgbmFtZTogJ3pvb20nLFxuICAgIHBhcmFtczoge1xuICAgICAgem9vbToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIG1pblJhdGlvOiAxLFxuICAgICAgICB0b2dnbGU6IHRydWUsXG4gICAgICAgIGNvbnRhaW5lckNsYXNzOiAnc3dpcGVyLXpvb20tY29udGFpbmVyJyxcbiAgICAgICAgem9vbWVkU2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZS16b29tZWQnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBjdXJyZW50U2NhbGU6IDEsXG4gICAgICAgIGlzU2NhbGluZzogZmFsc2UsXG4gICAgICAgIGdlc3R1cmU6IHtcbiAgICAgICAgICAkc2xpZGVFbDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNsaWRlV2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzbGlkZUhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgICRpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgJGltYWdlV3JhcEVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIH0sXG4gICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRYOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3VycmVudFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtaW5YOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWluWTogdW5kZWZpbmVkLFxuICAgICAgICAgIG1heFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhZOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3VjaGVzU3RhcnQ6IHt9LFxuICAgICAgICAgIHRvdWNoZXNDdXJyZW50OiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgdmVsb2NpdHk6IHtcbiAgICAgICAgICB4OiB1bmRlZmluZWQsXG4gICAgICAgICAgeTogdW5kZWZpbmVkLFxuICAgICAgICAgIHByZXZQb3NpdGlvblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmV2UG9zaXRpb25ZOiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJldlRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgICgnb25HZXN0dXJlU3RhcnQgb25HZXN0dXJlQ2hhbmdlIG9uR2VzdHVyZUVuZCBvblRvdWNoU3RhcnQgb25Ub3VjaE1vdmUgb25Ub3VjaEVuZCBvblRyYW5zaXRpb25FbmQgdG9nZ2xlIGVuYWJsZSBkaXNhYmxlIGluIG91dCcpLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgICAgICB6b29tW21ldGhvZE5hbWVdID0gWm9vbVttZXRob2ROYW1lXS5iaW5kKHN3aXBlcik7XG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2NhbGUgPSAxO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN3aXBlci56b29tLCAnc2NhbGUnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBzY2FsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaW1hZ2VFbCA9IHN3aXBlci56b29tLmdlc3R1cmUuJGltYWdlRWwgPyBzd2lwZXIuem9vbS5nZXN0dXJlLiRpbWFnZUVsWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIHNsaWRlRWwgPSBzd2lwZXIuem9vbS5nZXN0dXJlLiRzbGlkZUVsID8gc3dpcGVyLnpvb20uZ2VzdHVyZS4kc2xpZGVFbFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCd6b29tQ2hhbmdlJywgdmFsdWUsIGltYWdlRWwsIHNsaWRlRWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2FsZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci56b29tLmRpc2FibGUoKTtcbiAgICAgIH0sXG4gICAgICB0b3VjaFN0YXJ0OiBmdW5jdGlvbiB0b3VjaFN0YXJ0KGUpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnpvb20uZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnpvb20ub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci56b29tLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9LFxuICAgICAgZG91YmxlVGFwOiBmdW5jdGlvbiBkb3VibGVUYXAoZSkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuem9vbS5lbmFibGVkICYmIHN3aXBlci56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy56b29tLnRvZ2dsZSkge1xuICAgICAgICAgIHN3aXBlci56b29tLnRvZ2dsZShlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLm9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIExhenkgPSB7XG4gICAgbG9hZEluU2xpZGU6IGZ1bmN0aW9uIGxvYWRJblNsaWRlKGluZGV4LCBsb2FkSW5EdXBsaWNhdGUpIHtcbiAgICAgIGlmICggbG9hZEluRHVwbGljYXRlID09PSB2b2lkIDAgKSBsb2FkSW5EdXBsaWNhdGUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmxhenk7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcblxuICAgICAgdmFyICRzbGlkZUVsID0gaXNWaXJ0dWFsXG4gICAgICAgID8gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIl1cIikpXG4gICAgICAgIDogc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG5cbiAgICAgIHZhciAkaW1hZ2VzID0gJHNsaWRlRWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLmVsZW1lbnRDbGFzcykgKyBcIjpub3QoLlwiICsgKHBhcmFtcy5sb2FkZWRDbGFzcykgKyBcIik6bm90KC5cIiArIChwYXJhbXMubG9hZGluZ0NsYXNzKSArIFwiKVwiKSk7XG4gICAgICBpZiAoJHNsaWRlRWwuaGFzQ2xhc3MocGFyYW1zLmVsZW1lbnRDbGFzcykgJiYgISRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykgJiYgISRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3MpKSB7XG4gICAgICAgICRpbWFnZXMgPSAkaW1hZ2VzLmFkZCgkc2xpZGVFbFswXSk7XG4gICAgICB9XG4gICAgICBpZiAoJGltYWdlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgICRpbWFnZXMuZWFjaChmdW5jdGlvbiAoaW1hZ2VJbmRleCwgaW1hZ2VFbCkge1xuICAgICAgICB2YXIgJGltYWdlRWwgPSAkKGltYWdlRWwpO1xuICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKTtcblxuICAgICAgICB2YXIgYmFja2dyb3VuZCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtYmFja2dyb3VuZCcpO1xuICAgICAgICB2YXIgc3JjID0gJGltYWdlRWwuYXR0cignZGF0YS1zcmMnKTtcbiAgICAgICAgdmFyIHNyY3NldCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgIHZhciBzaXplcyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc2l6ZXMnKTtcblxuICAgICAgICBzd2lwZXIubG9hZEltYWdlKCRpbWFnZUVsWzBdLCAoc3JjIHx8IGJhY2tncm91bmQpLCBzcmNzZXQsIHNpemVzLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCAoc3dpcGVyICYmICFzd2lwZXIucGFyYW1zKSB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICAkaW1hZ2VFbC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAoXCJ1cmwoXFxcIlwiICsgYmFja2dyb3VuZCArIFwiXFxcIilcIikpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc3Jjc2V0Jywgc3Jjc2V0KTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmNzZXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplcykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzaXplcycsIHNpemVzKTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zaXplcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNyYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICRpbWFnZUVsLmFkZENsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcyk7XG4gICAgICAgICAgJHNsaWRlRWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLnByZWxvYWRlckNsYXNzKSkpLnJlbW92ZSgpO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3AgJiYgbG9hZEluRHVwbGljYXRlKSB7XG4gICAgICAgICAgICB2YXIgc2xpZGVPcmlnaW5hbEluZGV4ID0gJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgICAgIGlmICgkc2xpZGVFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlT3JpZ2luYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpXCIpKTtcbiAgICAgICAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUob3JpZ2luYWxTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgZHVwbGljYXRlZFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZU9yaWdpbmFsSW5kZXggKyBcIlxcXCJdXCIpKTtcbiAgICAgICAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoZHVwbGljYXRlZFNsaWRlLmluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZVJlYWR5JywgJHNsaWRlRWxbMF0sICRpbWFnZUVsWzBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZUxvYWQnLCAkc2xpZGVFbFswXSwgJGltYWdlRWxbMF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyIHN3aXBlclBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXJQYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlclBhcmFtcy5sYXp5O1xuXG4gICAgICB2YXIgc2xpZGVzUGVyVmlldyA9IHN3aXBlclBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICBzbGlkZXNQZXJWaWV3ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2xpZGVFeGlzdChpbmRleCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgaWYgKCR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlclBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiXVwiKSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2xpZGVzW2luZGV4XSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzbGlkZUluZGV4KHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICAgIHJldHVybiAkKHNsaWRlRWwpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQpIHsgc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkID0gdHJ1ZTsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlclBhcmFtcy5zbGlkZVZpc2libGVDbGFzcykpKS5lYWNoKGZ1bmN0aW9uIChlbEluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gaXNWaXJ0dWFsID8gJChzbGlkZUVsKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpIDogJChzbGlkZUVsKS5pbmRleCgpO1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVJbmRleDsgaSA8IGFjdGl2ZUluZGV4ICsgc2xpZGVzUGVyVmlldzsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSkpIHsgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoaSk7IH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5sb2FkUHJldk5leHQpIHtcbiAgICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPiAxIHx8IChwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ICYmIHBhcmFtcy5sb2FkUHJldk5leHRBbW91bnQgPiAxKSkge1xuICAgICAgICAgIHZhciBhbW91bnQgPSBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50O1xuICAgICAgICAgIHZhciBzcHYgPSBzbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIHZhciBtYXhJbmRleCA9IE1hdGgubWluKGFjdGl2ZUluZGV4ICsgc3B2ICsgTWF0aC5tYXgoYW1vdW50LCBzcHYpLCBzbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgICB2YXIgbWluSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCAtIE1hdGgubWF4KHNwdiwgYW1vdW50KSwgMCk7XG4gICAgICAgICAgLy8gTmV4dCBTbGlkZXNcbiAgICAgICAgICBmb3IgKHZhciBpJDEgPSBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkkMSA8IG1heEluZGV4OyBpJDEgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSQxKSkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpJDEpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFByZXYgU2xpZGVzXG4gICAgICAgICAgZm9yICh2YXIgaSQyID0gbWluSW5kZXg7IGkkMiA8IGFjdGl2ZUluZGV4OyBpJDIgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSQyKSkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpJDIpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVOZXh0Q2xhc3MpKSk7XG4gICAgICAgICAgaWYgKG5leHRTbGlkZS5sZW5ndGggPiAwKSB7IHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgobmV4dFNsaWRlKSk7IH1cblxuICAgICAgICAgIHZhciBwcmV2U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVQcmV2Q2xhc3MpKSk7XG4gICAgICAgICAgaWYgKHByZXZTbGlkZS5sZW5ndGggPiAwKSB7IHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgocHJldlNsaWRlKSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIExhenkkMSA9IHtcbiAgICBuYW1lOiAnbGF6eScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBsYXp5OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBsb2FkUHJldk5leHQ6IGZhbHNlLFxuICAgICAgICBsb2FkUHJldk5leHRBbW91bnQ6IDEsXG4gICAgICAgIGxvYWRPblRyYW5zaXRpb25TdGFydDogZmFsc2UsXG5cbiAgICAgICAgZWxlbWVudENsYXNzOiAnc3dpcGVyLWxhenknLFxuICAgICAgICBsb2FkaW5nQ2xhc3M6ICdzd2lwZXItbGF6eS1sb2FkaW5nJyxcbiAgICAgICAgbG9hZGVkQ2xhc3M6ICdzd2lwZXItbGF6eS1sb2FkZWQnLFxuICAgICAgICBwcmVsb2FkZXJDbGFzczogJ3N3aXBlci1sYXp5LXByZWxvYWRlcicsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgbGF6eToge1xuICAgICAgICAgIGluaXRpYWxJbWFnZUxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgbG9hZDogTGF6eS5sb2FkLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBsb2FkSW5TbGlkZTogTGF6eS5sb2FkSW5TbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcykge1xuICAgICAgICAgIHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlID09PSAwKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsOiBmdW5jdGlvbiBzY3JvbGwoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiAhc3dpcGVyLnBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsYmFyRHJhZ01vdmU6IGZ1bmN0aW9uIHNjcm9sbGJhckRyYWdNb3ZlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCB8fCAoIXN3aXBlci5wYXJhbXMubGF6eS5sb2FkT25UcmFuc2l0aW9uU3RhcnQgJiYgIXN3aXBlci5sYXp5LmluaXRpYWxJbWFnZUxvYWRlZCkpIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cmFuc2l0aW9uRW5kOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmICFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLyogZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCI+PlwiXSB9XSAqL1xuXG4gIHZhciBDb250cm9sbGVyID0ge1xuICAgIExpbmVhclNwbGluZTogZnVuY3Rpb24gTGluZWFyU3BsaW5lKHgsIHkpIHtcbiAgICAgIHZhciBiaW5hcnlTZWFyY2ggPSAoZnVuY3Rpb24gc2VhcmNoKCkge1xuICAgICAgICB2YXIgbWF4SW5kZXg7XG4gICAgICAgIHZhciBtaW5JbmRleDtcbiAgICAgICAgdmFyIGd1ZXNzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFycmF5LCB2YWwpIHtcbiAgICAgICAgICBtaW5JbmRleCA9IC0xO1xuICAgICAgICAgIG1heEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChtYXhJbmRleCAtIG1pbkluZGV4ID4gMSkge1xuICAgICAgICAgICAgZ3Vlc3MgPSBtYXhJbmRleCArIG1pbkluZGV4ID4+IDE7XG4gICAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgICBtaW5JbmRleCA9IGd1ZXNzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1heEluZGV4O1xuICAgICAgICB9O1xuICAgICAgfSgpKTtcbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgICAgdGhpcy5sYXN0SW5kZXggPSB4Lmxlbmd0aCAtIDE7XG4gICAgICAvLyBHaXZlbiBhbiB4IHZhbHVlICh4MiksIHJldHVybiB0aGUgZXhwZWN0ZWQgeTIgdmFsdWU6XG4gICAgICAvLyAoeDEseTEpIGlzIHRoZSBrbm93biBwb2ludCBiZWZvcmUgZ2l2ZW4gdmFsdWUsXG4gICAgICAvLyAoeDMseTMpIGlzIHRoZSBrbm93biBwb2ludCBhZnRlciBnaXZlbiB2YWx1ZS5cbiAgICAgIHZhciBpMTtcbiAgICAgIHZhciBpMztcblxuICAgICAgdGhpcy5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIGludGVycG9sYXRlKHgyKSB7XG4gICAgICAgIGlmICgheDIpIHsgcmV0dXJuIDA7IH1cblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4ZXMgb2YgeDEgYW5kIHgzICh0aGUgYXJyYXkgaW5kZXhlcyBiZWZvcmUgYW5kIGFmdGVyIGdpdmVuIHgyKTpcbiAgICAgICAgaTMgPSBiaW5hcnlTZWFyY2godGhpcy54LCB4Mik7XG4gICAgICAgIGkxID0gaTMgLSAxO1xuXG4gICAgICAgIC8vIFdlIGhhdmUgb3VyIGluZGV4ZXMgaTEgJiBpMywgc28gd2UgY2FuIGNhbGN1bGF0ZSBhbHJlYWR5OlxuICAgICAgICAvLyB5MiA6PSAoKHgy4oiSeDEpIMOXICh5M+KIknkxKSkgw7cgKHgz4oiSeDEpICsgeTFcbiAgICAgICAgcmV0dXJuICgoKHgyIC0gdGhpcy54W2kxXSkgKiAodGhpcy55W2kzXSAtIHRoaXMueVtpMV0pKSAvICh0aGlzLnhbaTNdIC0gdGhpcy54W2kxXSkpICsgdGhpcy55W2kxXTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8vIHh4eDogZm9yIG5vdyBpIHdpbGwganVzdCBzYXZlIG9uZSBzcGxpbmUgZnVuY3Rpb24gdG8gdG9cbiAgICBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uKGMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gc3dpcGVyLnBhcmFtcy5sb29wXG4gICAgICAgICAgPyBuZXcgQ29udHJvbGxlci5MaW5lYXJTcGxpbmUoc3dpcGVyLnNsaWRlc0dyaWQsIGMuc2xpZGVzR3JpZClcbiAgICAgICAgICA6IG5ldyBDb250cm9sbGVyLkxpbmVhclNwbGluZShzd2lwZXIuc25hcEdyaWQsIGMuc25hcEdyaWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc2V0VHJhbnNsYXRlJDEsIGJ5Q29udHJvbGxlcikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgbXVsdGlwbGllcjtcbiAgICAgIHZhciBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjKSB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBjcmVhdGUgYW4gSW50ZXJwb2xhdGUgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHNuYXBHcmlkc1xuICAgICAgICAvLyB4IGlzIHRoZSBHcmlkIG9mIHRoZSBzY3JvbGxlZCBzY3JvbGxlciBhbmQgeSB3aWxsIGJlIHRoZSBjb250cm9sbGVkIHNjcm9sbGVyXG4gICAgICAgIC8vIGl0IG1ha2VzIHNlbnNlIHRvIGNyZWF0ZSB0aGlzIG9ubHkgb25jZSBhbmQgcmVjYWxsIGl0IGZvciB0aGUgaW50ZXJwb2xhdGlvblxuICAgICAgICAvLyB0aGUgZnVuY3Rpb24gZG9lcyBhIGxvdCBvZiB2YWx1ZSBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24oYyk7XG4gICAgICAgICAgLy8gaSBhbSBub3Qgc3VyZSB3aHkgdGhlIHZhbHVlcyBoYXZlIHRvIGJlIG11bHRpcGxpY2F0ZWQgdGhpcyB3YXksIHRyaWVkIHRvIGludmVydCB0aGUgc25hcEdyaWRcbiAgICAgICAgICAvLyBidXQgaXQgZGlkIG5vdCB3b3JrIG91dFxuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAtc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lLmludGVycG9sYXRlKC10cmFuc2xhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVkVHJhbnNsYXRlIHx8IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgICBtdWx0aXBsaWVyID0gKGMubWF4VHJhbnNsYXRlKCkgLSBjLm1pblRyYW5zbGF0ZSgpKSAvIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAoKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBtdWx0aXBsaWVyKSArIGMubWluVHJhbnNsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmludmVyc2UpIHtcbiAgICAgICAgICBjb250cm9sbGVkVHJhbnNsYXRlID0gYy5tYXhUcmFuc2xhdGUoKSAtIGNvbnRyb2xsZWRUcmFuc2xhdGU7XG4gICAgICAgIH1cbiAgICAgICAgYy51cGRhdGVQcm9ncmVzcyhjb250cm9sbGVkVHJhbnNsYXRlKTtcbiAgICAgICAgYy5zZXRUcmFuc2xhdGUoY29udHJvbGxlZFRyYW5zbGF0ZSwgc3dpcGVyKTtcbiAgICAgICAgYy51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBjLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChjb250cm9sbGVkW2ldICE9PSBieUNvbnRyb2xsZXIgJiYgY29udHJvbGxlZFtpXSBpbnN0YW5jZW9mIFN3aXBlcikge1xuICAgICAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjb250cm9sbGVkW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjb250cm9sbGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgaTtcbiAgICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGMpIHtcbiAgICAgICAgYy5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBzd2lwZXIpO1xuICAgICAgICBpZiAoZHVyYXRpb24gIT09IDApIHtcbiAgICAgICAgICBjLnRyYW5zaXRpb25TdGFydCgpO1xuICAgICAgICAgIGlmIChjLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgICBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGMudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGMuJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbGxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIGlmIChjLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgICAgICBjLmxvb3BGaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sbGVkKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChjb250cm9sbGVkW2ldICE9PSBieUNvbnRyb2xsZXIgJiYgY29udHJvbGxlZFtpXSBpbnN0YW5jZW9mIFN3aXBlcikge1xuICAgICAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oY29udHJvbGxlZFtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZWQgaW5zdGFuY2VvZiBTd2lwZXIgJiYgYnlDb250cm9sbGVyICE9PSBjb250cm9sbGVkKSB7XG4gICAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWQpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG4gIHZhciBDb250cm9sbGVyJDEgPSB7XG4gICAgbmFtZTogJ2NvbnRyb2xsZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgICAgIGludmVyc2U6IGZhbHNlLFxuICAgICAgICBieTogJ3NsaWRlJywgLy8gb3IgJ2NvbnRhaW5lcidcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgICAgY29udHJvbDogc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2wsXG4gICAgICAgICAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbjogQ29udHJvbGxlci5nZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IENvbnRyb2xsZXIuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBDb250cm9sbGVyLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIGExMXkgPSB7XG4gICAgbWFrZUVsRm9jdXNhYmxlOiBmdW5jdGlvbiBtYWtlRWxGb2N1c2FibGUoJGVsKSB7XG4gICAgICAkZWwuYXR0cigndGFiSW5kZXgnLCAnMCcpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsUm9sZTogZnVuY3Rpb24gYWRkRWxSb2xlKCRlbCwgcm9sZSkge1xuICAgICAgJGVsLmF0dHIoJ3JvbGUnLCByb2xlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbExhYmVsOiBmdW5jdGlvbiBhZGRFbExhYmVsKCRlbCwgbGFiZWwpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGRpc2FibGVFbDogZnVuY3Rpb24gZGlzYWJsZUVsKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBlbmFibGVFbDogZnVuY3Rpb24gZW5hYmxlRWwoJGVsKSB7XG4gICAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBvbkVudGVyS2V5OiBmdW5jdGlvbiBvbkVudGVyS2V5KGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICAgIGlmIChlLmtleUNvZGUgIT09IDEzKSB7IHJldHVybjsgfVxuICAgICAgdmFyICR0YXJnZXRFbCA9ICQoZS50YXJnZXQpO1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkubm90aWZ5KHBhcmFtcy5sYXN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCAmJiAkdGFyZ2V0RWwuaXMoc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkpIHtcbiAgICAgICAgaWYgKCEoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgJHRhcmdldEVsLmlzKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpKSkpIHtcbiAgICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeShtZXNzYWdlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBub3RpZmljYXRpb24gPSBzd2lwZXIuYTExeS5saXZlUmVnaW9uO1xuICAgICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBub3RpZmljYXRpb24uaHRtbCgnJyk7XG4gICAgICBub3RpZmljYXRpb24uaHRtbChtZXNzYWdlKTtcbiAgICB9LFxuICAgIHVwZGF0ZU5hdmlnYXRpb246IGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb24oKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgeyByZXR1cm47IH1cbiAgICAgIHZhciByZWYgPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICAgIHZhciAkbmV4dEVsID0gcmVmLiRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbCA9IHJlZi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5lbmFibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5kaXNhYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBhZ2luYXRpb246IGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMuZWFjaChmdW5jdGlvbiAoYnVsbGV0SW5kZXgsIGJ1bGxldEVsKSB7XG4gICAgICAgICAgdmFyICRidWxsZXRFbCA9ICQoYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkYnVsbGV0RWwsICdidXR0b24nKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5hZGRFbExhYmVsKCRidWxsZXRFbCwgcGFyYW1zLnBhZ2luYXRpb25CdWxsZXRNZXNzYWdlLnJlcGxhY2UoL3t7aW5kZXh9fS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7XG5cbiAgICAgIC8vIE5hdmlnYXRpb25cbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICB2YXIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWw7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbDtcbiAgICAgIH1cbiAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRuZXh0RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkbmV4dEVsLCBwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRuZXh0RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRwcmV2RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkcHJldkVsLCBwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRwcmV2RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub24oJ2tleWRvd24nLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSksIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5hMTF5LmxpdmVSZWdpb24gJiYgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5sZW5ndGggPiAwKSB7IHN3aXBlci5hMTF5LmxpdmVSZWdpb24ucmVtb3ZlKCk7IH1cblxuICAgICAgdmFyICRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbDtcbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgICB9XG4gICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsLm9mZigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub2ZmKCdrZXlkb3duJywgKFwiLlwiICsgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgQTExeSA9IHtcbiAgICBuYW1lOiAnYTExeScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhMTF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6ICdQcmV2aW91cyBzbGlkZScsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICAgIGxhc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBsYXN0IHNsaWRlJyxcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGExMXk6IHtcbiAgICAgICAgICBsaXZlUmVnaW9uOiAkKChcIjxzcGFuIGNsYXNzPVxcXCJcIiArIChzd2lwZXIucGFyYW1zLmExMXkubm90aWZpY2F0aW9uQ2xhc3MpICsgXCJcXFwiIGFyaWEtbGl2ZT1cXFwiYXNzZXJ0aXZlXFxcIiBhcmlhLWF0b21pYz1cXFwidHJ1ZVxcXCI+PC9zcGFuPlwiKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKGExMXkpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLmExMXlbbWV0aG9kTmFtZV0gPSBhMTF5W21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS5pbml0KCk7XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB0b0VkZ2U6IGZ1bmN0aW9uIHRvRWRnZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS51cGRhdGVOYXZpZ2F0aW9uKCk7XG4gICAgICB9LFxuICAgICAgcGFnaW5hdGlvblVwZGF0ZTogZnVuY3Rpb24gcGFnaW5hdGlvblVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBIaXN0b3J5ID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5KSB7IHJldHVybjsgfVxuICAgICAgaWYgKCF3aW4uaGlzdG9yeSB8fCAhd2luLmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBoaXN0b3J5ID0gc3dpcGVyLmhpc3Rvcnk7XG4gICAgICBoaXN0b3J5LmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGhpc3RvcnkucGF0aHMgPSBIaXN0b3J5LmdldFBhdGhWYWx1ZXMoKTtcbiAgICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHsgcmV0dXJuOyB9XG4gICAgICBoaXN0b3J5LnNjcm9sbFRvU2xpZGUoMCwgaGlzdG9yeS5wYXRocy52YWx1ZSwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHN3aXBlci5oaXN0b3J5LnNldEhpc3RvcnlQb3BTdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogZnVuY3Rpb24gc2V0SGlzdG9yeVBvcFN0YXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcygpO1xuICAgICAgc3dpcGVyLmhpc3Rvcnkuc2Nyb2xsVG9TbGlkZShzd2lwZXIucGFyYW1zLnNwZWVkLCBzd2lwZXIuaGlzdG9yeS5wYXRocy52YWx1ZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgZ2V0UGF0aFZhbHVlczogZnVuY3Rpb24gZ2V0UGF0aFZhbHVlcygpIHtcbiAgICAgIHZhciBwYXRoQXJyYXkgPSB3aW4ubG9jYXRpb24ucGF0aG5hbWUuc2xpY2UoMSkuc3BsaXQoJy8nKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHsgcmV0dXJuIHBhcnQgIT09ICcnOyB9KTtcbiAgICAgIHZhciB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgICB2YXIgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICAgIHJldHVybiB7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9LFxuICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uIHNldEhpc3Rvcnkoa2V5LCBpbmRleCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5oaXN0b3J5LmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuICAgICAgdmFyIHZhbHVlID0gSGlzdG9yeS5zbHVnaWZ5KHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpKTtcbiAgICAgIGlmICghd2luLmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSBrZXkgKyBcIi9cIiArIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHdpbi5oaXN0b3J5LnN0YXRlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IHZhbHVlOiB2YWx1ZSB9LCBudWxsLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4uaGlzdG9yeS5wdXNoU3RhdGUoeyB2YWx1ZTogdmFsdWUgfSwgbnVsbCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2x1Z2lmeTogZnVuY3Rpb24gc2x1Z2lmeSh0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1teXFx3LV0rL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvLS0rL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL14tKy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvLSskLywgJycpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9TbGlkZTogZnVuY3Rpb24gc2Nyb2xsVG9TbGlkZShzcGVlZCwgdmFsdWUsIHJ1bkNhbGxiYWNrcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgICAgIHZhciBzbGlkZUhpc3RvcnkgPSBIaXN0b3J5LnNsdWdpZnkoc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5JykpO1xuICAgICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcyk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgSGlzdG9yeSQxID0ge1xuICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogZmFsc2UsXG4gICAgICAgIGtleTogJ3NsaWRlcycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgaGlzdG9yeToge1xuICAgICAgICAgIGluaXQ6IEhpc3RvcnkuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0SGlzdG9yeTogSGlzdG9yeS5zZXRIaXN0b3J5LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRIaXN0b3J5UG9wU3RhdGU6IEhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzY3JvbGxUb1NsaWRlOiBIaXN0b3J5LnNjcm9sbFRvU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGRlc3Ryb3k6IEhpc3RvcnkuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmhpc3RvcnkuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5KHN3aXBlci5wYXJhbXMuaGlzdG9yeS5rZXksIHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgSGFzaE5hdmlnYXRpb24gPSB7XG4gICAgb25IYXNoQ2FuZ2U6IGZ1bmN0aW9uIG9uSGFzaENhbmdlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgbmV3SGFzaCA9IGRvYy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICB2YXIgYWN0aXZlU2xpZGVIYXNoID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtaGFzaCcpO1xuICAgICAgaWYgKG5ld0hhc2ggIT09IGFjdGl2ZVNsaWRlSGFzaCkge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtaGFzaD1cXFwiXCIgKyBuZXdIYXNoICsgXCJcXFwiXVwiKSkuaW5kZXgoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0luZGV4KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhhc2g6IGZ1bmN0aW9uIHNldEhhc2goKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5yZXBsYWNlU3RhdGUgJiYgd2luLmhpc3RvcnkgJiYgd2luLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAoKFwiI1wiICsgKHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKSkpIHx8ICcnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHZhciBoYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgIGRvYy5sb2NhdGlvbi5oYXNoID0gaGFzaCB8fCAnJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkIHx8IChzd2lwZXIucGFyYW1zLmhpc3RvcnkgJiYgc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQpKSB7IHJldHVybjsgfVxuICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBoYXNoID0gZG9jLmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTtcbiAgICAgIGlmIChoYXNoKSB7XG4gICAgICAgIHZhciBzcGVlZCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgICAgaWYgKHNsaWRlSGFzaCA9PT0gaGFzaCAmJiAhc2xpZGUuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gc2xpZGUuaW5kZXgoKTtcbiAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbikub24oJ2hhc2hjaGFuZ2UnLCBzd2lwZXIuaGFzaE5hdmlnYXRpb24ub25IYXNoQ2FuZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbikub2ZmKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgSGFzaE5hdmlnYXRpb24kMSA9IHtcbiAgICBuYW1lOiAnaGFzaC1uYXZpZ2F0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhhc2hOYXZpZ2F0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByZXBsYWNlU3RhdGU6IGZhbHNlLFxuICAgICAgICB3YXRjaFN0YXRlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBoYXNoTmF2aWdhdGlvbjoge1xuICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgICBpbml0OiBIYXNoTmF2aWdhdGlvbi5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBIYXNoTmF2aWdhdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRIYXNoOiBIYXNoTmF2aWdhdGlvbi5zZXRIYXNoLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbkhhc2hDYW5nZTogSGFzaE5hdmlnYXRpb24ub25IYXNoQ2FuZ2UuYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uc2V0SGFzaCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiBcIm9mZlwiICovXG5cbiAgdmFyIEF1dG9wbGF5ID0ge1xuICAgIHJ1bjogZnVuY3Rpb24gcnVuKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGFjdGl2ZVNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICB2YXIgZGVsYXkgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5O1xuICAgICAgaWYgKCRhY3RpdmVTbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLWF1dG9wbGF5JykpIHtcbiAgICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnJldmVyc2VEaXJlY3Rpb24pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5zdG9wT25MYXN0U2xpZGUpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9LCBkZWxheSk7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RhcnQnKTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RvcCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBwYXVzZTogZnVuY3Rpb24gcGF1c2Uoc3BlZWQpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSB7IGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7IH1cbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSB0cnVlO1xuICAgICAgaWYgKHNwZWVkID09PSAwIHx8ICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LndhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgQXV0b3BsYXkkMSA9IHtcbiAgICBuYW1lOiAnYXV0b3BsYXknLFxuICAgIHBhcmFtczoge1xuICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGRlbGF5OiAzMDAwLFxuICAgICAgICB3YWl0Rm9yVHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IHRydWUsXG4gICAgICAgIHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG4gICAgICAgIHJldmVyc2VEaXJlY3Rpb246IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGF1dG9wbGF5OiB7XG4gICAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBydW46IEF1dG9wbGF5LnJ1bi5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc3RhcnQ6IEF1dG9wbGF5LnN0YXJ0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzdG9wOiBBdXRvcGxheS5zdG9wLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBwYXVzZTogQXV0b3BsYXkucGF1c2UuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci4kd3JhcHBlckVsKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlVHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3BlZWQsIGludGVybmFsKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoaW50ZXJuYWwgfHwgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZShzcGVlZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVyRmlyc3RNb3ZlOiBmdW5jdGlvbiBzbGlkZXJGaXJzdE1vdmUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgRmFkZSA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7IHR4IC09IHN3aXBlci50cmFuc2xhdGU7IH1cbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2xpZGVPcGFjaXR5ID0gc3dpcGVyLnBhcmFtcy5mYWRlRWZmZWN0LmNyb3NzRmFkZVxuICAgICAgICAgID8gTWF0aC5tYXgoMSAtIE1hdGguYWJzKCRzbGlkZUVsWzBdLnByb2dyZXNzKSwgMClcbiAgICAgICAgICA6IDEgKyBNYXRoLm1pbihNYXRoLm1heCgkc2xpZGVFbFswXS5wcm9ncmVzcywgLTEpLCAwKTtcbiAgICAgICAgJHNsaWRlRWxcbiAgICAgICAgICAuY3NzKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IHNsaWRlT3BhY2l0eSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyB0eCArIFwicHgsIFwiICsgdHkgKyBcInB4LCAwcHgpXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICB2YXIgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgc2xpZGVzLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgJHdyYXBwZXJFbC50cmlnZ2VyKHRyaWdnZXJFdmVudHNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgRWZmZWN0RmFkZSA9IHtcbiAgICBuYW1lOiAnZWZmZWN0LWZhZGUnLFxuICAgIHBhcmFtczoge1xuICAgICAgZmFkZUVmZmVjdDoge1xuICAgICAgICBjcm9zc0ZhZGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEZhZGUuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBGYWRlLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiZmFkZVwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmZhZGVFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mYWRlRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBDdWJlID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aDtcbiAgICAgIHZhciBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdDtcbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgICB2YXIgd3JhcHBlclJvdGF0ZSA9IDA7XG4gICAgICB2YXIgJGN1YmVTaGFkb3dFbDtcbiAgICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJHdyYXBwZXJFbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICAgICAgaWYgKCRjdWJlU2hhZG93RWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJCgnPGRpdiBjbGFzcz1cInN3aXBlci1jdWJlLXNoYWRvd1wiPjwvZGl2PicpO1xuICAgICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoJGN1YmVTaGFkb3dFbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRjdWJlU2hhZG93RWwuY3NzKHsgaGVpZ2h0OiAoc3dpcGVyV2lkdGggKyBcInB4XCIpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkZWwuZmluZCgnLnN3aXBlci1jdWJlLXNoYWRvdycpO1xuICAgICAgICAgIGlmICgkY3ViZVNoYWRvd0VsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY3ViZS1zaGFkb3dcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICRlbC5hcHBlbmQoJGN1YmVTaGFkb3dFbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBwYXJzZUludCgkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNsaWRlQW5nbGUgPSBzbGlkZUluZGV4ICogOTA7XG4gICAgICAgIHZhciByb3VuZCA9IE1hdGguZmxvb3Ioc2xpZGVBbmdsZSAvIDM2MCk7XG4gICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICBzbGlkZUFuZ2xlID0gLXNsaWRlQW5nbGU7XG4gICAgICAgICAgcm91bmQgPSBNYXRoLmZsb29yKC1zbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigkc2xpZGVFbFswXS5wcm9ncmVzcywgMSksIC0xKTtcbiAgICAgICAgdmFyIHR4ID0gMDtcbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgdmFyIHR6ID0gMDtcbiAgICAgICAgaWYgKHNsaWRlSW5kZXggJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAtcm91bmQgKiA0ICogc3dpcGVyU2l6ZTtcbiAgICAgICAgICB0eiA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAxKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IDA7XG4gICAgICAgICAgdHogPSAtcm91bmQgKiA0ICogc3dpcGVyU2l6ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDIpICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gc3dpcGVyU2l6ZSArIChyb3VuZCAqIDQgKiBzd2lwZXJTaXplKTtcbiAgICAgICAgICB0eiA9IHN3aXBlclNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAzKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IC1zd2lwZXJTaXplO1xuICAgICAgICAgIHR6ID0gKDMgKiBzd2lwZXJTaXplKSArIChzd2lwZXJTaXplICogNCAqIHJvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgdHggPSAtdHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgIHR5ID0gdHg7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IFwicm90YXRlWChcIiArIChpc0hvcml6b250YWwgPyAwIDogLXNsaWRlQW5nbGUpICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyAoaXNIb3Jpem9udGFsID8gc2xpZGVBbmdsZSA6IDApICsgXCJkZWcpIHRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgXCIgKyB0eiArIFwicHgpXCI7XG4gICAgICAgIGlmIChwcm9ncmVzcyA8PSAxICYmIHByb2dyZXNzID4gLTEpIHtcbiAgICAgICAgICB3cmFwcGVyUm90YXRlID0gKHNsaWRlSW5kZXggKiA5MCkgKyAocHJvZ3Jlc3MgKiA5MCk7XG4gICAgICAgICAgaWYgKHJ0bCkgeyB3cmFwcGVyUm90YXRlID0gKC1zbGlkZUluZGV4ICogOTApIC0gKHByb2dyZXNzICogOTApOyB9XG4gICAgICAgIH1cbiAgICAgICAgJHNsaWRlRWwudHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2YXIgc2hhZG93QmVmb3JlID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyIHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dCZWZvcmUgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QWZ0ZXIgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGgpIHsgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCkgeyBzaGFkb3dBZnRlclswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgocHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICR3cmFwcGVyRWwuY3NzKHtcbiAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbic6IChcIjUwJSA1MCUgLVwiICsgKHN3aXBlclNpemUgLyAyKSArIFwicHhcIiksXG4gICAgICAgICctbW96LXRyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgICAnLW1zLXRyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgICAndHJhbnNmb3JtLW9yaWdpbic6IChcIjUwJSA1MCUgLVwiICsgKHN3aXBlclNpemUgLyAyKSArIFwicHhcIiksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyAoKHN3aXBlcldpZHRoIC8gMikgKyBwYXJhbXMuc2hhZG93T2Zmc2V0KSArIFwicHgsIFwiICsgKC1zd2lwZXJXaWR0aCAvIDIpICsgXCJweCkgcm90YXRlWCg5MGRlZykgcm90YXRlWigwZGVnKSBzY2FsZShcIiArIChwYXJhbXMuc2hhZG93U2NhbGUpICsgXCIpXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc2hhZG93QW5nbGUgPSBNYXRoLmFicyh3cmFwcGVyUm90YXRlKSAtIChNYXRoLmZsb29yKE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC8gOTApICogOTApO1xuICAgICAgICAgIHZhciBtdWx0aXBsaWVyID0gMS41IC0gKFxuICAgICAgICAgICAgKE1hdGguc2luKChzaGFkb3dBbmdsZSAqIDIgKiBNYXRoLlBJKSAvIDM2MCkgLyAyKVxuICAgICAgICAgICAgKyAoTWF0aC5jb3MoKHNoYWRvd0FuZ2xlICogMiAqIE1hdGguUEkpIC8gMzYwKSAvIDIpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YXIgc2NhbGUxID0gcGFyYW1zLnNoYWRvd1NjYWxlO1xuICAgICAgICAgIHZhciBzY2FsZTIgPSBwYXJhbXMuc2hhZG93U2NhbGUgLyBtdWx0aXBsaWVyO1xuICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMuc2hhZG93T2Zmc2V0O1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKChcInNjYWxlM2QoXCIgKyBzY2FsZTEgKyBcIiwgMSwgXCIgKyBzY2FsZTIgKyBcIikgdHJhbnNsYXRlM2QoMHB4LCBcIiArICgoc3dpcGVySGVpZ2h0IC8gMikgKyBvZmZzZXQpICsgXCJweCwgXCIgKyAoLXN3aXBlckhlaWdodCAvIDIgLyBzY2FsZTIpICsgXCJweCkgcm90YXRlWCgtOTBkZWcpXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHpGYWN0b3IgPSAoQnJvd3Nlci5pc1NhZmFyaSB8fCBCcm93c2VyLmlzVWlXZWJWaWV3KSA/ICgtc3dpcGVyU2l6ZSAvIDIpIDogMDtcbiAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwcHgsMCxcIiArIHpGYWN0b3IgKyBcInB4KSByb3RhdGVYKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IDAgOiB3cmFwcGVyUm90YXRlKSArIFwiZGVnKSByb3RhdGVZKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IC13cmFwcGVyUm90YXRlIDogMCkgKyBcImRlZylcIikpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgc2xpZGVzXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JylcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdC5zaGFkb3cgJiYgIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAkZWwuZmluZCgnLnN3aXBlci1jdWJlLXNoYWRvdycpLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdEN1YmUgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1jdWJlJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGN1YmVFZmZlY3Q6IHtcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgICBzaGFkb3c6IHRydWUsXG4gICAgICAgIHNoYWRvd09mZnNldDogMjAsXG4gICAgICAgIHNoYWRvd1NjYWxlOiAwLjk0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGN1YmVFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEN1YmUuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBDdWJlLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiY3ViZVwiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICByZXNpc3RhbmNlUmF0aW86IDAsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY3ViZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmN1YmVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEZsaXAgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9ICRzbGlkZUVsWzBdLnByb2dyZXNzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mbGlwRWZmZWN0LmxpbWl0Um90YXRpb24pIHtcbiAgICAgICAgICBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCRzbGlkZUVsWzBdLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIHJvdGF0ZSA9IC0xODAgKiBwcm9ncmVzcztcbiAgICAgICAgdmFyIHJvdGF0ZVkgPSByb3RhdGU7XG4gICAgICAgIHZhciByb3RhdGVYID0gMDtcbiAgICAgICAgdmFyIHR4ID0gLW9mZnNldDtcbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgICByb3RhdGVYID0gLXJvdGF0ZVk7XG4gICAgICAgICAgcm90YXRlWSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocnRsKSB7XG4gICAgICAgICAgcm90YXRlWSA9IC1yb3RhdGVZO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNsaWRlRWxbMF0uc3R5bGUuekluZGV4ID0gLU1hdGguYWJzKE1hdGgucm91bmQocHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgIHZhciBzaGFkb3dCZWZvcmUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AnKTtcbiAgICAgICAgICB2YXIgc2hhZG93QWZ0ZXIgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0JlZm9yZSA9ICQoKFwiPGRpdiBjbGFzcz1cXFwic3dpcGVyLXNsaWRlLXNoYWRvdy1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZChzaGFkb3dCZWZvcmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dBZnRlciA9ICQoKFwiPGRpdiBjbGFzcz1cXFwic3dpcGVyLXNsaWRlLXNoYWRvdy1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAncmlnaHQnIDogJ2JvdHRvbScpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QWZ0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCkgeyBzaGFkb3dCZWZvcmVbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KC1wcm9ncmVzcywgMCk7IH1cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoKSB7IHNoYWRvd0FmdGVyWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7IH1cbiAgICAgICAgfVxuICAgICAgICAkc2xpZGVFbFxuICAgICAgICAgIC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyB0eCArIFwicHgsIFwiICsgdHkgKyBcInB4LCAwcHgpIHJvdGF0ZVgoXCIgKyByb3RhdGVYICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyByb3RhdGVZICsgXCJkZWcpXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JylcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICB2YXIgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHNsaWRlcy5lcShhY3RpdmVJbmRleCkudHJhbnNpdGlvbkVuZChmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgLy8gaWYgKCEkKHRoaXMpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpIHJldHVybjtcbiAgICAgICAgICBldmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHZhciB0cmlnZ2VyRXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXJFdmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJpZ2dlcih0cmlnZ2VyRXZlbnRzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdEZsaXAgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1mbGlwJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgICBsaW1pdFJvdGF0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEZsaXAuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBGbGlwLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiZmxpcFwiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmbGlwJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmZsaXBFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBDb3ZlcmZsb3cgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aDtcbiAgICAgIHZhciBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyIHNsaWRlc1NpemVzR3JpZCA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5jb3ZlcmZsb3dFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICB2YXIgY2VudGVyID0gaXNIb3Jpem9udGFsID8gLXRyYW5zZm9ybSArIChzd2lwZXJXaWR0aCAvIDIpIDogLXRyYW5zZm9ybSArIChzd2lwZXJIZWlnaHQgLyAyKTtcbiAgICAgIHZhciByb3RhdGUgPSBpc0hvcml6b250YWwgPyBwYXJhbXMucm90YXRlIDogLXBhcmFtcy5yb3RhdGU7XG4gICAgICB2YXIgdHJhbnNsYXRlID0gcGFyYW1zLmRlcHRoO1xuICAgICAgLy8gRWFjaCBzbGlkZSBvZmZzZXQgZnJvbSBjZW50ZXJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgc2xpZGVTaXplID0gc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgc2xpZGVPZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIG9mZnNldE11bHRpcGxpZXIgPSAoKGNlbnRlciAtIHNsaWRlT2Zmc2V0IC0gKHNsaWRlU2l6ZSAvIDIpKSAvIHNsaWRlU2l6ZSkgKiBwYXJhbXMubW9kaWZpZXI7XG5cbiAgICAgICAgdmFyIHJvdGF0ZVkgPSBpc0hvcml6b250YWwgPyByb3RhdGUgKiBvZmZzZXRNdWx0aXBsaWVyIDogMDtcbiAgICAgICAgdmFyIHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjtcbiAgICAgICAgLy8gdmFyIHJvdGF0ZVogPSAwXG4gICAgICAgIHZhciB0cmFuc2xhdGVaID0gLXRyYW5zbGF0ZSAqIE1hdGguYWJzKG9mZnNldE11bHRpcGxpZXIpO1xuXG4gICAgICAgIHZhciB0cmFuc2xhdGVZID0gaXNIb3Jpem9udGFsID8gMCA6IHBhcmFtcy5zdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpO1xuICAgICAgICB2YXIgdHJhbnNsYXRlWCA9IGlzSG9yaXpvbnRhbCA/IHBhcmFtcy5zdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpIDogMDtcblxuICAgICAgICAvLyBGaXggZm9yIHVsdHJhIHNtYWxsIHZhbHVlc1xuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWCkgPCAwLjAwMSkgeyB0cmFuc2xhdGVYID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWSkgPCAwLjAwMSkgeyB0cmFuc2xhdGVZID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWikgPCAwLjAwMSkgeyB0cmFuc2xhdGVaID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWSkgPCAwLjAwMSkgeyByb3RhdGVZID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWCkgPCAwLjAwMSkgeyByb3RhdGVYID0gMDsgfVxuXG4gICAgICAgIHZhciBzbGlkZVRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIgKyB0cmFuc2xhdGVYICsgXCJweCxcIiArIHRyYW5zbGF0ZVkgKyBcInB4LFwiICsgdHJhbnNsYXRlWiArIFwicHgpICByb3RhdGVYKFwiICsgcm90YXRlWCArIFwiZGVnKSByb3RhdGVZKFwiICsgcm90YXRlWSArIFwiZGVnKVwiO1xuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybShzbGlkZVRyYW5zZm9ybSk7XG4gICAgICAgICRzbGlkZUVsWzBdLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKG9mZnNldE11bHRpcGxpZXIpKSArIDE7XG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2YXIgJHNoYWRvd0JlZm9yZUVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyICRzaGFkb3dBZnRlckVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICAgIGlmICgkc2hhZG93QmVmb3JlRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkc2hhZG93QmVmb3JlRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0JlZm9yZUVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dBZnRlckVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJHNoYWRvd0FmdGVyRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKCRzaGFkb3dBZnRlckVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dCZWZvcmVFbC5sZW5ndGgpIHsgJHNoYWRvd0JlZm9yZUVsWzBdLnN0eWxlLm9wYWNpdHkgPSBvZmZzZXRNdWx0aXBsaWVyID4gMCA/IG9mZnNldE11bHRpcGxpZXIgOiAwOyB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dBZnRlckVsLmxlbmd0aCkgeyAkc2hhZG93QWZ0ZXJFbFswXS5zdHlsZS5vcGFjaXR5ID0gKC1vZmZzZXRNdWx0aXBsaWVyKSA+IDAgPyAtb2Zmc2V0TXVsdGlwbGllciA6IDA7IH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgY29ycmVjdCBwZXJzcGVjdGl2ZSBmb3IgSUUxMFxuICAgICAgaWYgKFN1cHBvcnQucG9pbnRlckV2ZW50cyB8fCBTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykge1xuICAgICAgICB2YXIgd3MgPSAkd3JhcHBlckVsWzBdLnN0eWxlO1xuICAgICAgICB3cy5wZXJzcGVjdGl2ZU9yaWdpbiA9IGNlbnRlciArIFwicHggNTAlXCI7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zbGlkZXNcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pXG4gICAgICAgIC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKVxuICAgICAgICAudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgRWZmZWN0Q292ZXJmbG93ID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtY292ZXJmbG93JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGNvdmVyZmxvd0VmZmVjdDoge1xuICAgICAgICByb3RhdGU6IDUwLFxuICAgICAgICBzdHJldGNoOiAwLFxuICAgICAgICBkZXB0aDogMTAwLFxuICAgICAgICBtb2RpZmllcjogMSxcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGNvdmVyZmxvd0VmZmVjdDoge1xuICAgICAgICAgIHNldFRyYW5zbGF0ZTogQ292ZXJmbG93LnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogQ292ZXJmbG93LnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcImNvdmVyZmxvd1wiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG5cbiAgICAgICAgc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjb3ZlcmZsb3cnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY292ZXJmbG93RWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBUaHVtYnMgPSB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgdGh1bWJzUGFyYW1zID0gcmVmLnRodW1icztcbiAgICAgIHZhciBTd2lwZXJDbGFzcyA9IHN3aXBlci5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmICh0aHVtYnNQYXJhbXMuc3dpcGVyIGluc3RhbmNlb2YgU3dpcGVyQ2xhc3MpIHtcbiAgICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIgPSB0aHVtYnNQYXJhbXMuc3dpcGVyO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnRodW1icy5zd2lwZXIub3JpZ2luYWxQYXJhbXMsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci50aHVtYnMuc3dpcGVyLnBhcmFtcywge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChVdGlscy5pc09iamVjdCh0aHVtYnNQYXJhbXMuc3dpcGVyKSkge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IG5ldyBTd2lwZXJDbGFzcyhVdGlscy5leHRlbmQoe30sIHRodW1ic1BhcmFtcy5zd2lwZXIsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlckNyZWF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIuJGVsLmFkZENsYXNzKHN3aXBlci5wYXJhbXMudGh1bWJzLnRodW1ic0NvbnRhaW5lckNsYXNzKTtcbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyLm9uKCd0YXAnLCBzd2lwZXIudGh1bWJzLm9uVGh1bWJDbGljayk7XG4gICAgfSxcbiAgICBvblRodW1iQ2xpY2s6IGZ1bmN0aW9uIG9uVGh1bWJDbGljaygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgY2xpY2tlZEluZGV4ID0gdGh1bWJzU3dpcGVyLmNsaWNrZWRJbmRleDtcbiAgICAgIHZhciBjbGlja2VkU2xpZGUgPSB0aHVtYnNTd2lwZXIuY2xpY2tlZFNsaWRlO1xuICAgICAgaWYgKGNsaWNrZWRTbGlkZSAmJiAkKGNsaWNrZWRTbGlkZSkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy50aHVtYnMuc2xpZGVUaHVtYkFjdGl2ZUNsYXNzKSkgeyByZXR1cm47IH1cbiAgICAgIGlmICh0eXBlb2YgY2xpY2tlZEluZGV4ID09PSAndW5kZWZpbmVkJyB8fCBjbGlja2VkSW5kZXggPT09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2xpZGVUb0luZGV4O1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzbGlkZVRvSW5kZXggPSBwYXJzZUludCgkKHRodW1ic1N3aXBlci5jbGlja2VkU2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IGNsaWNrZWRJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgaWYgKHN3aXBlci5zbGlkZXMuZXEoY3VycmVudEluZGV4KS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldkluZGV4ID0gc3dpcGVyLnNsaWRlcy5lcShjdXJyZW50SW5kZXgpLnByZXZBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlVG9JbmRleCArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkubmV4dEFsbCgoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgc2xpZGVUb0luZGV4ICsgXCJcXFwiXVwiKSkuZXEoMCkuaW5kZXgoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmV2SW5kZXggPT09ICd1bmRlZmluZWQnKSB7IHNsaWRlVG9JbmRleCA9IG5leHRJbmRleDsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmV4dEluZGV4ID09PSAndW5kZWZpbmVkJykgeyBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7IH1cbiAgICAgICAgZWxzZSBpZiAobmV4dEluZGV4IC0gY3VycmVudEluZGV4IDwgY3VycmVudEluZGV4IC0gcHJldkluZGV4KSB7IHNsaWRlVG9JbmRleCA9IG5leHRJbmRleDsgfVxuICAgICAgICBlbHNlIHsgc2xpZGVUb0luZGV4ID0gcHJldkluZGV4OyB9XG4gICAgICB9XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoaW5pdGlhbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgdGh1bWJzU3dpcGVyID0gc3dpcGVyLnRodW1icy5zd2lwZXI7XG4gICAgICBpZiAoIXRodW1ic1N3aXBlcikgeyByZXR1cm47IH1cblxuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSB0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJ1xuICAgICAgICA/IHRodW1ic1N3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpXG4gICAgICAgIDogdGh1bWJzU3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuXG4gICAgICBpZiAoc3dpcGVyLnJlYWxJbmRleCAhPT0gdGh1bWJzU3dpcGVyLnJlYWxJbmRleCkge1xuICAgICAgICB2YXIgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICB2YXIgbmV3VGh1bWJzSW5kZXg7XG4gICAgICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLmhhc0NsYXNzKHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5fY2xpZW50TGVmdCA9IHRodW1ic1N3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgICAgICAgICBjdXJyZW50VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZpbmQgYWN0dWFsIHRodW1icyBpbmRleCB0byBzbGlkZSB0b1xuICAgICAgICAgIHZhciBwcmV2VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkucHJldkFsbCgoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHN3aXBlci5yZWFsSW5kZXgpICsgXCJcXFwiXVwiKSkuZXEoMCkuaW5kZXgoKTtcbiAgICAgICAgICB2YXIgbmV4dFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLm5leHRBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChzd2lwZXIucmVhbEluZGV4KSArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwcmV2VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7IG5ld1RodW1ic0luZGV4ID0gbmV4dFRodW1ic0luZGV4OyB9XG4gICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5leHRUaHVtYnNJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7IH1cbiAgICAgICAgICBlbHNlIGlmIChuZXh0VGh1bWJzSW5kZXggLSBjdXJyZW50VGh1bWJzSW5kZXggPT09IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgeyBuZXdUaHVtYnNJbmRleCA9IGN1cnJlbnRUaHVtYnNJbmRleDsgfVxuICAgICAgICAgIGVsc2UgaWYgKG5leHRUaHVtYnNJbmRleCAtIGN1cnJlbnRUaHVtYnNJbmRleCA8IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgeyBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDsgfVxuICAgICAgICAgIGVsc2UgeyBuZXdUaHVtYnNJbmRleCA9IHByZXZUaHVtYnNJbmRleDsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gc3dpcGVyLnJlYWxJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzICYmIHRodW1ic1N3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5pbmRleE9mKG5ld1RodW1ic0luZGV4KSA8IDApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgICAgaWYgKG5ld1RodW1ic0luZGV4ID4gY3VycmVudFRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gbmV3VGh1bWJzSW5kZXggLSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4ICsgTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobmV3VGh1bWJzSW5kZXggPiBjdXJyZW50VGh1bWJzSW5kZXgpIHtcbiAgICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gbmV3VGh1bWJzSW5kZXggLSBzbGlkZXNQZXJWaWV3ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlVG8obmV3VGh1bWJzSW5kZXgsIGluaXRpYWwgPyAwIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBY3RpdmF0ZSB0aHVtYnNcbiAgICAgIHZhciB0aHVtYnNUb0FjdGl2YXRlID0gMTtcbiAgICAgIHZhciB0aHVtYkFjdGl2ZUNsYXNzID0gc3dpcGVyLnBhcmFtcy50aHVtYnMuc2xpZGVUaHVtYkFjdGl2ZUNsYXNzO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICB0aHVtYnNUb0FjdGl2YXRlID0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgfVxuXG4gICAgICB0aHVtYnNTd2lwZXIuc2xpZGVzLnJlbW92ZUNsYXNzKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCB8fCB0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbigoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHN3aXBlci5yZWFsSW5kZXggKyBpKSArIFwiXFxcIl1cIikpLmFkZENsYXNzKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB0aHVtYnNUb0FjdGl2YXRlOyBpJDEgKz0gMSkge1xuICAgICAgICAgIHRodW1ic1N3aXBlci5zbGlkZXMuZXEoc3dpcGVyLnJlYWxJbmRleCArIGkkMSkuYWRkQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgVGh1bWJzJDEgPSB7XG4gICAgbmFtZTogJ3RodW1icycsXG4gICAgcGFyYW1zOiB7XG4gICAgICB0aHVtYnM6IHtcbiAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICBzbGlkZVRodW1iQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdGh1bWItYWN0aXZlJyxcbiAgICAgICAgdGh1bWJzQ29udGFpbmVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLXRodW1icycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgdGh1bWJzOiB7XG4gICAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICAgIGluaXQ6IFRodW1icy5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICB1cGRhdGU6IFRodW1icy51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uVGh1bWJDbGljazogVGh1bWJzLm9uVGh1bWJDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgdmFyIHJlZiA9IHN3aXBlci5wYXJhbXM7XG4gICAgICAgIHZhciB0aHVtYnMgPSByZWYudGh1bWJzO1xuICAgICAgICBpZiAoIXRodW1icyB8fCAhdGh1bWJzLnN3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnRodW1icy5pbml0KCk7XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRodW1ic1N3aXBlci5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgICBpZiAoIXRodW1ic1N3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHN3aXBlci50aHVtYnMuc3dpcGVyQ3JlYXRlZCAmJiB0aHVtYnNTd2lwZXIpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gU3dpcGVyIENsYXNzXG5cbiAgdmFyIGNvbXBvbmVudHMgPSBbXG4gICAgRGV2aWNlJDEsXG4gICAgU3VwcG9ydCQxLFxuICAgIEJyb3dzZXIkMSxcbiAgICBSZXNpemUsXG4gICAgT2JzZXJ2ZXIkMSxcbiAgICBWaXJ0dWFsJDEsXG4gICAgS2V5Ym9hcmQkMSxcbiAgICBNb3VzZXdoZWVsJDEsXG4gICAgTmF2aWdhdGlvbiQxLFxuICAgIFBhZ2luYXRpb24kMSxcbiAgICBTY3JvbGxiYXIkMSxcbiAgICBQYXJhbGxheCQxLFxuICAgIFpvb20kMSxcbiAgICBMYXp5JDEsXG4gICAgQ29udHJvbGxlciQxLFxuICAgIEExMXksXG4gICAgSGlzdG9yeSQxLFxuICAgIEhhc2hOYXZpZ2F0aW9uJDEsXG4gICAgQXV0b3BsYXkkMSxcbiAgICBFZmZlY3RGYWRlLFxuICAgIEVmZmVjdEN1YmUsXG4gICAgRWZmZWN0RmxpcCxcbiAgICBFZmZlY3RDb3ZlcmZsb3csXG4gICAgVGh1bWJzJDFcbiAgXTtcblxuICBpZiAodHlwZW9mIFN3aXBlci51c2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgU3dpcGVyLnVzZSA9IFN3aXBlci5DbGFzcy51c2U7XG4gICAgU3dpcGVyLmluc3RhbGxNb2R1bGUgPSBTd2lwZXIuQ2xhc3MuaW5zdGFsbE1vZHVsZTtcbiAgfVxuXG4gIFN3aXBlci51c2UoY29tcG9uZW50cyk7XG5cbiAgcmV0dXJuIFN3aXBlcjtcblxufSkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js\n");

/***/ }),

/***/ "./node_modules/_ua-device@0.1.10@ua-device/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/_ua-device@0.1.10@ua-device/index.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! ./lib/ua-device.js */ \"./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL191YS1kZXZpY2VAMC4xLjEwQHVhLWRldmljZS9pbmRleC5qcz83MDkwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvdWEtZGV2aWNlLmpzJyk7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/index.js\n");

/***/ }),

/***/ "./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js":
/*!*******************************************************************!*\
  !*** ./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var UA = __webpack_require__(/*! ./useragent-base */ \"./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js\");\nmodule.exports = function (ua) {\n    var uaData = new UA(ua);\n    var match;\n    var tmpMatch;\n    // handle mobile device\n    if (uaData.device.type === 'mobile' || uaData.device.type === 'tablet') {\n\n        // get manufacturer through the key words\n        if (match = ua.match(/(ZTE|Samsung|Motorola|HTC|Coolpad|Huawei|Lenovo|LG|Sony Ericsson|Oppo|TCL|Vivo|Sony|Meizu|Nokia)/i)) {\n            uaData.device.manufacturer = match[1];\n            if (uaData.device.model && uaData.device.model.indexOf(match[1]) >= 0) {\n                uaData.device.model = uaData.device.model.replace(match[1], '');\n            }\n        }\n        // handle Apple\n        // 苹果就这3种iPod iPad iPhone\n        if (match = ua.match(/(iPod|iPad|iPhone)/i)) {\n            uaData.device.manufacturer = 'Apple';\n            uaData.device.model = match[1];\n        }\n        // handle Samsung\n        // 特殊型号可能以xxx-开头 或者直接空格接型号 兼容build结尾或直接)结尾\n        // Galaxy nexus才是三星 nexus是google手机\n        // 三星手机类型:galaxy xxx|SM-xxx|GT-xxx|SCH-xxx|SGH-xxx|SPH-xxx|SHW-xxx  若这些均未匹配到,则启用在中关村在线爬取到的机型白名单进行判断\n        else if (match = ua.match(/[-\\s](Galaxy[\\s-_]nexus|Galaxy[\\s-_]\\w*[\\s-_]\\w*|Galaxy[\\s-_]\\w*|SM-\\w*|GT-\\w*|s[cgp]h-\\w*|shw-\\w*|ATIV|i9070|omnia|s7568|A3000|A3009|A5000|A5009|A7000|A7009|A8000|C101|C1116|C1158|E400|E500F|E7000|E7009|G3139D|G3502|G3502i|G3508|G3508J|G3508i|G3509|G3509i|G3558|G3559|G3568V|G3586V|G3589W|G3606|G3608|G3609|G3812|G388F|G5108|G5108Q|G5109|G5306W|G5308W|G5309W|G550|G600|G7106|G7108|G7108V|G7109|G7200|G720NO|G7508Q|G7509|G8508S|G8509V|G9006V|G9006W|G9008V|G9008W|G9009D|G9009W|G9198|G9200|G9208|G9209|G9250|G9280|I535|I679|I739|I8190N|I8262|I879|I879E|I889|I9000|I9060|I9082|I9082C|I9082i|I9100|I9100G|I9108|I9128|I9128E|I9128i|I9152|I9152P|I9158|I9158P|I9158V|I9168|I9168i|I9190|I9192|I9195|I9195I|I9200|I9208|I9220|I9228|I9260|I9268|I9300|I9300i|I9305|I9308|I9308i|I939|I939D|I939i|I9500|I9502|I9505|I9507V|I9508|I9508V|I959|J100|J110|J5008|J7008|N7100|N7102|N7105|N7108|N7108D|N719|N750|N7505|N7506V|N7508V|N7509V|N900|N9002|N9005|N9006|N9008|N9008S|N9008V|N9009|N9100|N9106W|N9108V|N9109W|N9150|N916|N9200|P709|P709E|P729|S6358|S7278|S7278U|S7562C|S7562i|S7898i|b9388)[\\s\\)]/i)) {\n            uaData.device.manufacturer = 'Samsung';\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z]+[0-9]+[A-Z]*, 例如 G9006 G9006V 其实应该是G9006 另外三星只保留3位\n            uaData.device.model = match[1].replace(/Galaxy S VI/i, 'Galaxy S6')\n                .replace(/Galaxy S V/i, 'Galaxy S5')\n                .replace(/Galaxy S IV/i, 'Galaxy S4')\n                .replace(/Galaxy s III/i, 'Galaxy S3')\n                .replace(/Galaxy S II/i, 'Galaxy S2')\n                .replace(/Galaxy S I/i, 'Galaxy S1')\n                .replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, '$1');\n        }\n        // 针对三星已经匹配出的数据做处理\n        else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'samsung' && uaData.device.model) {\n            uaData.device.model = uaData.device.model.replace(/Galaxy S VI/i, 'Galaxy S6')\n                .replace(/Galaxy S V/i, 'Galaxy S5')\n                .replace(/Galaxy S IV/i, 'Galaxy S4')\n                .replace(/Galaxy s III/i, 'Galaxy S3')\n                .replace(/Galaxy S II/i, 'Galaxy S2')\n                .replace(/Galaxy S I/i, 'Galaxy S1')\n                .replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, '$1');\n        }\n        // handle Huawei\n        // 兼容build结尾或直接)结尾\n        // 华为机型特征:Huawei[\\s-_](\\w*[-_]?\\w*)  或者以 7D-  ALE-  CHE-等开头\n        else if (match = ua.match(/(Huawei[\\s-_](\\w*[-_]?\\w*)|\\s(7D-\\w*|ALE-\\w*|ATH-\\w*|CHE-\\w*|CHM-\\w*|Che1-\\w*|Che2-\\w*|D2-\\w*|G616-\\w*|G620S-\\w*|G621-\\w*|G660-\\w*|G750-\\w*|GRA-\\w*|Hol-\\w*|MT2-\\w*|MT7-\\w*|PE-\\w*|PLK-\\w*|SC-\\w*|SCL-\\w*|H60-\\w*|H30-\\w*)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Huawei';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:xxx-[A-Z][0-9]+ 例如  H30-L01  H30-L00  H30-L20  都应该是 H30-L\n            // h30-l  h30-h  h30-t 都是H30\n            if (match = uaData.device.model.match(/(\\w*)[\\s-_]+[a-z0-9]+/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // handle Xiaomi\n        // 兼容build结尾或直接)结尾 以及特殊的HM处理方案(build/hm2013011)\n        // xiaomi手机类型: mi m1 m2 m3 hm 开头\n        // hongmi有特殊判断build/hm2015011\n        else if (match = ua.match(/;\\s(mi|m1|m2|m3|m4|hm)(\\s*\\w*)[\\s\\)]/i)) {\n            if (tmpMatch = ua.match(/(meitu|MediaPad)/i)) {\n                // 美图手机名字冒充小米 比如 meitu m4 mizhi\n                uaData.device.manufacturer = tmpMatch[1];\n                uaData.device.model = '';\n            }\n            // 若匹配出的 match[2]没空格 会出现很多例如 mizi mizhi miha 但也会出现mi3 minote之类 特殊处理下\n            else if (match[2].length > 0 && !((/\\s/).test(match[2]))) {\n                if (tmpMatch = match[2].match(/(\\d)/i)) {\n                    uaData.device.model = match[1] + '-' + tmpMatch[1];\n                }\n            }\n            else {\n                uaData.device.manufacturer = 'Xiaomi';\n                if (match[2] && match[2].length > 0) {\n                    match[2] = match[2].replace(/\\s/, '');\n                    uaData.device.model = (match[1].substr(match[1].length - 2) + '-' + match[2]).replace(/m(\\d)-/i, 'MI-$1');\n                }\n                else {\n                    uaData.device.model = (match[1].substr(match[1].length - 2)).replace(/m(\\d)/i, 'MI-$1');\n                }\n\n                // 解决移动联通等不同发行版导致的机型不同问题\n                // 特征:mi-3c,例如mi-4LTE mi-4 其实应该是 mi-4\n                if (/(mi|hm)(-\\d)/i.test(uaData.device.model)) {\n                    // 看看是不是 MI-3S  MI-4S....\n                    if (match = uaData.device.model.match(/(mi|hm)(-\\ds)/i)) {\n                        uaData.device.model = match[1] + match[2];\n                    }\n                    // 防止 MI-20150XX等滥竽充数成为MI-2\n                    else if (match = uaData.device.model.match(/(mi|hm)(-\\d{2})/i)) {\n                        uaData.device.model = match[1];\n                    }\n                    // 将mi-3c mi-3a mi-3w等合为mi-3\n                    else if (match = uaData.device.model.match(/(mi|hm)(-\\d)[A-Z]/i)) {\n                        uaData.device.model = match[1] + match[2];\n                    }\n                }\n                // 去除 mi-4g这样的东西\n                if (match = uaData.device.model.match(/(mi|hm)(-\\dg)/i)) {\n                    uaData.device.model = match[1];\n                }\n            }\n        }\n        else if (/build\\/HM\\d{0,7}\\)/i.test(ua)) {\n            uaData.device.manufacturer = 'Xiaomi';\n            uaData.device.model = 'HM';\n        }\n        else if (match = ua.match(/redmi\\s?(\\d+)?/i)) {\n            uaData.device.manufacturer = 'Xiaomi';\n            uaData.device.model = 'HM-' + match[1];\n        }\n        else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'xiaomi' && uaData.device.model) {\n            // 针对通过base库判断出数据时命名风格不同。特殊处理适配如下\n            if (match = uaData.device.model.match(/mi-one/i)) {\n                uaData.device.model = 'MI-1';\n            }\n            // mi 2\n            else if (match = uaData.device.model.match(/mi-two/i)) {\n                uaData.device.model = 'MI-2';\n            }\n            // 20150xxx2014501\n            else if (match = uaData.device.model.match(/\\d{6}/i)) {\n                uaData.device.model = '';\n            }\n            else if (match = uaData.device.model.match(/redmi/i)) {\n                uaData.device.model = uaData.device.model.toUpperCase().replace(/redmi/i, 'HM');\n            }\n            // m1 m2 m3 写法不标准 另外判断是否是 m1-s\n            else if (match = uaData.device.model.match(/(m\\d)[\\s-_](s?)/i)) {\n                uaData.device.model = match[1].replace(/m/, 'MI-') + match[2];\n            }\n            // mi-2w  mi-3w 等格式化为mi-2  mi-3\n            else if (match = uaData.device.model.match(/(hm|mi)[\\s-_](\\d?)[a-rt-z]/i)) {\n                if (tmpMatch = uaData.device.model.match(/(mi|hm)[\\s-_](note|pad)(\\d?s?)/i)) {\n                    uaData.device.model = tmpMatch[1] + '-' + tmpMatch[2] + tmpMatch[3];\n                }\n                else {\n                    uaData.device.model = match[2] ? match[1] + '-' + match[2] : match[1];\n                }\n            }\n            // 处理hm\n            else if (match = uaData.device.model.match(/hm/i)) {\n                // 判断是不是 hm-201xxx充数\n                if (match = uaData.device.model.match(/(hm)[\\s-_](\\d{2})/i)) {\n                    uaData.device.model = 'HM';\n                }\n                // 判断是不是 hm-2s hm-1s\n                else if (match = uaData.device.model.match(/(hm)[\\s-_](\\ds)/i)) {\n                    uaData.device.model = 'HM-' + match[2];\n                }\n                else if (match = uaData.device.model.match(/(hm)[\\s-_](\\d)[a-z]/i)) {\n                    uaData.device.model = 'HM-' + match[2];\n                }\n                else {\n                    uaData.device.model = 'HM';\n                }\n                // 过滤类似 2g 3g等数据\n                if (/hm-\\dg/.test(uaData.device.model)) {\n                    uaData.device.model = 'HM';\n                }\n            }\n        }\n        // handle Vivo\n        // 兼容build结尾或直接)结尾\n        // vivo机型特征: Vivo[\\s-_](\\w*)  或者以 E1  S11t  S7t 等开头\n        else if (match = ua.match(/(vivo[\\s-_](\\w*)|\\s(E1\\w?|E3\\w?|E5\\w?|V1\\w?|V2\\w?|S11\\w?|S12\\w?|S1\\w?|S3\\w?|S6\\w?|S7\\w?|S9\\w?|X1\\w?|X3\\w?|X520\\w?|X5\\w?|X5Max|X5Max+|X5Pro|X5SL|X710F|X710L|Xplay|Xshot|Xpaly3S|Y11\\w?|Y11i\\w?|Y11i\\w?|Y13\\w?|Y15\\w?|Y17\\w?|Y18\\w?|Y19\\w?|Y1\\w?|Y20\\w?|Y22\\w?|Y22i\\w?|Y23\\w?|Y27\\w?|Y28\\w?|Y29\\w?|Y33\\w?|Y37\\w?|Y3\\w?|Y613\\w?|Y622\\w?|Y627\\w?|Y913\\w?|Y923\\w?|Y927\\w?|Y928\\w?|Y929\\w?|Y937\\w?)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Vivo';\n            uaData.device.model = match[1];\n            // 首先剔除 viv-  vivo-  bbg- 等打头的内容\n            uaData.device.model = uaData.device.model.replace(/(viv[\\s-_]|vivo[\\s-_]|bbg[\\s-_])/i, '');\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  X5F X5L X5M X5iL 都应该是 X5\n            if (match = uaData.device.model.match(/([a-z]+[0-9]+)i?[a-z]?[\\s-_]?/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // handle Oppo\n        else if (match = ua.match(/(Oppo[\\s-_](\\w*)|\\s(1100|1105|1107|3000|3005|3007|6607|A100|A103|A105|A105K|A109|A109K|A11|A113|A115|A115K|A121|A125|A127|A129|A201|A203|A209|A31|A31c|A31t|A31u|A51kc|A520|A613|A615|A617|E21W|Find|Mirror|N5110|N5117|N5207|N5209|R2010|R2017|R6007|R7005|R7007|R7c|R7t|R8000|R8007|R801|R805|R807|R809T|R8107|R8109|R811|R811W|R813T|R815T|R815W|R817|R819T|R8200|R8205|R8207|R821T|R823T|R827T|R830|R830S|R831S|R831T|R833T|R850|Real|T703|U2S|U521|U525|U529|U539|U701|U701T|U705T|U705W|X9000|X9007|X903|X905|X9070|X9077|X909|Z101|R829T)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Oppo';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  A31c A31s 都应该是 A31\n            // 对 Plus 做特殊处理\n            if (match = uaData.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n            else if (match = uaData.device.model.match(/(\\w*-?[a-z]+[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'oppo' && uaData.device.model) {\n            // 针对base库的数据做数据格式化处理\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  A31c A31s 都应该是 A31\n            // 对 Plus 做特殊处理\n            if (match = uaData.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n            else if (match = uaData.device.model.match(/(\\w*-?[a-z]+[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // handle Lenovo\n        // 兼容build结尾或直接)结尾 兼容Lenovo-xxx/xxx以及Leveno xxx build等\n        else if (match = ua.match(/(Lenovo[\\s-_](\\w*[-_]?\\w*)|\\s(A3580|A3860|A5500|A5600|A5860|A7600|A806|A800|A808T|A808T-I|A936|A938t|A788t|K30-E|K30-T|K30-W|K50-T3s|K50-T5|K80M|K910|K910e|K920|S90-e|S90-t|S90-u|S968T|X2-CU|X2-TO|Z90-3|Z90-7)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Lenovo';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  A360t A360 都应该是 A360\n            if (match = uaData.device.model.match(/([a-z]+[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // handle coolpad\n        else if (match = ua.match(/(Coolpad[\\s-_](\\w*)|\\s(7295C|7298A|7620L|8908|8085|8970L|9190L|Y80D)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Coolpad';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  8297-t01 8297-c01 8297w 都应该是 8297\n            if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'coolpad' && uaData.device.model) {\n            // base 库适配\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  8297-t01 8297-c01 8297w 都应该是 8297\n            if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // handle meizu\n        else if (match = ua.match(/\\s(mx\\d*\\w*|mz-(\\w*))\\s(\\w*)\\s*\\w*\\s*build/i)) {\n            uaData.device.manufacturer = 'Meizu';\n            var tmpModel = match[2] ? match[2] : match[1];\n            if (match[3]) {\n                uaData.device.model = tmpModel + '-' + match[3];\n            }\n            else {\n                uaData.device.model = tmpModel + '';\n            }\n        }\n        else if (match = ua.match(/M463C|M35\\d/i)) {\n            uaData.device.manufacturer = 'Meizu';\n            uaData.device.model = match[1];\n        }\n        // handle htc\n        else if (match = ua.match(/(Htc[-_\\s](\\w*)|\\s(601e|606w|608t|609d|610t|6160|619d|620G|626d|626s|626t|626w|709d|801e|802d|802t|802w|809D|816d|816e|816t|816v|816w|826d|826s|826t|826w|828w|901e|919d|A310e|A50AML|A510e|A620d|A620e|A620t|A810e|A9191|Aero|C620d|C620e|C620t|D316d|D516d|D516t|D516w|D820mt|D820mu|D820t|D820ts|D820u|D820us|E9pt|E9pw|E9sw|E9t|HD7S|M8Et|M8Sd|M8St|M8Sw|M8d|M8e|M8s|M8si|M8t|M8w|M9W|M9ew|Phablet|S510b|S510e|S610d|S710d|S710e|S720e|S720t|T327t|T328d|T328t|T328w|T329d|T329t|T329w|T528d|T528t|T528w|T8698|WF5w|X315e|X710e|X715e|X720d|X920e|Z560e|Z710e|Z710t|Z715e)[\\s\\)])/)) {\n            uaData.device.manufacturer = 'Htc';\n            uaData.device.model = match[1];\n        }\n        // handle Gionee\n        else if (match = ua.match(/(Gionee[\\s-_](\\w*)|\\s(GN\\d+\\w*)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Gionee';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n        }\n        // handle LG\n        else if (match = ua.match(/(LG[-_](\\w*)|\\s(D728|D729|D802|D855|D856|D857|D858|D859|E985T|F100L|F460|H778|H818|H819|P895|VW820)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Lg';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n        }\n        // handle tcl\n        else if (match = ua.match(/(Tcl[\\s-_](\\w*)|\\s(H916T|P588L|P618L|P620M|P728M)[\\s\\)])/)) {\n            uaData.device.manufacturer = 'Tcl';\n            uaData.device.model = match[1];\n        }\n        // ZTE\n        else if (match = ua.match(/(V9180|N918)/i)) {\n            uaData.device.manufacturer = 'Zte';\n            uaData.device.model = match[1];\n        }\n        else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'zte' && uaData.device.model) {\n            // base 库适配\n            // 解决移动联通等不同发行版导致的机型不同问题\n            // 特征:[A-Z][0-9]+[A-Z] 例如  Q505T Q505u 都应该是 Q505\n            if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n                uaData.device.model = match[1];\n            }\n        }\n        // UIMI\n        else if (match = ua.match(/(UIMI\\w*|umi\\w*)[\\s-_](\\w*)\\s*\\w*\\s*build/i)) {\n            uaData.device.manufacturer = 'Uimi';\n            if (match[2]) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n            else {\n                uaData.device.model = match[1] + '';\n            }\n        }\n        // eton\n        else if (match = ua.match(/eton[\\s-_](\\w*)/i)) {\n            uaData.device.manufacturer = 'Eton';\n            uaData.device.model = match[1];\n        }\n        // Smartisan\n        else if (match = ua.match(/(SM705|SM701|YQ601|YQ603)/i)) {\n            uaData.device.manufacturer = 'Smartisan';\n            uaData.device.model = ({\n                SM705: 'T1',\n                SM701: 'T1',\n                YQ601: 'U1',\n                YQ603: 'U1'\n            })[match[1]] || match[1];\n        }\n        // handle Asus\n        else if (match = ua.match(/(Asus[\\s-_](\\w*)|\\s(A500CG|A500KL|A501CG|A600CG|PF400CG|PF500KL|T001|X002|X003|ZC500TG|ZE550ML|ZE551ML)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Asus';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n        }\n        // handle nubia\n        else if (match = ua.match(/(Nubia[-_\\s](\\w*)|(NX501|NX505J|NX506J|NX507J|NX503A|nx\\d+\\w*)[\\s\\)])/i)) {\n            uaData.device.manufacturer = 'Nubia';\n            if (match[2]) {\n                uaData.device.model = match[2];\n            }\n            else if (match[3]) {\n                uaData.device.model = match[3];\n            }\n        }\n        // handle haier\n        else if (match = ua.match(/(HT-\\w*)|Haier[\\s-_](\\w*-?\\w*)/i)) {\n            uaData.device.manufacturer = 'Haier';\n            if (match[1]) {\n                uaData.device.model = match[1];\n            }\n            else if (match[2]) {\n                uaData.device.model = match[2];\n            }\n        }\n        // tianyu\n        else if (match = ua.match(/K-Touch[\\s-_](tou\\s?ch\\s?(\\d)|\\w*)/i)) {\n            uaData.device.manufacturer = 'K-Touch';\n            if (match[2]) {\n                uaData.device.model = 'Ktouch' + match[2];\n            }\n            else {\n                uaData.device.model = match[1];\n            }\n        }\n\n        // DOOV\n        else if (match = ua.match(/Doov[\\s-_](\\w*)/i)) {\n            uaData.device.manufacturer = 'Doov';\n            uaData.device.model = match[1];\n        }\n        // coobee\n        else if (/koobee/i.test(ua)) {\n            uaData.device.manufacturer = 'koobee';\n        }\n\n        // sony\n        else if (/C69/i.test(ua)) {\n            uaData.device.manufacturer = 'Sony';\n        }\n\n        // haojixing\n        else if (/N787|N818S/i.test(ua)) {\n            uaData.device.manufacturer = 'Haojixing';\n        }\n\n        // haisense\n        else if (match = ua.match(/(hs-|Hisense[\\s-_])(\\w*)/i)) {\n            uaData.device.manufacturer = 'Hisense';\n            uaData.device.model = match[2];\n        }\n\n        // format the style of manufacturer\n        if (uaData.device.manufacturer) {\n            uaData.device.manufacturer = uaData.device.manufacturer.substr(0, 1).toUpperCase() + uaData.device.manufacturer.substr(1).toLowerCase();\n        }\n        // format the style of model\n        if (uaData.device.model) {\n            uaData.device.model = uaData.device.model.toUpperCase().replace(/-+|_+|\\s+/g, ' ');\n            uaData.device.model = uaData.device.model.match(/\\s*(\\w*\\s*\\w*)/)[1].replace(/\\s+/, '-');\n\n            // 针对三星、华为做去重的特殊处理\n            if (uaData.device.manufacturer === 'Samsung') {\n                uaData.device.model = ({\n                    'SCH-I95': 'GT-I950',\n                    'SCH-I93': 'GT-I930',\n                    'SCH-I86': 'GT-I855',\n                    'SCH-N71': 'GT-N710',\n                    'SCH-I73': 'GT-S789',\n                    'SCH-P70': 'GT-I915'\n                })[uaData.device.model] || uaData.device.model;\n            }\n            else if (uaData.device.manufacturer === 'Huawei') {\n                uaData.device.model = ({\n                    CHE1: 'CHE',\n                    CHE2: 'CHE',\n                    G620S: 'G621',\n                    C8817D: 'G621'\n                })[uaData.device.model] || uaData.device.model;\n            }\n        }\n\n        // 针对xiaomi 的部分数据没有格式化成功,格式化1次\n        if (uaData.device.manufacturer && uaData.device.manufacturer === 'Xiaomi') {\n            if (match = uaData.device.model.match(/(hm|mi)-(note)/i)) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n            else if (match = uaData.device.model.match(/(hm|mi)-(\\ds?)/i)) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n            else if (match = uaData.device.model.match(/(hm|mi)-(\\d)[a-rt-z]/i)) {\n                uaData.device.model = match[1] + '-' + match[2];\n            }\n        }\n    }\n    // handle browser\n    // if (!uaData.browser.name) {\n    // ua = ua.toLowerCase();\n    if (uaData.device.type === 'desktop') {\n        /*\n         * 360 security Explorer\n         */\n        if (match = /360se(?:[ \\/]([\\w.]+))?/i.exec(ua)) {\n            uaData.browser.name = '360 security Explorer';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        /**\n         * the world\n         */\n        else if (match = /the world(?:[ \\/]([\\w.]+))?/i.exec(ua)) {\n            uaData.browser.name = 'the world';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        /**\n         * tencenttraveler\n         */\n        else if (match = /tencenttraveler ([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'tencenttraveler';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        /**\n         * LBBROWSER\n         */\n        else if (match = /LBBROWSER/i.exec(ua)) {\n            uaData.browser.name = 'LBBROWSER';\n        }\n    }\n    else if (uaData.device.type === 'mobile' || uaData.device.type === 'tablet') {\n        /**\n         * BaiduHD\n         */\n        if (match = /BaiduHD\\s+([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'BaiduHD';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        /**\n         * 360 Browser\n         */\n        else if (match = /360.s*aphone\\s*browser\\s*\\(version\\s*([\\w.]+)\\)/i.exec(ua)) {\n            uaData.browser.name = '360 Browser';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        /**\n         * Baidu Browser\n         */\n        else if (match = /flyflow\\/([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'Baidu Browser';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * Baidu HD\n         */\n        else if (match = /baiduhd ([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'Baidu HD';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * baidubrowser\n         */\n        else if (match = /baidubrowser\\/([\\d\\.]+)\\s/i.exec(ua)) {\n            uaData.browser.name = 'baidubrowser';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * LieBaoFast\n         */\n        else if (match = /LieBaoFast\\/([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'LieBao Fast';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * LieBao\n         */\n        else if (match = /LieBao\\/([\\w.]+)/i.exec(ua)) {\n            uaData.browser.name = 'LieBao';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * SOUGOU\n         */\n        else if (match = /Sogou\\w+\\/([0-9\\.]+)/i.exec(ua)) {\n            uaData.browser.name = 'SogouMobileBrowser';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * 百度国际\n         */\n        else if (match = /bdbrowser\\w+\\/([0-9\\.]+)/i.exec(ua)) {\n            uaData.browser.name = '百度国际';\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n\n        /**\n         * Android Chrome Browser\n         */\n        else if (uaData.os.name === 'Android' && /safari/i.test(ua) && (match = /chrome\\/([0-9\\.]+)/i.exec(ua))) {\n            if (tmpMatch = ua.match(/\\s+(\\w+Browser)\\/?([\\d\\.]*)/)) {\n                uaData.browser.name = tmpMatch[1];\n                if (tmpMatch[2]) {\n                    uaData.browser.version = {original: tmpMatch[2]};\n                } else {\n                    uaData.browser.version = {original: match[1]};\n                }\n            } else {\n                uaData.browser.name = 'Android Chrome';\n                uaData.browser.version = {original: match[1]};\n            }\n        }\n\n        /**\n         * Android Google Browser\n         */\n        else if (uaData.os.name === 'Android' && /safari/i.test(ua) && (match = /version\\/([0-9\\.]+)/i.exec(ua))) {\n            if (tmpMatch = ua.match(/\\s+(\\w+Browser)\\/?([\\d\\.]*)/)) {\n                uaData.browser.name = tmpMatch[1];\n                if (tmpMatch[2]) {\n                    uaData.browser.version = {original: tmpMatch[2]};\n                } else {\n                    uaData.browser.version = {original: match[1]};\n                }\n            } else {\n                uaData.browser.name = 'Android Browser';\n                uaData.browser.version = {original: match[1]};\n            }\n        }\n\n        /**\n         * 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206' belongs to Safari\n         */\n        else if (/(ipad|iphone).* applewebkit\\/.* mobile/i.test(ua)) {\n            uaData.browser.name = 'Safari';\n        }\n    }\n    if (match = ua.match(/baiduboxapp\\/?([\\d\\.]*)/i)) {\n        uaData.browser.name = '百度框';\n        if (match[1]) {\n            uaData.browser.version = {\n                original: match[1]\n            };\n        }\n        // uaData.browser.name = 'baidu box';\n    }\n    else if (/BaiduLightAppRuntime/i.test(ua)) {\n        uaData.browser.name = '轻应用runtime';\n        // uaData.browser.name = 'qing runtime';\n    }\n    else if (/Weibo/i.test(ua)) {\n        uaData.browser.name = '微博';\n        // uaData.browser.name = 'weibo';\n    }\n    else if (/MQQ/i.test(ua)) {\n        uaData.browser.name = '手机QQ';\n        // uaData.browser.name = 'mobile qq';\n    }\n    else if (/hao123/i.test(ua)) {\n        uaData.browser.name = 'hao123';\n    }\n    // }\n    if (match = /MicroMessenger\\/([\\w.]+)/i.exec(ua)) {\n        uaData.browser.name = '微信';\n        var tmpVersion = (match[1]).replace(/_/g, '.');\n        tmpMatch = /(\\d+\\.\\d+\\.\\d+\\.\\d+)/.exec(tmpVersion);\n        if(tmpMatch) {\n            tmpVersion = tmpMatch[1];\n        }\n        uaData.browser.version = {\n            original: tmpVersion\n        };\n    }\n    if (match = /UCBrowser\\/([\\w.]+)/i.exec(ua)) {\n        uaData.browser.name = 'UC Browser';\n        uaData.browser.version = {\n            original: match[1]\n        };\n    }\n    if (match = /OPR\\/([\\w.]+)/i.exec(ua)) {\n        uaData.browser.name = 'Opera';\n        uaData.browser.version = {\n            original: match[1]\n        };\n    } else if (match = /OPiOS\\/([\\w.]+)/i.exec(ua)) {\n        uaData.browser.name = 'Opera';\n        uaData.browser.version = {\n            original: match[1]\n        };\n    }\n    // IE 11\n    else if (/Trident\\/7/i.test(ua) && /rv:11/i.test(ua)) {\n        uaData.browser.name = 'Internet Explorer';\n        uaData.browser.version = {\n            major: '11',\n            original: '11'\n        };\n    }\n    // Microsoft Edge\n    else if (/Edge\\/12/i.test(ua) && /Windows Phone|Windows NT/i.test(ua)) {\n        uaData.browser.name = 'Microsoft Edge';\n        uaData.browser.version = {\n            major: '12',\n            original: '12'\n        };\n    }\n    // miui browser\n    else if (match = /miuibrowser\\/([\\w.]+)/i.exec(ua)) {\n        uaData.browser.name = 'miui browser';\n        uaData.browser.version = {\n            original: match[1]\n        };\n    }\n    // Safari\n    if (!uaData.browser.name) {\n        if (match = /Safari\\/([\\w.]+)/i.exec(ua) && /Version/i.test(ua)) {\n            uaData.browser.name = 'Safari';\n        }\n    }\n    if (uaData.browser.name && !uaData.browser.version) {\n        if (match = /Version\\/([\\w.]+)/i.exec(ua)) {\n            uaData.browser.version =  {\n                original: match[1]\n            };\n        }\n    }\n\n    // if (uaData.os.name === 'Windows' && uaData.os.version) {\n    //  // Windows 8.1\n    //  if (uaData.os.version.alias === 'NT 6.3') {\n    //      uaData.os.version.alias = '8.1';\n    //  }\n    // }\n    // handle os\n    if (uaData.os.name === 'Windows' || /Windows/i.test(ua)) {\n        uaData.os.name = 'Windows';\n        if (/NT 6.3/i.test(ua)) {\n            uaData.os.version = {\n                alias: '8.1',\n                original: '8.1'\n            };\n        }\n        else if (/NT 6.4/i.test(ua) || /NT 10.0/i.test(ua)) {\n            uaData.os.version = {\n                alias: '10',\n                original: '10'\n            };\n        }\n    }\n    else if (uaData.os.name === 'Mac OS X') {\n        uaData.os.name = 'Mac OS X';\n        if (match = /Mac OS X[\\s\\_\\-\\/](\\d+[\\.\\-\\_]\\d+[\\.\\-\\_]?\\d*)/i.exec(ua)) {\n            uaData.os.version = {\n                alias: match[1].replace(/_/g, '.'),\n                original: match[1].replace(/_/g, '.')\n            };\n        }\n        else {\n            uaData.os.version = {\n                alias: '',\n                original: ''\n            };\n        }\n    }\n    else if (/Android/i.test(uaData.os.name)) {\n        if (match = ua.match(/Android[\\s\\_\\-\\/i686]?[\\s\\_\\-\\/](\\d+[\\.\\-\\_]\\d+[\\.\\-\\_]?\\d*)/i)) {\n            uaData.os.version = {\n                alias: match[1],\n                original: match[1]\n            };\n        }\n    }\n    return uaData;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91YS1kZXZpY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91YS1kZXZpY2UuanM/Zjk2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgVUEgPSByZXF1aXJlKCcuL3VzZXJhZ2VudC1iYXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1YSkge1xuICAgIHZhciB1YURhdGEgPSBuZXcgVUEodWEpO1xuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgdG1wTWF0Y2g7XG4gICAgLy8gaGFuZGxlIG1vYmlsZSBkZXZpY2VcbiAgICBpZiAodWFEYXRhLmRldmljZS50eXBlID09PSAnbW9iaWxlJyB8fCB1YURhdGEuZGV2aWNlLnR5cGUgPT09ICd0YWJsZXQnKSB7XG5cbiAgICAgICAgLy8gZ2V0IG1hbnVmYWN0dXJlciB0aHJvdWdoIHRoZSBrZXkgd29yZHNcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhaVEV8U2Ftc3VuZ3xNb3Rvcm9sYXxIVEN8Q29vbHBhZHxIdWF3ZWl8TGVub3ZvfExHfFNvbnkgRXJpY3Nzb258T3Bwb3xUQ0x8Vml2b3xTb255fE1laXp1fE5va2lhKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGlmICh1YURhdGEuZGV2aWNlLm1vZGVsICYmIHVhRGF0YS5kZXZpY2UubW9kZWwuaW5kZXhPZihtYXRjaFsxXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB1YURhdGEuZGV2aWNlLm1vZGVsLnJlcGxhY2UobWF0Y2hbMV0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgQXBwbGVcbiAgICAgICAgLy8g6Iu55p6c5bCx6L+ZM+enjWlQb2QgaVBhZCBpUGhvbmVcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhpUG9kfGlQYWR8aVBob25lKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQXBwbGUnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBTYW1zdW5nXG4gICAgICAgIC8vIOeJueauiuWei+WPt+WPr+iDveS7pXh4eC3lvIDlpLQg5oiW6ICF55u05o6l56m65qC85o6l5Z6L5Y+3IOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyBHYWxheHkgbmV4dXPmiY3mmK/kuInmmJ8gbmV4dXPmmK9nb29nbGXmiYvmnLpcbiAgICAgICAgLy8g5LiJ5pif5omL5py657G75Z6L77yaZ2FsYXh5IHh4eHxTTS14eHh8R1QteHh4fFNDSC14eHh8U0dILXh4eHxTUEgteHh4fFNIVy14eHggIOiLpei/meS6m+Wdh+acquWMuemFjeWIsO+8jOWImeWQr+eUqOWcqOS4reWFs+adkeWcqOe6v+eIrOWPluWIsOeahOacuuWei+eZveWQjeWNlei/m+ihjOWIpOaWrVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9bLVxcc10oR2FsYXh5W1xccy1fXW5leHVzfEdhbGF4eVtcXHMtX11cXHcqW1xccy1fXVxcdyp8R2FsYXh5W1xccy1fXVxcdyp8U00tXFx3KnxHVC1cXHcqfHNbY2dwXWgtXFx3KnxzaHctXFx3KnxBVElWfGk5MDcwfG9tbmlhfHM3NTY4fEEzMDAwfEEzMDA5fEE1MDAwfEE1MDA5fEE3MDAwfEE3MDA5fEE4MDAwfEMxMDF8QzExMTZ8QzExNTh8RTQwMHxFNTAwRnxFNzAwMHxFNzAwOXxHMzEzOUR8RzM1MDJ8RzM1MDJpfEczNTA4fEczNTA4SnxHMzUwOGl8RzM1MDl8RzM1MDlpfEczNTU4fEczNTU5fEczNTY4VnxHMzU4NlZ8RzM1ODlXfEczNjA2fEczNjA4fEczNjA5fEczODEyfEczODhGfEc1MTA4fEc1MTA4UXxHNTEwOXxHNTMwNld8RzUzMDhXfEc1MzA5V3xHNTUwfEc2MDB8RzcxMDZ8RzcxMDh8RzcxMDhWfEc3MTA5fEc3MjAwfEc3MjBOT3xHNzUwOFF8Rzc1MDl8Rzg1MDhTfEc4NTA5VnxHOTAwNlZ8RzkwMDZXfEc5MDA4VnxHOTAwOFd8RzkwMDlEfEc5MDA5V3xHOTE5OHxHOTIwMHxHOTIwOHxHOTIwOXxHOTI1MHxHOTI4MHxJNTM1fEk2Nzl8STczOXxJODE5ME58STgyNjJ8STg3OXxJODc5RXxJODg5fEk5MDAwfEk5MDYwfEk5MDgyfEk5MDgyQ3xJOTA4Mml8STkxMDB8STkxMDBHfEk5MTA4fEk5MTI4fEk5MTI4RXxJOTEyOGl8STkxNTJ8STkxNTJQfEk5MTU4fEk5MTU4UHxJOTE1OFZ8STkxNjh8STkxNjhpfEk5MTkwfEk5MTkyfEk5MTk1fEk5MTk1SXxJOTIwMHxJOTIwOHxJOTIyMHxJOTIyOHxJOTI2MHxJOTI2OHxJOTMwMHxJOTMwMGl8STkzMDV8STkzMDh8STkzMDhpfEk5Mzl8STkzOUR8STkzOWl8STk1MDB8STk1MDJ8STk1MDV8STk1MDdWfEk5NTA4fEk5NTA4VnxJOTU5fEoxMDB8SjExMHxKNTAwOHxKNzAwOHxONzEwMHxONzEwMnxONzEwNXxONzEwOHxONzEwOER8TjcxOXxONzUwfE43NTA1fE43NTA2VnxONzUwOFZ8Tjc1MDlWfE45MDB8TjkwMDJ8TjkwMDV8TjkwMDZ8TjkwMDh8TjkwMDhTfE45MDA4VnxOOTAwOXxOOTEwMHxOOTEwNld8TjkxMDhWfE45MTA5V3xOOTE1MHxOOTE2fE45MjAwfFA3MDl8UDcwOUV8UDcyOXxTNjM1OHxTNzI3OHxTNzI3OFV8Uzc1NjJDfFM3NTYyaXxTNzg5OGl8YjkzODgpW1xcc1xcKV0vaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1NhbXN1bmcnO1xuICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAvLyDnibnlvoHvvJpbQS1aXStbMC05XStbQS1aXSosIOS+i+WmgiBHOTAwNiBHOTAwNlYg5YW25a6e5bqU6K+l5pivRzkwMDYg5Y+m5aSW5LiJ5pif5Y+q5L+d55WZM+S9jVxuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdLnJlcGxhY2UoL0dhbGF4eSBTIFZJL2ksICdHYWxheHkgUzYnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBWL2ksICdHYWxheHkgUzUnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJVi9pLCAnR2FsYXh5IFM0JylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IHMgSUlJL2ksICdHYWxheHkgUzMnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJSS9pLCAnR2FsYXh5IFMyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IFMgSS9pLCAnR2FsYXh5IFMxJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFthLXpdK1swLTldezN9KVswLTldP1thLXpdKi9pLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDpkojlr7nkuInmmJ/lt7Lnu4/ljLnphY3lh7rnmoTmlbDmja7lgZrlpITnkIZcbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3NhbXN1bmcnICYmIHVhRGF0YS5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB1YURhdGEuZGV2aWNlLm1vZGVsLnJlcGxhY2UoL0dhbGF4eSBTIFZJL2ksICdHYWxheHkgUzYnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBWL2ksICdHYWxheHkgUzUnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJVi9pLCAnR2FsYXh5IFM0JylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IHMgSUlJL2ksICdHYWxheHkgUzMnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJSS9pLCAnR2FsYXh5IFMyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IFMgSS9pLCAnR2FsYXh5IFMxJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFthLXpdK1swLTldezN9KVswLTldP1thLXpdKi9pLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgSHVhd2VpXG4gICAgICAgIC8vIOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyDljY7kuLrmnLrlnovnibnlvoHvvJpIdWF3ZWlbXFxzLV9dKFxcdypbLV9dP1xcdyopICDmiJbogIXku6UgN0QtICBBTEUtICBDSEUt562J5byA5aS0XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhIdWF3ZWlbXFxzLV9dKFxcdypbLV9dP1xcdyopfFxccyg3RC1cXHcqfEFMRS1cXHcqfEFUSC1cXHcqfENIRS1cXHcqfENITS1cXHcqfENoZTEtXFx3KnxDaGUyLVxcdyp8RDItXFx3KnxHNjE2LVxcdyp8RzYyMFMtXFx3KnxHNjIxLVxcdyp8RzY2MC1cXHcqfEc3NTAtXFx3KnxHUkEtXFx3KnxIb2wtXFx3KnxNVDItXFx3KnxNVDctXFx3KnxQRS1cXHcqfFBMSy1cXHcqfFNDLVxcdyp8U0NMLVxcdyp8SDYwLVxcdyp8SDMwLVxcdyopW1xcc1xcKV0pL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIdWF3ZWknO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDop6PlhrPnp7vliqjogZTpgJrnrYnkuI3lkIzlj5HooYzniYjlr7zoh7TnmoTmnLrlnovkuI3lkIzpl67pophcbiAgICAgICAgICAgIC8vIOeJueW+ge+8mnh4eC1bQS1aXVswLTldKyDkvovlpoIgIEgzMC1MMDEgIEgzMC1MMDAgIEgzMC1MMjAgIOmDveW6lOivpeaYryBIMzAtTFxuICAgICAgICAgICAgLy8gaDMwLWwgIGgzMC1oICBoMzAtdCDpg73mmK9IMzBcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhcXHcqKVtcXHMtX10rW2EtejAtOV0rL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBYaWFvbWlcbiAgICAgICAgLy8g5YW85a65YnVpbGTnu5PlsL7miJbnm7TmjqUp57uT5bC+IOS7peWPiueJueauiueahEhN5aSE55CG5pa55qGIKGJ1aWxkL2htMjAxMzAxMSlcbiAgICAgICAgLy8geGlhb21p5omL5py657G75Z6LOiBtaSBtMSBtMiBtMyBobSDlvIDlpLRcbiAgICAgICAgLy8gaG9uZ21p5pyJ54m55q6K5Yik5patYnVpbGQvaG0yMDE1MDExXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLztcXHMobWl8bTF8bTJ8bTN8bTR8aG0pKFxccypcXHcqKVtcXHNcXCldL2kpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvKG1laXR1fE1lZGlhUGFkKS9pKSkge1xuICAgICAgICAgICAgICAgIC8vIOe+juWbvuaJi+acuuWQjeWtl+WGkuWFheWwj+exsyDmr5TlpoIgbWVpdHUgbTQgbWl6aGlcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHRtcE1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOiLpeWMuemFjeWHuueahCBtYXRjaFsyXeayoeepuuagvCDkvJrlh7rnjrDlvojlpJrkvovlpoIgbWl6aSBtaXpoaSBtaWhhIOS9huS5n+S8muWHuueOsG1pMyBtaW5vdGXkuYvnsbsg54m55q6K5aSE55CG5LiLXG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsyXS5sZW5ndGggPiAwICYmICEoKC9cXHMvKS50ZXN0KG1hdGNoWzJdKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSBtYXRjaFsyXS5tYXRjaCgvKFxcZCkvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgJy0nICsgdG1wTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnWGlhb21pJztcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0gJiYgbWF0Y2hbMl0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL1xccy8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IChtYXRjaFsxXS5zdWJzdHIobWF0Y2hbMV0ubGVuZ3RoIC0gMikgKyAnLScgKyBtYXRjaFsyXSkucmVwbGFjZSgvbShcXGQpLS9pLCAnTUktJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAobWF0Y2hbMV0uc3Vic3RyKG1hdGNoWzFdLmxlbmd0aCAtIDIpKS5yZXBsYWNlKC9tKFxcZCkvaSwgJ01JLSQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAgICAgLy8g54m55b6B77yabWktM2Ms5L6L5aaCbWktNExURSBtaS00IOWFtuWunuW6lOivpeaYryBtaS00XG4gICAgICAgICAgICAgICAgaWYgKC8obWl8aG0pKC1cXGQpL2kudGVzdCh1YURhdGEuZGV2aWNlLm1vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnnIvnnIvmmK/kuI3mmK8gTUktM1MgIE1JLTRTLi4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8obWl8aG0pKC1cXGRzKS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g6Ziy5q2iIE1JLTIwMTUwWFjnrYnmu6Xnq73lhYXmlbDmiJDkuLpNSS0yXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKSgtXFxkezJ9KS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIOWwhm1pLTNjIG1pLTNhIG1pLTN3562J5ZCI5Li6bWktM1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhtaXxobSkoLVxcZClbQS1aXS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5Y676ZmkIG1pLTRn6L+Z5qC355qE5Lic6KW/XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKSgtXFxkZykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgvYnVpbGRcXC9ITVxcZHswLDd9XFwpL2kudGVzdCh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1hpYW9taSc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJ0hNJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9yZWRtaVxccz8oXFxkKyk/L2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdYaWFvbWknO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdITS0nICsgbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3hpYW9taScgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8g6ZKI5a+56YCa6L+HYmFzZeW6k+WIpOaWreWHuuaVsOaNruaXtuWRveWQjemjjuagvOS4jeWQjOOAgueJueauiuWkhOeQhumAgumFjeWmguS4i1xuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvbWktb25lL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdNSS0xJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1pIDJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvbWktdHdvL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdNSS0yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDIwMTUweHh4MjAxNDUwMVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC9cXGR7Nn0vaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goL3JlZG1pL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHVhRGF0YS5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9yZWRtaS9pLCAnSE0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG0xIG0yIG0zIOWGmeazleS4jeagh+WHhiDlj6blpJbliKTmlq3mmK/lkKbmmK8gbTEtc1xuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8obVxcZClbXFxzLV9dKHM/KS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXS5yZXBsYWNlKC9tLywgJ01JLScpICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtaS0ydyAgbWktM3cg562J5qC85byP5YyW5Li6bWktMiAgbWktM1xuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpW1xccy1fXShcXGQ/KVthLXJ0LXpdL2kpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKVtcXHMtX10obm90ZXxwYWQpKFxcZD9zPykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHRtcE1hdGNoWzFdICsgJy0nICsgdG1wTWF0Y2hbMl0gKyB0bXBNYXRjaFszXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXSA/IG1hdGNoWzFdICsgJy0nICsgbWF0Y2hbMl0gOiBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDlpITnkIZobVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC9obS9pKSkge1xuICAgICAgICAgICAgICAgIC8vIOWIpOaWreaYr+S4jeaYryBobS0yMDF4eHjlhYXmlbBcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG0pW1xccy1fXShcXGR7Mn0pL2kpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDliKTmlq3mmK/kuI3mmK8gaG0tMnMgaG0tMXNcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhobSlbXFxzLV9dKFxcZHMpL2kpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0tJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhobSlbXFxzLV9dKFxcZClbYS16XS9pKSkge1xuICAgICAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJ0hNLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDov4fmu6TnsbvkvLwgMmcgM2fnrYnmlbDmja5cbiAgICAgICAgICAgICAgICBpZiAoL2htLVxcZGcvLnRlc3QodWFEYXRhLmRldmljZS5tb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdITSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBWaXZvXG4gICAgICAgIC8vIOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyB2aXZv5py65Z6L54m55b6BOiBWaXZvW1xccy1fXShcXHcqKSAg5oiW6ICF5LulIEUxICBTMTF0ICBTN3Qg562J5byA5aS0XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyh2aXZvW1xccy1fXShcXHcqKXxcXHMoRTFcXHc/fEUzXFx3P3xFNVxcdz98VjFcXHc/fFYyXFx3P3xTMTFcXHc/fFMxMlxcdz98UzFcXHc/fFMzXFx3P3xTNlxcdz98UzdcXHc/fFM5XFx3P3xYMVxcdz98WDNcXHc/fFg1MjBcXHc/fFg1XFx3P3xYNU1heHxYNU1heCt8WDVQcm98WDVTTHxYNzEwRnxYNzEwTHxYcGxheXxYc2hvdHxYcGFseTNTfFkxMVxcdz98WTExaVxcdz98WTExaVxcdz98WTEzXFx3P3xZMTVcXHc/fFkxN1xcdz98WTE4XFx3P3xZMTlcXHc/fFkxXFx3P3xZMjBcXHc/fFkyMlxcdz98WTIyaVxcdz98WTIzXFx3P3xZMjdcXHc/fFkyOFxcdz98WTI5XFx3P3xZMzNcXHc/fFkzN1xcdz98WTNcXHc/fFk2MTNcXHc/fFk2MjJcXHc/fFk2MjdcXHc/fFk5MTNcXHc/fFk5MjNcXHc/fFk5MjdcXHc/fFk5MjhcXHc/fFk5MjlcXHc/fFk5MzdcXHc/KVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVml2byc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAvLyDpppblhYjliZTpmaQgdml2LSAgdml2by0gIGJiZy0g562J5omT5aS055qE5YaF5a65XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdWFEYXRhLmRldmljZS5tb2RlbC5yZXBsYWNlKC8odml2W1xccy1fXXx2aXZvW1xccy1fXXxiYmdbXFxzLV9dKS9pLCAnJyk7XG4gICAgICAgICAgICAvLyDop6PlhrPnp7vliqjogZTpgJrnrYnkuI3lkIzlj5HooYzniYjlr7zoh7TnmoTmnLrlnovkuI3lkIzpl67pophcbiAgICAgICAgICAgIC8vIOeJueW+ge+8mltBLVpdWzAtOV0rW0EtWl0g5L6L5aaCICBYNUYgWDVMIFg1TSBYNWlMIOmDveW6lOivpeaYryBYNVxuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFthLXpdK1swLTldKylpP1thLXpdP1tcXHMtX10/L2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBPcHBvXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhPcHBvW1xccy1fXShcXHcqKXxcXHMoMTEwMHwxMTA1fDExMDd8MzAwMHwzMDA1fDMwMDd8NjYwN3xBMTAwfEExMDN8QTEwNXxBMTA1S3xBMTA5fEExMDlLfEExMXxBMTEzfEExMTV8QTExNUt8QTEyMXxBMTI1fEExMjd8QTEyOXxBMjAxfEEyMDN8QTIwOXxBMzF8QTMxY3xBMzF0fEEzMXV8QTUxa2N8QTUyMHxBNjEzfEE2MTV8QTYxN3xFMjFXfEZpbmR8TWlycm9yfE41MTEwfE41MTE3fE41MjA3fE41MjA5fFIyMDEwfFIyMDE3fFI2MDA3fFI3MDA1fFI3MDA3fFI3Y3xSN3R8UjgwMDB8UjgwMDd8UjgwMXxSODA1fFI4MDd8UjgwOVR8UjgxMDd8UjgxMDl8UjgxMXxSODExV3xSODEzVHxSODE1VHxSODE1V3xSODE3fFI4MTlUfFI4MjAwfFI4MjA1fFI4MjA3fFI4MjFUfFI4MjNUfFI4MjdUfFI4MzB8UjgzMFN8UjgzMVN8UjgzMVR8UjgzM1R8Ujg1MHxSZWFsfFQ3MDN8VTJTfFU1MjF8VTUyNXxVNTI5fFU1Mzl8VTcwMXxVNzAxVHxVNzA1VHxVNzA1V3xYOTAwMHxYOTAwN3xYOTAzfFg5MDV8WDkwNzB8WDkwNzd8WDkwOXxaMTAxfFI4MjlUKVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnT3Bwbyc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIEEzMWMgQTMxcyDpg73lupTor6XmmK8gQTMxXG4gICAgICAgICAgICAvLyDlr7kgUGx1cyDlgZrnibnmrorlpITnkIZcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhbYS16XStbMC05XSspLT8ocGx1cykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFxcdyotP1thLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ29wcG8nICYmIHVhRGF0YS5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgIC8vIOmSiOWvuWJhc2XlupPnmoTmlbDmja7lgZrmlbDmja7moLzlvI/ljJblpITnkIZcbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIEEzMWMgQTMxcyDpg73lupTor6XmmK8gQTMxXG4gICAgICAgICAgICAvLyDlr7kgUGx1cyDlgZrnibnmrorlpITnkIZcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhbYS16XStbMC05XSspLT8ocGx1cykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFxcdyotP1thLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIExlbm92b1xuICAgICAgICAvLyDlhbzlrrlidWlsZOe7k+WwvuaIluebtOaOpSnnu5PlsL4g5YW85a65TGVub3ZvLXh4eC94eHjku6Xlj4pMZXZlbm8geHh4IGJ1aWxk562JXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhMZW5vdm9bXFxzLV9dKFxcdypbLV9dP1xcdyopfFxccyhBMzU4MHxBMzg2MHxBNTUwMHxBNTYwMHxBNTg2MHxBNzYwMHxBODA2fEE4MDB8QTgwOFR8QTgwOFQtSXxBOTM2fEE5Mzh0fEE3ODh0fEszMC1FfEszMC1UfEszMC1XfEs1MC1UM3N8SzUwLVQ1fEs4ME18SzkxMHxLOTEwZXxLOTIwfFM5MC1lfFM5MC10fFM5MC11fFM5NjhUfFgyLUNVfFgyLVRPfFo5MC0zfFo5MC03KVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTGVub3ZvJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAvLyDnibnlvoHvvJpbQS1aXVswLTldK1tBLVpdIOS+i+WmgiAgQTM2MHQgQTM2MCDpg73lupTor6XmmK8gQTM2MFxuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFthLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIGNvb2xwYWRcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKENvb2xwYWRbXFxzLV9dKFxcdyopfFxccyg3Mjk1Q3w3Mjk4QXw3NjIwTHw4OTA4fDgwODV8ODk3MEx8OTE5MEx8WTgwRClbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0Nvb2xwYWQnO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbM107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIDgyOTctdDAxIDgyOTctYzAxIDgyOTd3IOmDveW6lOivpeaYryA4Mjk3XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciAmJiB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlci50b0xvd2VyQ2FzZSgpID09PSAnY29vbHBhZCcgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8gYmFzZSDlupPpgILphY1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIDgyOTctdDAxIDgyOTctYzAxIDgyOTd3IOmDveW6lOivpeaYryA4Mjk3XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgbWVpenVcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvXFxzKG14XFxkKlxcdyp8bXotKFxcdyopKVxccyhcXHcqKVxccypcXHcqXFxzKmJ1aWxkL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdNZWl6dSc7XG4gICAgICAgICAgICB2YXIgdG1wTW9kZWwgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbWF0Y2hbMV07XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdG1wTW9kZWwgKyAnLScgKyBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB0bXBNb2RlbCArICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goL000NjNDfE0zNVxcZC9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTWVpenUnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBodGNcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKEh0Y1stX1xcc10oXFx3Kil8XFxzKDYwMWV8NjA2d3w2MDh0fDYwOWR8NjEwdHw2MTYwfDYxOWR8NjIwR3w2MjZkfDYyNnN8NjI2dHw2MjZ3fDcwOWR8ODAxZXw4MDJkfDgwMnR8ODAyd3w4MDlEfDgxNmR8ODE2ZXw4MTZ0fDgxNnZ8ODE2d3w4MjZkfDgyNnN8ODI2dHw4MjZ3fDgyOHd8OTAxZXw5MTlkfEEzMTBlfEE1MEFNTHxBNTEwZXxBNjIwZHxBNjIwZXxBNjIwdHxBODEwZXxBOTE5MXxBZXJvfEM2MjBkfEM2MjBlfEM2MjB0fEQzMTZkfEQ1MTZkfEQ1MTZ0fEQ1MTZ3fEQ4MjBtdHxEODIwbXV8RDgyMHR8RDgyMHRzfEQ4MjB1fEQ4MjB1c3xFOXB0fEU5cHd8RTlzd3xFOXR8SEQ3U3xNOEV0fE04U2R8TThTdHxNOFN3fE04ZHxNOGV8TThzfE04c2l8TTh0fE04d3xNOVd8TTlld3xQaGFibGV0fFM1MTBifFM1MTBlfFM2MTBkfFM3MTBkfFM3MTBlfFM3MjBlfFM3MjB0fFQzMjd0fFQzMjhkfFQzMjh0fFQzMjh3fFQzMjlkfFQzMjl0fFQzMjl3fFQ1MjhkfFQ1Mjh0fFQ1Mjh3fFQ4Njk4fFdGNXd8WDMxNWV8WDcxMGV8WDcxNWV8WDcyMGR8WDkyMGV8WjU2MGV8WjcxMGV8WjcxMHR8WjcxNWUpW1xcc1xcKV0pLykpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0h0Yyc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIEdpb25lZVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oR2lvbmVlW1xccy1fXShcXHcqKXxcXHMoR05cXGQrXFx3KilbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0dpb25lZSc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgTEdcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKExHWy1fXShcXHcqKXxcXHMoRDcyOHxENzI5fEQ4MDJ8RDg1NXxEODU2fEQ4NTd8RDg1OHxEODU5fEU5ODVUfEYxMDBMfEY0NjB8SDc3OHxIODE4fEg4MTl8UDg5NXxWVzgyMClbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0xnJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSB0Y2xcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKFRjbFtcXHMtX10oXFx3Kil8XFxzKEg5MTZUfFA1ODhMfFA2MThMfFA2MjBNfFA3MjhNKVtcXHNcXCldKS8pKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdUY2wnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpURVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oVjkxODB8TjkxOCkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1p0ZSc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3p0ZScgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8gYmFzZSDlupPpgILphY1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIFE1MDVUIFE1MDV1IOmDveW6lOivpeaYryBRNTA1XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBVSU1JXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhVSU1JXFx3Knx1bWlcXHcqKVtcXHMtX10oXFx3KilcXHMqXFx3KlxccypidWlsZC9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVWltaSc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXSArICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV0b25cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvZXRvbltcXHMtX10oXFx3KikvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0V0b24nO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNtYXJ0aXNhblxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oU003MDV8U003MDF8WVE2MDF8WVE2MDMpL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTbWFydGlzYW4nO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICh7XG4gICAgICAgICAgICAgICAgU003MDU6ICdUMScsXG4gICAgICAgICAgICAgICAgU003MDE6ICdUMScsXG4gICAgICAgICAgICAgICAgWVE2MDE6ICdVMScsXG4gICAgICAgICAgICAgICAgWVE2MDM6ICdVMSdcbiAgICAgICAgICAgIH0pW21hdGNoWzFdXSB8fCBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgQXN1c1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oQXN1c1tcXHMtX10oXFx3Kil8XFxzKEE1MDBDR3xBNTAwS0x8QTUwMUNHfEE2MDBDR3xQRjQwMENHfFBGNTAwS0x8VDAwMXxYMDAyfFgwMDN8WkM1MDBUR3xaRTU1ME1MfFpFNTUxTUwpW1xcc1xcKV0pL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBc3VzJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBudWJpYVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oTnViaWFbLV9cXHNdKFxcdyopfChOWDUwMXxOWDUwNUp8Tlg1MDZKfE5YNTA3SnxOWDUwM0F8bnhcXGQrXFx3KilbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ051YmlhJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBoYWllclxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oSFQtXFx3Kil8SGFpZXJbXFxzLV9dKFxcdyotP1xcdyopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIYWllcic7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aWFueXVcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvSy1Ub3VjaFtcXHMtX10odG91XFxzP2NoXFxzPyhcXGQpfFxcdyopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdLLVRvdWNoJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnS3RvdWNoJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRE9PVlxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9Eb292W1xccy1fXShcXHcqKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnRG9vdic7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29vYmVlXG4gICAgICAgIGVsc2UgaWYgKC9rb29iZWUvaS50ZXN0KHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAna29vYmVlJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvbnlcbiAgICAgICAgZWxzZSBpZiAoL0M2OS9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhb2ppeGluZ1xuICAgICAgICBlbHNlIGlmICgvTjc4N3xOODE4Uy9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIYW9qaXhpbmcnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFpc2Vuc2VcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKGhzLXxIaXNlbnNlW1xccy1fXSkoXFx3KikvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0hpc2Vuc2UnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBzdHlsZSBvZiBtYW51ZmFjdHVyZXJcbiAgICAgICAgaWYgKHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBzdHlsZSBvZiBtb2RlbFxuICAgICAgICBpZiAodWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHVhRGF0YS5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8tK3xfK3xcXHMrL2csICcgJyk7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvXFxzKihcXHcqXFxzKlxcdyopLylbMV0ucmVwbGFjZSgvXFxzKy8sICctJyk7XG5cbiAgICAgICAgICAgIC8vIOmSiOWvueS4ieaYn+OAgeWNjuS4uuWBmuWOu+mHjeeahOeJueauiuWkhOeQhlxuICAgICAgICAgICAgaWYgKHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID09PSAnU2Ftc3VuZycpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gKHtcbiAgICAgICAgICAgICAgICAgICAgJ1NDSC1JOTUnOiAnR1QtSTk1MCcsXG4gICAgICAgICAgICAgICAgICAgICdTQ0gtSTkzJzogJ0dULUk5MzAnLFxuICAgICAgICAgICAgICAgICAgICAnU0NILUk4Nic6ICdHVC1JODU1JyxcbiAgICAgICAgICAgICAgICAgICAgJ1NDSC1ONzEnOiAnR1QtTjcxMCcsXG4gICAgICAgICAgICAgICAgICAgICdTQ0gtSTczJzogJ0dULVM3ODknLFxuICAgICAgICAgICAgICAgICAgICAnU0NILVA3MCc6ICdHVC1JOTE1J1xuICAgICAgICAgICAgICAgIH0pW3VhRGF0YS5kZXZpY2UubW9kZWxdIHx8IHVhRGF0YS5kZXZpY2UubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9PT0gJ0h1YXdlaScpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gKHtcbiAgICAgICAgICAgICAgICAgICAgQ0hFMTogJ0NIRScsXG4gICAgICAgICAgICAgICAgICAgIENIRTI6ICdDSEUnLFxuICAgICAgICAgICAgICAgICAgICBHNjIwUzogJ0c2MjEnLFxuICAgICAgICAgICAgICAgICAgICBDODgxN0Q6ICdHNjIxJ1xuICAgICAgICAgICAgICAgIH0pW3VhRGF0YS5kZXZpY2UubW9kZWxdIHx8IHVhRGF0YS5kZXZpY2UubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDpkojlr7l4aWFvbWkg55qE6YOo5YiG5pWw5o2u5rKh5pyJ5qC85byP5YyW5oiQ5Yqf77yM5qC85byP5YyWMeasoVxuICAgICAgICBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPT09ICdYaWFvbWknKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpLShub3RlKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXSArICctJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpLShcXGRzPykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKGhtfG1pKS0oXFxkKVthLXJ0LXpdL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgJy0nICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaGFuZGxlIGJyb3dzZXJcbiAgICAvLyBpZiAoIXVhRGF0YS5icm93c2VyLm5hbWUpIHtcbiAgICAvLyB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHVhRGF0YS5kZXZpY2UudHlwZSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIDM2MCBzZWN1cml0eSBFeHBsb3JlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG1hdGNoID0gLzM2MHNlKD86WyBcXC9dKFtcXHcuXSspKT8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICczNjAgc2VjdXJpdHkgRXhwbG9yZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoZSB3b3JsZFxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvdGhlIHdvcmxkKD86WyBcXC9dKFtcXHcuXSspKT8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICd0aGUgd29ybGQnO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRlbmNlbnR0cmF2ZWxlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvdGVuY2VudHRyYXZlbGVyIChbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ3RlbmNlbnR0cmF2ZWxlcic7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogTEJCUk9XU0VSXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9MQkJST1dTRVIvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdMQkJST1dTRVInO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHVhRGF0YS5kZXZpY2UudHlwZSA9PT0gJ21vYmlsZScgfHwgdWFEYXRhLmRldmljZS50eXBlID09PSAndGFibGV0Jykge1xuICAgICAgICAvKipcbiAgICAgICAgICogQmFpZHVIRFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG1hdGNoID0gL0JhaWR1SERcXHMrKFtcXHcuXSspL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQmFpZHVIRCc7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogMzYwIEJyb3dzZXJcbiAgICAgICAgICovXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gLzM2MC5zKmFwaG9uZVxccypicm93c2VyXFxzKlxcKHZlcnNpb25cXHMqKFtcXHcuXSspXFwpL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnMzYwIEJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJhaWR1IEJyb3dzZXJcbiAgICAgICAgICovXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gL2ZseWZsb3dcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdCYWlkdSBCcm93c2VyJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJhaWR1IEhEXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9iYWlkdWhkIChbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ0JhaWR1IEhEJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGJhaWR1YnJvd3NlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvYmFpZHVicm93c2VyXFwvKFtcXGRcXC5dKylcXHMvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdiYWlkdWJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogTGllQmFvRmFzdFxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvTGllQmFvRmFzdFxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ0xpZUJhbyBGYXN0JztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpZUJhb1xuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvTGllQmFvXFwvKFtcXHcuXSspL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnTGllQmFvJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNPVUdPVVxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvU29nb3VcXHcrXFwvKFswLTlcXC5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdTb2dvdU1vYmlsZUJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICog55m+5bqm5Zu96ZmFXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9iZGJyb3dzZXJcXHcrXFwvKFswLTlcXC5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICfnmb7luqblm73pmYUnO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQW5kcm9pZCBDaHJvbWUgQnJvd3NlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLm9zLm5hbWUgPT09ICdBbmRyb2lkJyAmJiAvc2FmYXJpL2kudGVzdCh1YSkgJiYgKG1hdGNoID0gL2Nocm9tZVxcLyhbMC05XFwuXSspL2kuZXhlYyh1YSkpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvXFxzKyhcXHcrQnJvd3NlcilcXC8/KFtcXGRcXC5dKikvKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtvcmlnaW5hbDogdG1wTWF0Y2hbMl19O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQW5kcm9pZCBDaHJvbWUnO1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbmRyb2lkIEdvb2dsZSBCcm93c2VyXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmICh1YURhdGEub3MubmFtZSA9PT0gJ0FuZHJvaWQnICYmIC9zYWZhcmkvaS50ZXN0KHVhKSAmJiAobWF0Y2ggPSAvdmVyc2lvblxcLyhbMC05XFwuXSspL2kuZXhlYyh1YSkpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvXFxzKyhcXHcrQnJvd3NlcilcXC8/KFtcXGRcXC5dKikvKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtvcmlnaW5hbDogdG1wTWF0Y2hbMl19O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQW5kcm9pZCBCcm93c2VyJztcbiAgICAgICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge29yaWdpbmFsOiBtYXRjaFsxXX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogJ01vemlsbGEvNS4wIChpUGFkOyBDUFUgT1MgNV8xXzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNTM0LjQ2IChLSFRNTCwgbGlrZSBHZWNrbykgTW9iaWxlLzlCMjA2JyBiZWxvbmdzIHRvIFNhZmFyaVxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAoLyhpcGFkfGlwaG9uZSkuKiBhcHBsZXdlYmtpdFxcLy4qIG1vYmlsZS9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoID0gdWEubWF0Y2goL2JhaWR1Ym94YXBwXFwvPyhbXFxkXFwuXSopL2kpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn55m+5bqm5qGGJztcbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ2JhaWR1IGJveCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9CYWlkdUxpZ2h0QXBwUnVudGltZS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn6L275bqU55SocnVudGltZSc7XG4gICAgICAgIC8vIHVhRGF0YS5icm93c2VyLm5hbWUgPSAncWluZyBydW50aW1lJztcbiAgICB9XG4gICAgZWxzZSBpZiAoL1dlaWJvL2kudGVzdCh1YSkpIHtcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICflvq7ljZonO1xuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ3dlaWJvJztcbiAgICB9XG4gICAgZWxzZSBpZiAoL01RUS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn5omL5py6UVEnO1xuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ21vYmlsZSBxcSc7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9oYW8xMjMvaS50ZXN0KHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ2hhbzEyMyc7XG4gICAgfVxuICAgIC8vIH1cbiAgICBpZiAobWF0Y2ggPSAvTWljcm9NZXNzZW5nZXJcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ+W+ruS/oSc7XG4gICAgICAgIHZhciB0bXBWZXJzaW9uID0gKG1hdGNoWzFdKS5yZXBsYWNlKC9fL2csICcuJyk7XG4gICAgICAgIHRtcE1hdGNoID0gLyhcXGQrXFwuXFxkK1xcLlxcZCtcXC5cXGQrKS8uZXhlYyh0bXBWZXJzaW9uKTtcbiAgICAgICAgaWYodG1wTWF0Y2gpIHtcbiAgICAgICAgICAgIHRtcFZlcnNpb24gPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IHRtcFZlcnNpb25cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG1hdGNoID0gL1VDQnJvd3NlclxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnVUMgQnJvd3Nlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG1hdGNoID0gL09QUlxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnT3BlcmEnO1xuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChtYXRjaCA9IC9PUGlPU1xcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnT3BlcmEnO1xuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIElFIDExXG4gICAgZWxzZSBpZiAoL1RyaWRlbnRcXC83L2kudGVzdCh1YSkgJiYgL3J2OjExL2kudGVzdCh1YSkpIHtcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdJbnRlcm5ldCBFeHBsb3Jlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBtYWpvcjogJzExJyxcbiAgICAgICAgICAgIG9yaWdpbmFsOiAnMTEnXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgZWxzZSBpZiAoL0VkZ2VcXC8xMi9pLnRlc3QodWEpICYmIC9XaW5kb3dzIFBob25lfFdpbmRvd3MgTlQvaS50ZXN0KHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ01pY3Jvc29mdCBFZGdlJztcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgIG1ham9yOiAnMTInLFxuICAgICAgICAgICAgb3JpZ2luYWw6ICcxMidcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gbWl1aSBicm93c2VyXG4gICAgZWxzZSBpZiAobWF0Y2ggPSAvbWl1aWJyb3dzZXJcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ21pdWkgYnJvd3Nlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gU2FmYXJpXG4gICAgaWYgKCF1YURhdGEuYnJvd3Nlci5uYW1lKSB7XG4gICAgICAgIGlmIChtYXRjaCA9IC9TYWZhcmlcXC8oW1xcdy5dKykvaS5leGVjKHVhKSAmJiAvVmVyc2lvbi9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVhRGF0YS5icm93c2VyLm5hbWUgJiYgIXVhRGF0YS5icm93c2VyLnZlcnNpb24pIHtcbiAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9ICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgKHVhRGF0YS5vcy5uYW1lID09PSAnV2luZG93cycgJiYgdWFEYXRhLm9zLnZlcnNpb24pIHtcbiAgICAvLyAgLy8gV2luZG93cyA4LjFcbiAgICAvLyAgaWYgKHVhRGF0YS5vcy52ZXJzaW9uLmFsaWFzID09PSAnTlQgNi4zJykge1xuICAgIC8vICAgICAgdWFEYXRhLm9zLnZlcnNpb24uYWxpYXMgPSAnOC4xJztcbiAgICAvLyAgfVxuICAgIC8vIH1cbiAgICAvLyBoYW5kbGUgb3NcbiAgICBpZiAodWFEYXRhLm9zLm5hbWUgPT09ICdXaW5kb3dzJyB8fCAvV2luZG93cy9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5vcy5uYW1lID0gJ1dpbmRvd3MnO1xuICAgICAgICBpZiAoL05UIDYuMy9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJzguMScsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6ICc4LjEnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKC9OVCA2LjQvaS50ZXN0KHVhKSB8fCAvTlQgMTAuMC9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJzEwJyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogJzEwJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh1YURhdGEub3MubmFtZSA9PT0gJ01hYyBPUyBYJykge1xuICAgICAgICB1YURhdGEub3MubmFtZSA9ICdNYWMgT1MgWCc7XG4gICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWFtcXHNcXF9cXC1cXC9dKFxcZCtbXFwuXFwtXFxfXVxcZCtbXFwuXFwtXFxfXT9cXGQqKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogbWF0Y2hbMV0ucmVwbGFjZSgvXy9nLCAnLicpLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJycsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9BbmRyb2lkL2kudGVzdCh1YURhdGEub3MubmFtZSkpIHtcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goL0FuZHJvaWRbXFxzXFxfXFwtXFwvaTY4Nl0/W1xcc1xcX1xcLVxcL10oXFxkK1tcXC5cXC1cXF9dXFxkK1tcXC5cXC1cXF9dP1xcZCopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1YURhdGE7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js\n");

/***/ }),

/***/ "./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js":
/*!************************************************************************!*\
  !*** ./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js ***!
  \************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = (function () {\n    var STRINGS_SAMSUNG = 'Samsung',\n        STRINGS_SHARP = 'Sharp',\n        STRINGS_SONY_ERICSSON = 'Sony Ericsson',\n        STRINGS_MOTOROLA = 'Motorola',\n        STRINGS_LG = 'LG',\n        STRINGS_HUAWEI = 'Huawei',\n        STRINGS_HTC = 'HTC',\n        STRINGS_COOLPAD = 'Coolpad',\n        STRINGS_ASUS = 'Asus',\n        STRINGS_ACER = 'Acer';\n    var STRINGS_BASED = ' based device';\n\n    var TOUCHWIZ_MODELS = {\n        'SAMSUNG': {\n            'GT-S3370C': [STRINGS_SAMSUNG, 'Corby 3G'],\n            'GT-S3650': [STRINGS_SAMSUNG, 'Corby'],\n            'GT-S3653': [STRINGS_SAMSUNG, 'Corby'],\n            'GT-S3850': [STRINGS_SAMSUNG, 'Corby II'],\n            'GT-S5230': [STRINGS_SAMSUNG, 'Star'],\n            'GT-S5230W': [STRINGS_SAMSUNG, 'Star'],\n            'GT-S5233': [STRINGS_SAMSUNG, 'Star'],\n            'GT-S5260': [STRINGS_SAMSUNG, 'Star II'],\n            'GT-S5560': [STRINGS_SAMSUNG, 'Marvel'],\n            'GT-S5620': [STRINGS_SAMSUNG, 'Monte'],\n            'GT-S7550': [STRINGS_SAMSUNG, 'Blue Earth'],\n            'GT-S8000': [STRINGS_SAMSUNG, 'Jet'],\n            'GT-S8003': [STRINGS_SAMSUNG, 'Jet'],\n            'SGH-F480': [STRINGS_SAMSUNG, 'Tocco'],\n            'SGH-T528g': [STRINGS_SAMSUNG, 'Straight Talk'],\n            'GT-B3410': [STRINGS_SAMSUNG, 'Star Qwerty'],\n            'GT-B5310': [STRINGS_SAMSUNG, 'Corby Pro'],\n            'GT-B7722': [STRINGS_SAMSUNG, 'Star Duos'],\n            'GT-C6712': [STRINGS_SAMSUNG, 'Star II Duos']\n        }\n    }\n\n    var BADA_MODELS = {\n        'SAMSUNG': {\n            'GT- S5250': [STRINGS_SAMSUNG, 'Wave 525'],\n            'GT-S5250': [STRINGS_SAMSUNG, 'Wave 525'],\n            'GT-S5253': [STRINGS_SAMSUNG, 'Wave 525'],\n            'GT-S5330': [STRINGS_SAMSUNG, 'Wave 533'],\n            'GT-S5380': [STRINGS_SAMSUNG, 'Wave Y'],\n            'GT-S5380D': [STRINGS_SAMSUNG, 'Wave Y'],\n            'GT-S5380K': [STRINGS_SAMSUNG, 'Wave Y'],\n            'GT-S5750E': [STRINGS_SAMSUNG, 'Wave 575'],\n            'GT-S5753E': [STRINGS_SAMSUNG, 'Wave 575'],\n            'GT-S7230B': [STRINGS_SAMSUNG, 'Wave 723'],\n            'GT-S7230E': [STRINGS_SAMSUNG, 'Wave 723'],\n            'GT-S7233E': [STRINGS_SAMSUNG, 'Wave 723'],\n            'GT-S7250': [STRINGS_SAMSUNG, 'Wave M'],\n            'GT-S7250D': [STRINGS_SAMSUNG, 'Wave M'],\n            'GT-S8500': [STRINGS_SAMSUNG, 'Wave'],\n            'GT-S8500C': [STRINGS_SAMSUNG, 'Wave'],\n            'GT-S8500R': [STRINGS_SAMSUNG, 'Wave'],\n            'GT-S8500T': [STRINGS_SAMSUNG, 'Wave'],\n            'GT-S8530': [STRINGS_SAMSUNG, 'Wave II'],\n            'GT-S8600': [STRINGS_SAMSUNG, 'Wave 3'],\n            'SHW-M410': [STRINGS_SAMSUNG, 'Wave 3']\n        }\n    }\n\n    var TIZEN_MODELS = {\n        'SAMSUNG': {\n            'GT-I9500': [STRINGS_SAMSUNG, 'GT-I9500']\n        }\n    }\n\n    var BREW_MODELS = {\n        'Coolpad D508': [STRINGS_COOLPAD, 'D508'],\n        'Coolpad E600': [STRINGS_COOLPAD, 'E600'],\n        'SCH-F839': [STRINGS_SAMSUNG, 'SCH-F839']\n    }\n\n    var WINDOWS_MOBILE_MODELS = {\n        'DX900': [STRINGS_ACER, 'Tempo DX900'],\n        'F900': [STRINGS_ACER, 'Tempo F900'],\n        'Coolpad F800': [STRINGS_COOLPAD, 'F800'],\n        'garmin-asus-Nuvifone-M10': ['Garmin-Asus', 'Nuvifone M10'],\n        'HP iPAQ 510': ['HP', 'iPAQ 510'],\n        'HD mini T5555': [STRINGS_HTC, 'HD mini'],\n        'HTC HD mini': [STRINGS_HTC, 'HD mini'],\n        'HTC HD mini T5555': [STRINGS_HTC, 'HD mini'],\n        'HTC HD2': [STRINGS_HTC, 'HD2'],\n        'HTC HD2 T8585': [STRINGS_HTC, 'HD2'],\n        'HD2 T8585': [STRINGS_HTC, 'HD2'],\n        'T-Mobile LEO': [STRINGS_HTC, 'HD2'],\n        'dopodT5588': [STRINGS_HTC, 'Hengshan'],\n        'HTC Mega-T3333': [STRINGS_HTC, 'Mega'],\n        'HTC Snap S521': [STRINGS_HTC, 'Snap'],\n        'HTC Touch2 T3320': [STRINGS_HTC, 'Touch 2'],\n        'HTC Touch2 T3333': [STRINGS_HTC, 'Touch 2'],\n        'HTC Touch2 T3335': [STRINGS_HTC, 'Touch 2'],\n        'HTC P3700': [STRINGS_HTC, 'Touch Diamond'],\n        'HTC Touch Diamond2 T5353': [STRINGS_HTC, 'Touch Diamond 2'],\n        'HTC Touch HD T8282': [STRINGS_HTC, 'Touch HD'],\n        'HTC Touch HD T8283': [STRINGS_HTC, 'Touch HD'],\n        'HTC Touch HD2 T8585': [STRINGS_HTC, 'Touch HD2'],\n        'HTC Touch Pro2 T7373': [STRINGS_HTC, 'Touch Pro 2'],\n        'T7380': [STRINGS_HTC, 'Touch Pro 2'],\n        'HTC TyTN II': [STRINGS_HTC, 'TyTN II'],\n        'GT-B7300': [STRINGS_SAMSUNG, 'Omnia Lite'],\n        'GT-B7610': [STRINGS_SAMSUNG, 'Omnia Pro'],\n        'GT-i8000': [STRINGS_SAMSUNG, 'Omnia 2'],\n        'GT-I8000': [STRINGS_SAMSUNG, 'Omnia 2'],\n        'GT-I8000U': [STRINGS_SAMSUNG, 'Omnia 2'],\n        'M1i': [STRINGS_SONY_ERICSSON, 'M1i Aspen']\n    }\n\n    var WINDOWS_PHONE_MODELS = {\n        'Acer': {\n            'Allegro': [STRINGS_ACER, 'Allegro'],\n            'M310': [STRINGS_ACER, 'Allegro']\n        },\n\n        'Asus': {\n            'Galaxy6': [STRINGS_ASUS, 'Galaxy 6']\n        },\n\n        'DELL': {\n            'Venue Pro': ['Dell', 'Venue Pro']\n        },\n\n        'FujitsuToshibaMobileCommun': {\n            'IS12T': ['Fujitsu Toshiba', 'IS12T']\n        },\n\n        'HTC': {\n            '7 Mozart': [STRINGS_HTC, '7 Mozart'],\n            '7 Mozart T8698': [STRINGS_HTC, '7 Mozart'],\n            'T8697': [STRINGS_HTC, '7 Mozart'],\n            'T8698': [STRINGS_HTC, '7 Mozart'],\n            'PD67100': [STRINGS_HTC, '7 Mozart'],\n            'Mozart T8698': [STRINGS_HTC, '7 Mozart'],\n            'Mozart': [STRINGS_HTC, '7 Mozart'],\n            'USCCHTC-PC93100': [STRINGS_HTC, 'Arrive'],\n            'Gold': [STRINGS_HTC, 'Gold '],\n            'HD2': [STRINGS_HTC, 'HD2'],\n            'HD7': [STRINGS_HTC, 'HD7'],\n            'HD7 T9292': [STRINGS_HTC, 'HD7'],\n            'T9295': [STRINGS_HTC, 'HD7'],\n            'T9296': [STRINGS_HTC, 'HD7'],\n            'HD7 Infinity': [STRINGS_HTC, 'HD7'],\n            'T7575': [STRINGS_HTC, '7 Pro'],\n            '7 Pro T7576': [STRINGS_HTC, '7 Pro'],\n            'mwp6985': [STRINGS_HTC, 'Trophy'],\n            '7 Trophy T8686': [STRINGS_HTC, 'Trophy'],\n            '7 Trophy': [STRINGS_HTC, 'Trophy'],\n            'PC40100': [STRINGS_HTC, 'Trophy'],\n            'Touch-IT Trophy': [STRINGS_HTC, 'Trophy'],\n            'Radar': [STRINGS_HTC, 'Radar'],\n            'Radar 4G': [STRINGS_HTC, 'Radar'],\n            'Radar C110e': [STRINGS_HTC, 'Radar'],\n            'Mazaa': [STRINGS_HTC, 'Mazaa'],\n            'Mondrian': [STRINGS_HTC, 'Mondrian'],\n            'Schubert': [STRINGS_HTC, 'Schubert'],\n            '7 Schubert T9292': [STRINGS_HTC, 'Schubert'],\n            'Spark': [STRINGS_HTC, 'Spark'],\n            'T8788': [STRINGS_HTC, 'Surround'],\n            'TITAN X310e': [STRINGS_HTC, 'Titan'],\n            'X310e': [STRINGS_HTC, 'Titan'],\n            'PI39100': [STRINGS_HTC, 'Titan'],\n            'PI86100': [STRINGS_HTC, 'Titan II'],\n            'Ultimate': [STRINGS_HTC, 'Ultimate']\n        },\n\n        'LG': {\n            'GW910': [STRINGS_LG, 'Optimus 7'],\n            'LG E-900': [STRINGS_LG, 'Optimus 7 E900'],\n            'LG-E900': [STRINGS_LG, 'Optimus 7 E900'],\n            'LG-E900h': [STRINGS_LG, 'Optimus 7 E900'],\n            'LG-C900': [STRINGS_LG, 'Optimus 7Q'],\n            'LG-C900B': [STRINGS_LG, 'Quantum'],\n            'LG-C900k': [STRINGS_LG, 'Quantum']\n        },\n\n        'nokia': {\n            'SeaRay': ['Nokia', 'Lumia 800'],\n            '800C': ['Nokia', 'Lumia 800']\n        },\n\n        'NOKIA': {\n            '710': ['Nokia', 'Lumia 710'],\n            'Nokia 710': ['Nokia', 'Lumia 710'],\n            'Lumia 710': ['Nokia', 'Lumia 710'],\n            'Lumia 719': ['Nokia', 'Lumia 719'],\n            'Lumia 800': ['Nokia', 'Lumia 800'],\n            '800': ['Nokia', 'Lumia 800'],\n            'Lumia 900': ['Nokia', 'Lumia 900'],\n            'XXX': ['Nokia', 'prototype']\n        },\n\n        'SAMSUNG': {\n            'GT-I8350': [STRINGS_SAMSUNG, 'Omnia W'],\n            'GT-I8350T': [STRINGS_SAMSUNG, 'Omnia W'],\n            'SGH-i677': [STRINGS_SAMSUNG, 'Focus Flash'],\n            'SGH-i707': [STRINGS_SAMSUNG, 'Taylor'],\n            'SGH-i917': [STRINGS_SAMSUNG, 'Omnia 7'],\n            'SGH-I917': [STRINGS_SAMSUNG, 'Omnia 7'],\n            'SGH-i917.': [STRINGS_SAMSUNG, 'Focus'],\n            'SGH-i917R': [STRINGS_SAMSUNG, 'Focus'],\n            'SGH-i937': [STRINGS_SAMSUNG, 'Focus S'],\n            'OMNIA7': [STRINGS_SAMSUNG, 'Omnia 7'],\n            'OMINA7': [STRINGS_SAMSUNG, 'Omnia 7'],\n            'Taylor': [STRINGS_SAMSUNG, 'Taylor']\n        },\n\n        'TOSHIBA': {\n            'TSUNAGI': ['Toshiba', 'Tsunagi']\n        }\n    };\n\n    var ANDROID_MODELS = {\n        'Android': [null, null],\n        'google sdk': [null, null],\n        'sdk': [null, null],\n        'generic': [null, null],\n        'generic x86': [null, null],\n        'amd brazos': ['AMD', 'Fusionbased device'],\n        'Amlogic M1 reference board': ['Amlogic', 'M1 reference board'],\n        'AML8726M': ['Amlogic', 'AML8726-Mbased device'],\n        'vexpress a9': ['ARM', 'Versatile Express development platform'],\n        'bcm7231': ['Broadcom', 'BCM7231based device', 'television'],\n        'bcm7425': ['Broadcom', 'BCM7425based device', 'television'],\n        'bcm7429': ['Broadcom', 'BCM7429based device', 'television'],\n        'imx50 rdp': ['Freescale', 'i.MX50based device'],\n        'imx51 bbg': ['Freescale', 'i.MX51based device'],\n        'imx53 loco': ['Freescale', 'i.MX53based device'],\n        'imx53 mp204f3': ['Freescale', 'i.MX53based device'],\n        'imx53 smd': ['Freescale', 'i.MX53based device'],\n        'imx53 yeagle': ['Freescale', 'i.MX53based device'],\n        'imx6q': ['Freescale', 'i.MX6Qbased device'],\n        'ODROID-A': ['Hardkernel', 'ODROID-A developer tablet', 'tablet'],\n        'mfld dv10': ['Intel', 'Medfieldbased device'],\n        'mfld dv20': ['Intel', 'Medfieldbased device'],\n        'mfld lw00': ['Intel', 'Medfieldbased device'],\n        'mfld pr2': ['Intel', 'Medfieldbased device'],\n        'mfld pr3': ['Intel', 'Medfieldbased device'],\n        'berlin bg2': ['Marvell', 'Armada 1000based device', 'television'],\n        'MStar Amber3': ['MStar', 'Amber3based device'],\n        'Konka Amber3': ['MStar', 'Amber3based device'],\n        'mt5396': ['Mediatek', 'MT5396based device', 'television'],\n        'bird75v2': ['Mediatek', 'MT6575based device'],\n        'eagle75v1 2': ['Mediatek', 'MT6575based device'],\n        'MBX DVBT reference board (c03ref)': ['MXB', 'DVBT reference board', 'television'],\n        'NS2816': ['Nufront', 'NuSmart 2816based device'],\n        'Ventana': ['nVidia', 'Tegra Ventana development kit'],\n        'Cardhu': ['nVidia', 'Tegra 3based device'],\n        'Panda': ['Pandaboard', 'Development Kit'],\n        'pandaboard': ['Pandaboard', 'Development Kit'],\n        'PandaBoard': ['Pandaboard', 'Development Kit'],\n        'MSM': ['Qualcomm', 'Snapdragonbased device'],\n        'msm7227 ffa': ['Qualcomm', 'Snapdragon S1based device'],\n        'msm7627 surf': ['Qualcomm', 'Snapdragon S1based device'],\n        'msm7627a': ['Qualcomm', 'Snapdragon S1based device'],\n        'msm7627a sku1': ['Qualcomm', 'Snapdragon S1based device'],\n        'msm7627a sku3': ['Qualcomm', 'Snapdragon S1based device'],\n        'msm7630 fusion': ['Qualcomm', 'Snapdragon S2based device'],\n        'msm7630 surf': ['Qualcomm', 'Snapdragon S2based device'],\n        'msm8660 cougar': ['Qualcomm', 'Snapdragon S3based device'],\n        'msm8660 surf': ['Qualcomm', 'Snapdragon S3based device'],\n        'msm8960': ['Qualcomm', 'Snapdragon S4based device'],\n        'rk2808sdk': ['Rockchip', 'RK2808based device'],\n        'RK2818': ['Rockchip', 'RK2818based device'],\n        'rk2818sdk': ['Rockchip', 'RK2818based device'],\n        'Android-for-Rockchip-2818': ['Rockchip', 'RK2818based device'],\n        'rk29sdk': ['Rockchip', 'RK29based device'],\n        'Rk29sdk': ['Rockchip', 'RK29based device'],\n        'rk30sdk': ['Rockchip', 'RK30based device'],\n        's3c6410': ['Samsung', 'S3C6410based device'],\n        'smdk6410': ['Samsung', 'S3C6410based device'],\n        'SMDKC110': ['Samsung', 'Exynos 3110based device'],\n        'SMDKV210': ['Samsung', 'Exynos 4210based device'],\n        'S5PV210': ['Samsung', 'Exynos 4210based device'],\n        'sec smdkc210': ['Samsung', 'Exynos 4210based device'],\n        'SMDK4x12': ['Samsung', 'Exynos 4212 or 4412based device'],\n        'smp86xx': ['Sigma', 'SMP86xxbased device', 'television'],\n        'sv8860': ['Skyviia', 'SV8860based device', 'television'],\n        'ste u8500': ['ST Ericsson', 'Novathor U8500based device'],\n        'Telechips M801 Evaluation Board': ['Telechips', 'M801based device', 'television'],\n        'Telechips TCC8900 Evaluation Board': ['Telechips', 'TCC8900based device', 'television'],\n        'TCC8920 STB EV': ['Telechips', 'TCC8920based device', 'television'],\n        'OMAP': ['Texas Instruments', 'OMAPbased device'],\n        'OMAP SS': ['Texas Instruments', 'OMAPbased device'],\n        'LogicPD Zoom2': ['Texas Instruments', 'OMAPbased device'],\n        'omap3evm': ['Texas Instruments', 'OMAP3based device'],\n        'Omap5sevm': ['Texas Instruments', 'OMAP5based device'],\n        'pnx8473 kiryung': ['Trident', 'PNX8473based device', 'television'],\n        'crespo': ['Google', 'Nexus S'],\n        'Crespo': ['Google', 'Nexus S'],\n        'Crespo4G': ['Google', 'Nexus S'],\n        'Passion': ['Google', 'Nexus One'],\n        'Bravo': ['HTC', 'Desire'],\n        'dream': ['HTC', 'Dream'],\n        'Vogue': ['HTC', 'Touch'],\n        'Vendor Optimus': ['LG', 'Optimus'],\n        'Stingray': ['Motorola', 'XOOM', 'tablet'],\n        'Wingray': ['Motorola', 'XOOM', 'tablet'],\n        'maguro': ['Samsung', 'Galaxy Nexus'],\n        'Maguro': ['Samsung', 'Galaxy Nexus'],\n        'Toro-VZW': ['Samsung', 'Galaxy Nexus'],\n        'blaze': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n        'Blaze': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n        'Blaze Tablet': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n        'BlueStacks': ['BlueStacks', 'App Player', 'desktop'],\n        'youwave custom': ['Youwave', 'Android on PC', 'desktop'],\n        'A100': ['Acer', 'Iconia Tab A100', 'tablet'],\n        'A101': ['Acer', 'Iconia Tab A101', 'tablet'],\n        'A200': ['Acer', 'Iconia Tab A200', 'tablet'],\n        'A500': ['Acer', 'Iconia Tab A500', 'tablet'],\n        'A501': ['Acer', 'Iconia Tab A501', 'tablet'],\n        'A510': ['Acer', 'Iconia Tab A510', 'tablet'],\n        'A511': ['Acer', 'Iconia Tab A511', 'tablet'],\n        'A700': ['Acer', 'Iconia Tab A700', 'tablet'],\n        'Acer A800': ['Acer', 'Iconia Tab A800', 'tablet'],\n        'E110': ['Acer', 'beTouch E110'],\n        'E120': ['Acer', 'beTouch E120'],\n        'E130': ['Acer', 'beTouch E130'],\n        'E140': ['Acer', 'beTouch E140'],\n        'E210': ['Acer', 'beTouch E210'],\n        'E310': ['Acer', 'Liquid mini'],\n        'E320': ['Acer', 'Liquid Express'],\n        'E330': ['Acer', 'Liquid Glow'],\n        'E400': ['Acer', 'beTouch E400'],\n        'G100W': ['Acer', 'G100W'],\n        'S100': ['Acer', 'Liquid'],\n        'S110': ['Acer', 'Stream'],\n        'S120': ['Acer', 'Liquid mt'],\n        'S300': ['Acer', 'Iconia Smart'],\n        'S500': ['Acer', 'CloudMobile'],\n        'TD600': ['Acer', 'beTouch TD600'],\n        'Liquid': ['Acer', 'Liquid'],\n        'Liquid E': ['Acer', 'Liquid E'],\n        'Liquid Mt': ['Acer', 'Liquid mt'],\n        'Liquid MT': ['Acer', 'Liquid mt'],\n        'Liquid Metal': ['Acer', 'Liquid mt'],\n        'Stream': ['Acer', 'Stream'],\n        'N700': ['aigo', 'N700', 'tablet'],\n        'M801': ['aigo', 'M801', 'tablet'],\n        'Novo7': ['Ainovo', 'Novo7', 'tablet'],\n        'Novo7 Aurora': ['Ainovo', 'Novo7 Aurora', 'tablet'],\n        'Novo7 Advanced': ['Ainovo', 'Novo7 Advanced', 'tablet'],\n        'Novo7 Advanced2': ['Ainovo', 'Novo7 Advanced 2', 'tablet'],\n        'Novo7 Basic': ['Ainovo', 'Novo7 Basic', 'tablet'],\n        'Novo7 ELF': ['Ainovo', 'Novo7 Elf', 'tablet'],\n        'Novo7 PALADIN': ['Ainovo', 'Novo7 Paladin', 'tablet'],\n        'Novo8 Advanced': ['Ainovo', 'Novo8 Advanced', 'tablet'],\n        'one touch 890': ['Alcatel', 'One Touch 890'],\n        'one touch 890D': ['Alcatel', 'One Touch 890'],\n        'one touch 891': ['Alcatel', 'One Touch 891'],\n        'ONE TOUCH 903': ['Alcatel', 'One Touch 903SHV-E170K'],\n        'one touch 906': ['Alcatel', 'One Touch 906'],\n        'one touch 908': ['Alcatel', 'One Touch 908'],\n        'one touch 908F': ['Alcatel', 'One Touch 908'],\n        'one touch 908S': ['Alcatel', 'One Touch 908'],\n        'one touch 910': ['Alcatel', 'One Touch 910'],\n        'one touch 918': ['Alcatel', 'One Touch 918'],\n        'one touch 918D': ['Alcatel', 'One Touch 918'],\n        'ONE TOUCH 918D': ['Alcatel', 'One Touch 918'],\n        'one touch 918M': ['Alcatel', 'One Touch 918'],\n        'one touch 918N': ['Alcatel', 'One Touch 918'],\n        'one touch 980': ['Alcatel', 'One Touch 980'],\n        'one touch 980A': ['Alcatel', 'One Touch 980'],\n        'one touch 981A': ['Alcatel', 'One Touch 981'],\n        'one touch 986': ['Alcatel', 'One Touch 986'],\n        'one touch 990': ['Alcatel', 'One Touch 990'],\n        'one touch 990A': ['Alcatel', 'One Touch 990'],\n        'one touch 991': ['Alcatel', 'One Touch 991'],\n        'one touch 991D': ['Alcatel', 'One Touch 991'],\n        'ONE TOUCH 993': ['Alcatel', 'One Touch 993'],\n        'one touch 995': ['Alcatel', 'One Touch 995'],\n        'Telenor OneTouch': ['Alcatel', 'One Touch 990'],\n        'OT 918': ['Alcatel', 'One Touch 918'],\n        'Venture': ['Alcatel', 'Venture'],\n        'Allwinner A10': ['AllWinner', 'A10', 'tablet'],\n        '97FC': ['AllWinner', 'A10 97FC', 'tablet'],\n        'Kindle Fire': ['Amazon', 'Kindle Fire', 'tablet'],\n        'Amazon Kindle Fire': ['Amazon', 'Kindle Fire', 'tablet'],\n        'AMD120': ['AnyDATA', 'AnyTAB AMD120', 'tablet'],\n        'MW0811': ['AOC', 'Breeze MW0811', 'tablet'],\n        'MW0821 V2.0': ['AOC', 'Breeze MW0821', 'tablet'],\n        'MW0922': ['AOC', 'Breeze MW0922', 'tablet'],\n        'Apanda A60': ['Apanda', 'A60'],\n        'apanda-A60': ['Apanda', 'A60'],\n        'A80KSC': ['Archos', 'Arnova 8', 'tablet'],\n        'AN7CG2': ['Archos', 'Arnova 7', 'tablet'],\n        'A101B': ['Archos', 'Arnova 10', 'tablet'],\n        'AN10BG2DT': ['Archos', 'Arnova 10 B', 'tablet'],\n        'AN10G2': ['Archos', 'Arnova 10 G2', 'tablet'],\n        'A32': ['Archos', '32', 'media'],\n        'A35DE': ['Archos', '35 Smart Home Phone'],\n        'A43': ['Archos', '43', 'media'],\n        'Archos5': ['Archos', '5', 'media'],\n        'A70H': ['Archos', '7', 'tablet'],\n        'A70HB': ['Archos', '7', 'tablet'],\n        'A70BHT': ['Archos', '7', 'tablet'],\n        'A70CHT': ['Archos', '7C', 'tablet'],\n        'A70S': ['Archos', '70', 'tablet'],\n        'A7EB': ['Archos', '70B', 'tablet'],\n        'ARCHOS 70it2': ['Archos', '70 IT 2', 'tablet'],\n        'ARCHOS 80G9': ['Archos', '80 G9', 'tablet'],\n        'ARCHOS 101G9': ['Archos', '101 G9', 'tablet'],\n        'A101IT': ['Archos', '101 IT', 'tablet'],\n        'ASTRI': ['ASTRI', 'e-reader', 'ereader'],\n        'eeepc': ['Asus', 'Eee Pc'],\n        'asus laptop': ['Asus', 'Eee Pc'],\n        'ME171': ['Asus', 'Eee Pad MeMO', 'tablet'],\n        'Slider SL101': ['Asus', 'Eee Pad Slider', 'tablet'],\n        'EPAD': ['Asus', 'Eee Pad Transformer', 'tablet'],\n        'TF101': ['Asus', 'Eee Pad Transformer', 'tablet'],\n        'Transformer TF101': ['Asus', 'Eee Pad Transformer', 'tablet'],\n        'Transformer TF101G': ['Asus', 'Eee Pad Transformer', 'tablet'],\n        'TF201': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n        'Transformer Prime TF201': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n        'Transformer Prime': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n        'Transformer Pad TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n        'ASUS Transformer TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n        'ASUS Transformer Pad TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n        'ASUS Transformer Pad TF300TG': ['Asus', 'Transformer Pad 300', 'tablet'],\n        'ASUS Transformer Pad TF700T': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n        'ASUS Transformer Pad TF700K': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n        'ASUS Transformer TF700K': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n        'PadFone': ['Asus', 'Padfone', 'tablet'],\n        'OMS TTD': ['Asus', 'Eee Pc T10'],\n        'ASUS T20': ['Asus', 'Eee Pc T20'],\n        'ETBW11AA': ['Asus', 'Tough'],\n        'AUX V900': ['AUX', 'V900'],\n        'M910A': ['AUX', 'M910'],\n        'PICOpad-QGN': ['Axioo', 'Picopad QGN', 'tablet'],\n        'NOOK': ['Barnes & Noble', 'NOOK', 'ereader'],\n        'NookColor': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n        'NOOK BNRV200': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n        'NOOK BNRV300': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n        'NookTablet': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'Nook Tablet': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'NOOK BNTV250': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'NOOK BNTV250A': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'BNTV250': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'BNTV250A': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'NOOK Slate': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n        'BenWee 5100': ['BenWee', '5100'],\n        'CA907AAC0G': ['Besta', 'CA907AAC0G'],\n        'BM999': ['Bmorn', 'BM999', 'tablet'],\n        'V11': ['Bmorn', 'V11', 'tablet'],\n        'V99': ['Bmorn', 'V99', 'tablet'],\n        'bq DaVinci': ['bq', 'DaVinci', 'tablet'],\n        'CT704': ['Carrefour', 'CT704', 'tablet'],\n        'CT1002': ['Carrefour', 'CT1002', 'tablet'],\n        'Camangi-Mangrove7': ['Camangi', 'Mangrove 7', 'tablet'],\n        'WS171': ['Camangi', 'WebStation', 'tablet'],\n        'IS11CA': ['Casio', 'GzOne IS11CA'],\n        'C771': ['Casio', 'GzOne Commando'],\n        'CAT NOVA': ['Cat', 'NOVA', 'tablet'],\n        'ARMM3V': ['chinaleap', 'ARMM3V', 'tablet'],\n        'CIUS-7': ['Cisco', 'Cius', 'tablet'],\n        'CIUS-7-AT': ['Cisco', 'Cius', 'tablet'],\n        'CSL Spice MI300': ['CSL', 'Spice MI300'],\n        'CSL-MI410': ['CSL', 'Spice MI410'],\n        'MID1024': ['Coby', 'Kyros MID1024', 'tablet'],\n        'MID1125': ['Coby', 'Kyros MID1125', 'tablet'],\n        'MID1126': ['Coby', 'Kyros MID1126', 'tablet'],\n        'MID7010': ['Coby', 'Kyros MID7010', 'tablet'],\n        'MID7012': ['Coby', 'Kyros MID7012', 'tablet'],\n        'MID7015': ['Coby', 'Kyros MID7015', 'tablet'],\n        'MID7015A': ['Coby', 'Kyros MID7015', 'tablet'],\n        'MID7016': ['Coby', 'Kyros MID7016', 'tablet'],\n        'MID7020': ['Coby', 'Kyros MID7020', 'tablet'],\n        'MID7022': ['Coby', 'Kyros MID7022', 'tablet'],\n        'MID7024': ['Coby', 'Kyros MID7024', 'tablet'],\n        'MID7025': ['Coby', 'Kyros MID7025', 'tablet'],\n        'MID7127': ['Coby', 'Kyros MID7127', 'tablet'],\n        'MID8024': ['Coby', 'Kyros MID8024', 'tablet'],\n        'MID8125': ['Coby', 'Kyros MID8125', 'tablet'],\n        'MID8127': ['Coby', 'Kyros MID8127', 'tablet'],\n        'Z71': ['Commtiva', 'Z71'],\n        'V-T100': ['Commtiva', 'V-T100'],\n        'FIH-FB0': ['Commtiva', 'HD700'],\n        'Coolpad D510': ['Coolpad', 'D510'],\n        'Coolpad 8020': ['Coolpad', '8020'],\n        'D530': ['Coolpad', 'D530'],\n        'Coolpad D530': ['Coolpad', 'D530'],\n        'D539': ['Coolpad', 'D539'],\n        'Coolpad D539': ['Coolpad', 'D539'],\n        'E239': ['Coolpad', 'E239'],\n        'Coolpad E239': ['Coolpad', 'E239'],\n        'Coolpad N930': ['Coolpad', 'N930'],\n        'N930': ['Coolpad', 'N930'],\n        'Coolpad W706': ['Coolpad', 'W706'],\n        'Coolpad W706+': ['Coolpad', 'W706'],\n        'Coolpad W708': ['Coolpad', 'W708'],\n        'W711': ['Coolpad', 'W711'],\n        'Coolpad 5010': ['Coolpad', '5010'],\n        'Coolpad 5210': ['Coolpad', '5210'],\n        'Coolpad 5820': ['Coolpad', '5820'],\n        '5832': ['Coolpad', '5832'],\n        'Coolpad 5832': ['Coolpad', '5832'],\n        '5855': ['Coolpad', '5855'],\n        'Coolpad 5860': ['Coolpad', '5860'],\n        'Coolpad 5860+': ['Coolpad', '5860'],\n        'Coolpad 5860s': ['Coolpad', '5860'],\n        '5860': ['Coolpad', '5860'],\n        '5860A': ['Coolpad', '5860'],\n        'Coolpad 5870': ['Coolpad', '5870'],\n        '5870': ['Coolpad', '5870'],\n        'Coolpad 7005': ['Coolpad', '7005'],\n        '7260': ['Coolpad', '7260'],\n        'Coolpad 7019': ['Coolpad', '7019'],\n        'Coolpad 7260': ['Coolpad', '7260'],\n        'Coolpad 8013': ['Coolpad', '8013'],\n        'Coolpad 8809': ['Coolpad', '8809'],\n        'Coolpad 8810': ['Coolpad', '8810'],\n        '8810': ['Coolpad', '8810'],\n        '8150': ['Coolpad', '8150'],\n        'Coolpad 8150D': ['Coolpad', '8150'],\n\n        'Coolpad 8811': ['Coolpad', '8811'],\n        'Coolpad 9900': ['Coolpad', '9900'],\n        'Coolpad 8050': ['Coolpad', '8050'],\n        'ZiiO7': ['Creative', 'ZiiO 7', 'tablet'],\n        'ZiiLABS ZiiO7': ['Creative', 'ZiiO 7', 'tablet'],\n        'ZiiLABS ZiiO10 ': ['Creative', 'ZiiO 10', 'tablet'],\n        'CUBE K8GT A': ['Cube', 'K8GT A', 'tablet'],\n        'CUBE K8GT B': ['Cube', 'K8GT B', 'tablet'],\n        'K8GT C': ['Cube', 'K8GT C', 'tablet'],\n        'K8GT H': ['Cube', 'K8GT H', 'tablet'],\n        'CUBE K8GT H': ['Cube', 'K8GT H', 'tablet'],\n        'K8GT W': ['Cube', 'K8GT W', 'tablet'],\n        'CUBE U8GT': ['Cube', 'U8GT', 'tablet'],\n        'CUBE U9GT': ['Cube', 'U9GT', 'tablet'],\n        'CUBE U9GT 2': ['Cube', 'U9GT 2', 'tablet'],\n        'Cube U9GT2': ['Cube', 'U9GT 2', 'tablet'],\n        'U9GT': ['Cube', 'U9GT', 'tablet'],\n        'U9GT2 From moage.com': ['Cube', 'U9GT 2', 'tablet'],\n        'N90 From moage.com': ['Cube', 'U9GT 2', 'tablet'],\n        'U9GT S': ['Cube', 'U9GT S', 'tablet'],\n        'U9GT S A': ['Cube', 'U9GT SA', 'tablet'],\n        'U9GTS A': ['Cube', 'U9GT SA', 'tablet'],\n        'U10GT 2': ['Cube', 'U10GT 2', 'tablet'],\n        'U10GT S': ['Cube', 'U10GT S', 'tablet'],\n        'U30GT-H': ['Cube', 'U30GT H', 'tablet'],\n        'CUBE Q7PRO': ['Cube', 'Q7 Pro', 'tablet'],\n        'CUBE Q7PRO J': ['Cube', 'Q7 Pro', 'tablet'],\n        'Cydle M7 (v0005.04.03.12.ko)': ['Cydle', 'M7 MultiPAD', 'tablet'],\n        'Dell Aero': ['Dell', 'Aero'],\n        'Dell M01M': ['Dell', 'Mini 5', 'tablet'],\n        'Dell Streak': ['Dell', 'Streak', 'tablet'],\n        '001DL': ['Dell', 'Streak', 'tablet'],\n        '101DL': ['Dell', 'Streak Pro', 'tablet'],\n        'GS01': ['Dell', 'Streak Pro', 'tablet'],\n        'Dell Streak Pro': ['Dell', 'Streak Pro', 'tablet'],\n        'streak7': ['Dell', 'Streak 7', 'tablet'],\n        'Dell Streak 7': ['Dell', 'Streak 7', 'tablet'],\n        'Dell Streak 10 Pro': ['Dell', 'Streak 10 Pro', 'tablet'],\n        'Dell V04B': ['Dell', 'Streak V04B', 'tablet'],\n        'Dell Venue': ['Dell', 'Venue'],\n        'Dell XCD35': ['Dell', 'XCD35'],\n        'XCD35': ['Dell', 'XCD35'],\n        'iDx7': ['Digma', 'iDx7', 'tablet'],\n        'iDx10': ['Digma', 'iDx10', 'tablet'],\n        'iDx10 3G': ['Digma', 'iDx10', 'tablet'],\n        'DM009SH': ['Disney Mobile', 'DM009SH'],\n        'DM010SH': ['Disney Mobile', 'DM010SH'],\n        'DM012SH': ['Disney Mobile', 'DM012SH'],\n        'F-08D': ['Disney Mobile', 'F-08D'],\n        'P-05D': ['Disney Mobile', 'P-05D'],\n        'Tablet-P27': ['DracoTek', 'P27 Tablet', 'tablet'],\n        'edgejr': ['EnTourage', 'Pocket eDGe', 'tablet'],\n        'l97D': ['EPad', 'l97D', 'tablet'],\n        'M4301': ['Eston', 'MID M4301', 'media'],\n        'P10AN': ['Exper', 'Easypad P10AN', 'tablet'],\n        'FIH-F0X': ['FIH', 'F0X'],\n        'Fly IQ260': ['Fly', 'IQ260 BlackBird'],\n        'ISW11F': ['Fujitsu', 'Arrows Z'],\n        'ISW13F': ['Fujitsu', 'Arrows Z'],\n        'IS12F': ['Fujitsu', 'Arrows ES'],\n        'F-01D': ['Fujitsu', 'Arrows Tab LTE', 'tablet'],\n        'F-03D': ['Fujitsu', 'Arrows Kiss'],\n        'F-05D': ['Fujitsu', 'Arrows X LTE'],\n        'F-07D': ['Fujitsu', 'Arrows \\u00c3\\ufffd\\u00c2\\u00bc'],\n        'F-10D': ['Fujitsu', 'Arrows X F-10D'],\n        'F-12C': ['Fujitsu', 'Globetrotter'],\n        'f12arc': ['Fujitsu', 'F12arc'],\n        'M532': ['Fujitsu', 'Stylistic M532', 'tablet'],\n        'Garminfone': ['Garmin-Asus', 'Garminfone'],\n        'Garmin-Asus A10': ['Garmin-Asus', 'Nuvifone A10'],\n        'Garmin-Asus A50': ['Garmin-Asus', 'Nuvifone A50'],\n        'TPA60W': ['Gateway', 'TPA60W', 'tablet'],\n        'Geeksphone ZERO': ['Geeksphone', 'ZERO'],\n        'gemei G2': ['Gemei', 'G2', 'tablet'],\n        'Gemei G2': ['Gemei', 'G2', 'tablet'],\n        'gemei G3': ['Gemei', 'G3', 'tablet'],\n        'Gemei G9': ['Gemei', 'G9', 'tablet'],\n        'GSmart G1317D': ['Gigabyte', 'GSmart G1317D'],\n        'Gigabyte TB100': ['Gigabyte', 'TB100', 'tablet'],\n        'GN100': ['Gionee', 'GN100'],\n        'GN105': ['Gionee', 'GN105'],\n        'GN106': ['Gionee', 'GN106'],\n        'GN200': ['Gionee', 'GN200'],\n        'GN205': ['Gionee', 'GN205'],\n        'GN700W': ['Gionee', 'GN700W'],\n        'GN708W': ['Gionee', 'GN708W'],\n        'Google Ion': ['Google', 'Ion'],\n        'Nexus One': ['Google', 'Nexus One'],\n        'NexusOne': ['Google', 'Nexus One'],\n        'HTC Nexus One': ['Google', 'Nexus One'],\n        'Nexus S': ['Google', 'Nexus S'],\n        'Google Nexus S': ['Google', 'Nexus S'],\n        'Nexus S 4G': ['Google', 'Nexus S 4G'],\n        'Dooderbutt-4.0.3-v1': ['Google', 'Nexus S 4G'],\n        'Nexus 7': ['Google', 'Nexus 7', 'tablet'],\n        'Haier HW-W910': ['Haier', 'HW-W910'],\n        'SN10T1': ['HANNspree', 'HANNSpad SN10T1', 'tablet'],\n        'SN10T2': ['HANNspree', 'HANNSpad SN10T2', 'tablet'],\n        'HannsComb': ['HANNspree', 'HANNSpad', 'tablet'],\n        'X1': ['HCL', 'ME X1', 'tablet'],\n        'MID Serails': ['Herotab', 'C8', 'tablet'],\n        'MID Serials': ['Herotab', 'C8', 'tablet'],\n        'COSMO DUO': ['Hiscreen', 'Cosmo DUO', 'tablet'],\n        'HS-U8': ['Hisense', 'U8'],\n        'HS-T92': ['Hisense', 'T92'],\n        'HS-E860': ['Hisense', 'E860'],\n        'HS-E910': ['Hisense', 'E910'],\n        'HS-E926': ['Hisense', 'E926'],\n\n        'HS-EG900': ['Hisense', 'EG900'],\n        'HS-ET919': ['Hisense', 'ET919'],\n        'EG968B': ['Hisense', 'EG968B'],\n        'HKPHONE H8-3G': ['HKPhone', 'H8 3G'],\n        'HOSIN U2': ['Hosin', 'U2'],\n        'Touchpad': ['HP', 'TouchPad', 'tablet'],\n        'HP Touchpad': ['HP', 'TouchPad', 'tablet'],\n        'cm tenderloin': ['HP', 'TouchPad', 'tablet'],\n        'aokp tenderloin': ['HP', 'TouchPad', 'tablet'],\n        'HTC Amaze 4G': ['HTC', 'Amaze 4G'],\n        'HTC Ruby': ['HTC', 'Amaze 4G'],\n        'HTC Amaze 4G(Ruby)': ['HTC', 'Amaze 4G'],\n        'Amaze 4G': ['HTC', 'Amaze 4G'],\n        'HTC Aria': ['HTC', 'Aria'],\n        'HTC Aria A6380': ['HTC', 'Aria'],\n        'HTC Liberty A6380': ['HTC', 'Aria'],\n        'HTC Liberty': ['HTC', 'Aria'],\n        'HTC A6366': ['HTC', 'Aria'],\n        'HTC Bee': ['HTC', 'Bee'],\n        'HTC ChaCha': ['HTC', 'ChaCha'],\n        'HTC ChaCha A810e': ['HTC', 'ChaCha'],\n        'HTC ChaChaCha A810e': ['HTC', 'ChaCha'],\n        'HTC A810e': ['HTC', 'ChaCha'],\n        'HTC A9188': ['HTC', 'Tianxi'],\n        'HTC Bravo': ['HTC', 'Desire'],\n        'HTC Desire': ['HTC', 'Desire'],\n        'HTC Desire A8181': ['HTC', 'Desire'],\n        'HTC Desire A8183': ['HTC', 'Desire'],\n        'HTC Desire Beats A8181': ['HTC', 'Desire'],\n        'HTC Desire CDMA': ['HTC', 'Desire'],\n        'HTC Desire SMS': ['HTC', 'Desire'],\n        'HTC Desire S.M.S': ['HTC', 'Desire'],\n        'HTC Desire C': ['HTC', 'Desire C'],\n        'HTC DesireHD': ['HTC', 'Desire HD'],\n        'HTC DesireHD A9191': ['HTC', 'Desire HD'],\n        'HTC DesireHD A9192': ['HTC', 'Desire HD'],\n        'HTC Desire HD A9191': ['HTC', 'Desire HD'],\n        'HTC A9191': ['HTC', 'Desire HD'],\n        'HTC A9191 for AT&T': ['HTC', 'Desire HD'],\n        'HTC A9192': ['HTC', 'Desire HD'],\n        'HTC Desire HD': ['HTC', 'Desire HD'],\n        'HTC Desire HD with Beats Audio': ['HTC', 'Desire HD'],\n        'HTC Desire S': ['HTC', 'Desire S'],\n        'HTC DesireS': ['HTC', 'Desire S'],\n        'HTC DesiresS': ['HTC', 'Desire S'],\n        'HTC DesireS S510e': ['HTC', 'Desire S'],\n        'HTC DesireS S510b': ['HTC', 'Desire S'],\n        'HTC Desire S S510e': ['HTC', 'Desire S'],\n        'HTC S510e': ['HTC', 'Desire S'],\n        'HTC Desire Saga': ['HTC', 'Desire S'],\n        'HTC Desire V': ['HTC', 'Desire V'],\n        'HTC T328w': ['HTC', 'Desire V'],\n        'HTC Desire VC': ['HTC', 'Desire VC'],\n        'HTC T328d': ['HTC', 'Desire VC'],\n        'HTC T328t': ['HTC', 'Desire VT'],\n        'HTC Desire Z': ['HTC', 'Desire Z'],\n        'HTC DesireZ': ['HTC', 'Desire Z'],\n        'HTC DesireZ A7272': ['HTC', 'Desire Z'],\n        'HTC Desire Z A7272': ['HTC', 'Desire Z'],\n        'HTC Vision': ['HTC', 'Desire Z'],\n        'HTC A7275': ['HTC', 'Desire Z'],\n        'HTC Dream': ['HTC', 'Dream'],\n        'HTC S710d': ['HTC', 'Droid Incredible 2'],\n        'HTC Incredible 2': ['HTC', 'Droid Incredible 2'],\n        'HTC X515d': ['HTC', 'EVO 3D'],\n        'HTC X515m': ['HTC', 'EVO 3D'],\n        'HTC X515C': ['HTC', 'EVO 3D'],\n        'HTC Evo 3D': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D GSM': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D X515a': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D GSM X515m': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D X515m': ['HTC', 'EVO 3D'],\n        'HTC EVO 3D X515M': ['HTC', 'EVO 3D'],\n        'HTC EVO3D X515a': ['HTC', 'EVO 3D'],\n        'HTC EVO3D X515m': ['HTC', 'EVO 3D'],\n        'HTC Evo 3D X515m': ['HTC', 'EVO 3D'],\n        'HTC Evo 3D with Beats Audio X515m': ['HTC', 'EVO 3D'],\n        'HTC Evo 4G': ['HTC', 'EVO 4G'],\n        'HTC EVO 4G': ['HTC', 'EVO 4G'],\n        'HTC X515E': ['HTC', 'EVO 4G+'],\n        'HTC EVO 4G+ For Sprint': ['HTC', 'EVO 4G+'],\n        'HTC EVO 4G++ For Sprint': ['HTC', 'EVO 4G+'],\n        'HTC C715c': ['HTC', 'EVO Design 4G'],\n        'HTC Design 4G': ['HTC', 'EVO Design 4G'],\n        'HTC EVO design 4G': ['HTC', 'EVO Design 4G'],\n        'HTC EVO Design 4G': ['HTC', 'EVO Design 4G'],\n        'HTC Evo Shift': ['HTC', 'EVO Shift'],\n        'HTC EVO Shift 4G': ['HTC', 'EVO Shift'],\n        'HTC A310e': ['HTC', 'Explorer'],\n        'HTC Explorer': ['HTC', 'Explorer'],\n        'HTC Explorer A310b': ['HTC', 'Explorer'],\n        'HTC Explorer A310e': ['HTC', 'Explorer'],\n        'HTC P510e': ['HTC', 'Flyer', 'tablet'],\n        'HTC Flyer': ['HTC', 'Flyer', 'tablet'],\n        'HTC Flyer P510e': ['HTC', 'Flyer', 'tablet'],\n        'HTC Flyer P512': ['HTC', 'Flyer', 'tablet'],\n        'HTC Flyer P512 NA': ['HTC', 'Flyer', 'tablet'],\n        'HTC P515E': ['HTC', 'Flyer 4G', 'tablet'],\n        'HTC Gratia A6380': ['HTC', 'Gratia'],\n        'HTC HD': ['HTC', 'HD'],\n        'HTC HD2': ['HTC', 'HD2'],\n        'HTC HD2 T8585': ['HTC', 'HD2'],\n        'HTC HD2(Leo)': ['HTC', 'HD2'],\n        'HTC HD7': ['HTC', 'HD7'],\n        'HTC T9299+': ['HTC', 'HD7'],\n        'HTC HD7 for Sprint': ['HTC', 'HD7'],\n        'HTC HD7 4G T9299 For AT&T': ['HTC', 'HD7'],\n        'HTC HD7 4G T9299+ For AT&T': ['HTC', 'HD7'],\n        'HTC T9299+ For AT&T': ['HTC', 'HD7'],\n        'HTC HD7S T9399+': ['HTC', 'HD7s'],\n        'HTC HD7S T9899+': ['HTC', 'HD7s'],\n        'HTC T9899+ For AT&T': ['HTC', 'HD7s'],\n        'VitMod ExtraLite 1.6.5.fullodex for HTC HD7 Pro': ['HTC', 'HD7 Pro'],\n        'HTC Hero': ['HTC', 'Hero'],\n        'HTC HERO': ['HTC', 'Hero'],\n        'HTC Hero CDMA': ['HTC', 'Hero'],\n        'HTC HERO CDMA': ['HTC', 'Hero'],\n        'HTC HERO200': ['HTC', 'Hero 200'],\n        'HTC Hero S': ['HTC', 'Hero S'],\n        'HTC IMAGIO': ['HTC', 'Imagio'],\n        'HTC Incredible': ['HTC', 'Incredible'],\n        'HTC Incredible S710E': ['HTC', 'Incredible S'],\n        'HTC S710e': ['HTC', 'Incredible S'],\n        'HTC Incredible S': ['HTC', 'Incredible S'],\n        'HTC Incredible S S710e': ['HTC', 'Incredible S'],\n        'HTC Incredible S s710e': ['HTC', 'Incredible S'],\n        'HTC IncredibleS S710e': ['HTC', 'Incredible S'],\n        'HTC Incredible S with Beats Audio': ['HTC', 'Incredible S'],\n        'HTC Vivo': ['HTC', 'Incredible S'],\n        'HTC Innovation': ['HTC', 'Innovation'],\n        'HTC Inspire 4G': ['HTC', 'Inspire 4G'],\n        'HTC HD7 Inspire 4G For Vodafone': ['HTC', 'Inspire 4G'],\n        'HTC P715a': ['HTC', 'Jetstream', 'tablet'],\n        'HTC Legend': ['HTC', 'Legend'],\n        'HTC Magic': ['HTC', 'Magic'],\n        'HTC Sapphire': ['HTC', 'Magic'],\n        'HTC Lexikon': ['HTC', 'Merge'],\n        'HTC One S': ['HTC', 'One S'],\n        'HTC Z520e': ['HTC', 'One S'],\n        'HTC One V': ['HTC', 'One V'],\n        'HTC T320e': ['HTC', 'One V'],\n        'HTC One X': ['HTC', 'One X'],\n        'HTC S720e': ['HTC', 'One X'],\n        'HTC Endeavour-LS': ['HTC', 'One X'],\n        'HTC One XL': ['HTC', 'One XL'],\n        'HTC X710a': ['HTC', 'Raider 4G'],\n        'HTC Raider': ['HTC', 'Raider 4G'],\n        'HTC Raider X710e': ['HTC', 'Raider 4G'],\n        'HTC Raider X710s': ['HTC', 'Raider 4G'],\n        'HTC Raider 4G X710e': ['HTC', 'Raider 4G'],\n        'HTC PH39100': ['HTC', 'Raider 4G'],\n        'HTC Holiday': ['HTC', 'Raider 4G'],\n        'HTC Velocity 4G X710s': ['HTC', 'Raider 4G'],\n        'HTC Rezound': ['HTC', 'Rezound'],\n        'HTC Rhyme S510b': ['HTC', 'Rhyme'],\n        'HTC S510b': ['HTC', 'Rhyme'],\n        'HTC Bliss': ['HTC', 'Rhyme'],\n        'HTC Bliss S510b': ['HTC', 'Rhyme'],\n        'HTC Salsa C510e': ['HTC', 'Salsa'],\n        'HTC C510e': ['HTC', 'Salsa'],\n        'HTC Z710a': ['HTC', 'Sensation'],\n        'HTC Z710e': ['HTC', 'Sensation'],\n        'HTC Z710t': ['HTC', 'Sensation'],\n        'HTC Sensation': ['HTC', 'Sensation'],\n        'HTC Sensation Z710': ['HTC', 'Sensation'],\n        'HTC Sensation Z710a': ['HTC', 'Sensation'],\n        'HTC Sensation Z710e': ['HTC', 'Sensation'],\n        'HTC Sensation Z710E': ['HTC', 'Sensation'],\n        'HTC Sensation Z710e For AT&T': ['HTC', 'Sensation'],\n        'HTC Sensation Z710e with Beats Audio': ['HTC', 'Sensation'],\n        'HTC Sensation with Beats Audio Z710e': ['HTC', 'Sensation'],\n        'HTC Sensation with Beats Audio': ['HTC', 'Sensation'],\n        'HTC Sensation Taste': ['HTC', 'Sensation'],\n        'HTC Pyramid': ['HTC', 'Sensation'],\n        'HTC Pyramid Z710a': ['HTC', 'Sensation'],\n        'HTC Pyramid Z710e': ['HTC', 'Sensation'],\n        'HTC Sensation 4G': ['HTC', 'Sensation'],\n        'HTC Sensation 4G with Beats Audio': ['HTC', 'Sensation'],\n        'HTC Sensation G14': ['HTC', 'Sensation'],\n        'HTC Sensation G14 for AT&T': ['HTC', 'Sensation'],\n        'HTC G14 sensation': ['HTC', 'Sensation'],\n        'HTC Z715e': ['HTC', 'Sensation XE'],\n        'HTC Sensation Z715e': ['HTC', 'Sensation XE'],\n        'HTC SensationXE Beats': ['HTC', 'Sensation XE'],\n        'HTC SensationXE Beats Z715a': ['HTC', 'Sensation XE'],\n        'HTC SensationXE Beats Z715e': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE Z715e': ['HTC', 'Sensation XE'],\n        'HTC SensationXE Z715e': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE Beats': ['HTC', 'Sensation XE'],\n        'HTC SensationXE with Beats Audio': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE with Beats Audio': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE with Beats Audio Z715a': ['HTC', 'Sensation XE'],\n        'HTC Sensation Juredroid XE Beats Audio': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE with Beats Audio Z715e': ['HTC', 'Sensation XE'],\n        'HTC Sensation XE With Beats Audio Z715e': ['HTC', 'Sensation XE'],\n        'HTC Sensation 4G XE with Beats Audio': ['HTC', 'Sensation XE'],\n        'HTC Sensation with Beats Audio Z715e': ['HTC', 'Sensation XE'],\n        'HTC X315E': ['HTC', 'Sensation XL'],\n        'HTC SensationXL Beats X315b': ['HTC', 'Sensation XL'],\n        'HTC SensationXL Beats X315e': ['HTC', 'Sensation XL'],\n        'HTC Sensation XL with Beats Audio X315b': ['HTC', 'Sensation XL'],\n        'HTC Sensation XL with Beats Audio X315e': ['HTC', 'Sensation XL'],\n        'HTC Runnymede': ['HTC', 'Sensation XL'],\n        'HTC G21': ['HTC', 'Sensation XL'],\n        'HTC PH06130': ['HTC', 'Status'],\n        'HTC Status': ['HTC', 'Status'],\n        'HTC Tattoo': ['HTC', 'Tattoo'],\n        'HTC TATTOO A3288': ['HTC', 'Tattoo'],\n        'HTC click': ['HTC', 'Tattoo'],\n        'HTC X310e': ['HTC', 'Titan'],\n        'HTC T7373': ['HTC', 'Touch Pro II'],\n        'HTC ThunderBolt': ['HTC', 'ThunderBolt'],\n        'HTC Mecha': ['HTC', 'ThunderBolt'],\n        'HTC Velocity 4G': ['HTC', 'Velocity 4G'],\n        'HTC Wildfire': ['HTC', 'Wildfire'],\n        'HTC Wildfire A3333': ['HTC', 'Wildfire'],\n        'HTC A3366': ['HTC', 'Wildfire'],\n        'HTC A3380': ['HTC', 'Wildfire'],\n        'HTC WildfireS': ['HTC', 'Wildfire S'],\n        'HTC Wildfire S': ['HTC', 'Wildfire S'],\n        'Htc Wildfire s': ['HTC', 'Wildfire S'],\n        'HTC Wildfire S A510e': ['HTC', 'Wildfire S'],\n        'HTC Wildfire S A510b': ['HTC', 'Wildfire S'],\n        'HTC WildfireS A510e': ['HTC', 'Wildfire S'],\n        'HTC WildfireS A510b': ['HTC', 'Wildfire S'],\n        'htc wildfire s a510e': ['HTC', 'Wildfire S'],\n        'HTC Wildfire S A515c': ['HTC', 'Wildfire S'],\n        'HTC A510a': ['HTC', 'Wildfire S'],\n        'HTC A510e': ['HTC', 'Wildfire S'],\n        'HTC A510c': ['HTC', 'Wildfire S'],\n        'HTCX06HT': ['HTC', 'Desire'],\n        'HTC A6390': ['HTC', 'A6390'],\n        'HTC A8180': ['HTC', 'A8180'],\n        'HTC PG762': ['HTC', 'PG762'],\n        'HTC S715e': ['HTC', 'S715e'],\n        'HTC S720t': ['HTC', 'S720t'],\n        'HTC Z510d': ['HTC', 'Z510d'],\n        'HTC Z560e': ['HTC', 'Z560e'],\n        'HTC VLE U': ['HTC', 'One S'],\n        'HTC VLE#U': ['HTC', 'One S'],\n        'HTC VIE U': ['HTC', 'One S'],\n        'HTC EVA UL': ['HTC', 'One V'],\n        'HTC ENR U': ['HTC', 'One X'],\n        'ENR U': ['HTC', 'One X'],\n        'EndeavorU': ['HTC', 'One X'],\n        'Liberty': ['HTC', 'Aria'],\n        'Desire': ['HTC', 'Desire'],\n        'Desire A8181': ['HTC', 'Desire'],\n        'desire hd': ['HTC', 'Desire HD'],\n        'Desire HD': ['HTC', 'Desire HD'],\n        'Dedire HD': ['HTC', 'Desire HD'],\n        'Desire Hd (ace)': ['HTC', 'Desire HD'],\n        'Desire S': ['HTC', 'Desire S'],\n        'DesireS': ['HTC', 'Desire S'],\n        'Desire Saga': ['HTC', 'Desire S'],\n        'Desire Z': ['HTC', 'Desire Z'],\n        'Dream': ['HTC', 'Dream'],\n        'Droid Incredible': ['HTC', 'Droid Incredible'],\n        'EVO': ['HTC', 'EVO'],\n        'Evo HD2': ['HTC', 'EVO HD'],\n        'Evo 3D Beats X515m': ['HTC', 'EVO 3D'],\n        'Evo 3D GSM': ['HTC', 'EVO 3D'],\n        'EVO 3D X515m': ['HTC', 'EVO 3D'],\n        'EVO3D X515m': ['HTC', 'EVO 3D'],\n        'Evo 4G': ['HTC', 'EVO 4G'],\n        'EVO 4G': ['HTC', 'EVO 4G'],\n        'photon': ['HTC', 'HD mini'],\n        'GinDream\\/GinMagic': ['HTC', 'Dream'],\n        'HD2': ['HTC', 'HD2'],\n        'HD7  Pro': ['HTC', 'HD7 Pro'],\n        'Hero': ['HTC', 'Hero'],\n        'HERO CDMA': ['HTC', 'Hero'],\n        'HERO200': ['HTC', 'Hero 200'],\n        'Incredible': ['HTC', 'Droid Incredible'],\n        'Incredible 2': ['HTC', 'Droid Incredible 2'],\n        'Incredible S': ['HTC', 'Incredible S'],\n        'IncredibleS S710e': ['HTC', 'Incredible S'],\n        'IncredibleS': ['HTC', 'Incredible S'],\n        'Inspire HD': ['HTC', 'Inspire 4G'],\n        'Inspire 4G': ['HTC', 'Inspire 4G'],\n        'Legend': ['HTC', 'Legend'],\n        'NexusHD2': ['HTC', 'HD2'],\n        'Nexus HD2': ['HTC', 'HD2'],\n        'Docomo HT-03A': ['HTC', 'Magic'],\n        'MIUI.us Sensation 4G': ['HTC', 'Sensation 4G'],\n        'SiRF Dream': ['HTC', 'Dream'],\n        'Pyramid': ['HTC', 'Sensation'],\n        'Sensation': ['HTC', 'Sensation'],\n        'Sensation Z710e': ['HTC', 'Sensation'],\n        'Sensation 4G': ['HTC', 'Sensation'],\n        'Sensation 4g': ['HTC', 'Sensation'],\n        'TripNiCE Pyramid': ['HTC', 'Sensation'],\n        'SensationXE Beats Z715e': ['HTC', 'Sensation XE'],\n        'SensationXL Beats X315e': ['HTC', 'Sensation XL'],\n        'Click': ['HTC', 'Tattoo'],\n        'Wildfire': ['HTC', 'Wildfire'],\n        'Wildfire S': ['HTC', 'Wildfire S'],\n        'Wildfire S A510e': ['HTC', 'Wildfire S'],\n        'Sprint APX515CKT': ['HTC', 'EVO 3D'],\n        'Sprint APA9292KT': ['HTC', 'EVO 4G'],\n        'Sprint APA7373KT': ['HTC', 'EVO Shift 4G'],\n        'Sprint APC715CKT': ['HTC', 'EVO Design 4G'],\n        'A3380': ['HTC', 'Wildfire'],\n        'A6277': ['HTC', 'Hero'],\n        'a7272': ['HTC', 'Desire Z'],\n        'A7272+(HTC DesireZ)': ['HTC', 'Desire Z'],\n        'S31HT': ['HTC', 'Aria'],\n        'S710d': ['HTC', 'Droid Incredible 2'],\n        'S710D': ['HTC', 'Droid Incredible 2'],\n        'X06HT': ['HTC', 'Desire'],\n        '001HT': ['HTC', 'Desire HD'],\n        'X325a': ['HTC', 'One X'],\n        'Z520m': ['HTC', 'One S'],\n        'Z710': ['HTC', 'Sensation'],\n        'Z710e': ['HTC', 'Sensation'],\n        'T9199h': ['HTC', 'T9199h'],\n        'HTC S610d': ['HTC', 'S610d'],\n        'ADR6200': ['HTC', 'Droid Eris'],\n        'ADR6300': ['HTC', 'Droid Incredible'],\n        'ADR6325VW': ['HTC', 'Merge'],\n        'ADR6330VW': ['HTC', 'Rhyme'],\n        'ADR6350': ['HTC', 'Droid Incredible 2'],\n        'ADR6400L': ['HTC', 'Thunderbolt 4G'],\n        'ADR6400L 4G': ['HTC', 'Thunderbolt 4G'],\n        'ADR6410LVW 4G': ['HTC', 'Fireball'],\n        'ADR6425LVW': ['HTC', 'Rezound'],\n        'ADR6425LVW 4G': ['HTC', 'Rezound'],\n        'Coquettish Red': ['HTC', 'Rezound'],\n        'PB99400': ['HTC', 'Droid Incredible'],\n        'pcdadr6350': ['HTC', 'Droid Incredible 2'],\n        'PC36100': ['HTC', 'EVO 4G'],\n        'PG06100': ['HTC', 'EVO Shift 4G'],\n        'PG41200': ['HTC', 'EVO View 4G', 'tablet'],\n        'PG86100': ['HTC', 'EVO 3D'],\n        'PG8610000': ['HTC', 'EVO 3D'],\n        'PH44100': ['HTC', 'EVO Design 4G'],\n        'PJ83100': ['HTC', 'One X'],\n        'ISW11HT': ['HTC', 'EVO 4G'],\n        'ISW12HT': ['HTC', 'EVO 3D'],\n        'ISW13HT': ['HTC', 'J'],\n        'USCCADR6275US Carrier ID 45': ['HTC', 'Desire'],\n        'USCCADR6285US': ['HTC', 'Hero S'],\n        'USCCADR6325US Carrier ID 45': ['HTC', 'Merge'],\n        'MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n        'Huawei MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n        'HUAWEI MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n        'Huawei S7-312u': ['Huawei', 'MediaPad', 'tablet'],\n        'MediaPad 10 FHD': ['Huawei', 'MediaPad', 'tablet'],\n        'Huawei C8500': ['Huawei', 'C8500'],\n        'Huawei C8500S': ['Huawei', 'C8500'],\n        'Huawei C8600': ['Huawei', 'C8600'],\n        'Huawei C8650': ['Huawei', 'C8650'],\n        'Huawei C8650+': ['Huawei', 'C8650'],\n        'Huawei C8800': ['Huawei', 'IDEOS X5'],\n        'Huawei C8810': ['Huawei', 'Ascend G300'],\n        'Huawei C8812': ['Huawei', 'Ascend C8812'],\n        'Huawei C8812E': ['Huawei', 'Ascend C8812'],\n        'Huawei C8825D': ['Huawei', 'Ascend C8825D'],\n        'Huawei C8860E': ['Huawei', 'Honor'],\n        'Huawei M835': ['Huawei', 'M835'],\n        'Huawei M860': ['Huawei', 'Ascend'],\n        'Huawei M921': ['Huawei', 'M921'],\n        'Huawei S8520': ['Huawei', 'S8520'],\n        'Huawei S8600': ['Huawei', 'S8600'],\n        'Huawei T8300': ['Huawei', 'T8300'],\n        'Huawei T8600': ['Huawei', 'T8600'],\n        'Huawei T8830': ['Huawei', 'T8830'],\n        'T8830': ['Huawei', 'T8830'],\n        'T8620': ['Huawei', 'T8620'],\n        'Huawei T8828': ['Huawei', 'T8828'],\n        'Huawei U8220': ['Huawei', 'U8220'],\n        'Huawei u8500': ['Huawei', 'IDEOS X2'],\n        'Huawei U8815': ['Huawei', 'Ascend G300'],\n        'Huawei U8825D': ['Huawei', 'Ascend G330D'],\n        'Huawei U8850': ['Huawei', 'Vision'],\n        'Huawei U8652': ['Huawei', 'Sonic'],\n        'Huawei U8800-51': ['Huawei', 'IDEOS X5'],\n        'Huawei U8818': ['Huawei', 'Ascend G300'],\n        'Huawei U9000': ['Huawei', 'Ascend X'],\n        'Huawei IDEOS U8500': ['Huawei', 'IDEOS X2'],\n        'Huawei IDEOS U8650': ['Huawei', 'Sonic'],\n        'Huawei IDEOS X3': ['Huawei', 'IDEOS X3'],\n        'Huawei Ideos X5': ['Huawei', 'IDEOS X5'],\n        'Huawei Ideos X5 1.12.9(ret4rt)': ['Huawei', 'IDEOS X5'],\n        'Huawei SONIC': ['Huawei', 'Sonic'],\n        'Huawei 8100-9': ['Huawei', 'U8100'],\n        'FUSIONideos': ['Huawei', 'IDEOS'],\n        'Gnappo Ideos': ['Huawei', 'IDEOS'],\n        'Ideos': ['Huawei', 'IDEOS'],\n        'IDEOS X5': ['Huawei', 'IDEOS X5'],\n        'Ideos S7': ['Huawei', 'IDEOS S7', 'tablet'],\n        'IDEOS S7': ['Huawei', 'IDEOS S7', 'tablet'],\n        'IDEOS S7 Slim': ['Huawei', 'IDEOS S7', 'tablet'],\n        'Huawei S7': ['Huawei', 'IDEOS S7', 'tablet'],\n        'SONIC': ['Huawei', 'Sonic'],\n        'Kyivstar Aqua': ['Huawei', 'Sonic'],\n        'Lucky Ultra Sonic U8650': ['Huawei', 'Sonic'],\n        'Turkcell T20': ['Huawei', 'Sonic'],\n        'MTC 950': ['Huawei', 'U8160'],\n        'MTC 955': ['Huawei', 'Sonic'],\n        'MTC Evo': ['Huawei', 'C8500'],\n        'MTC Android': ['Huawei', 'U8110'],\n        'S31HW': ['Huawei', 'Pocket WiFi S'],\n        'S41HW': ['Huawei', 'Pocket WiFi S II'],\n        '007HW': ['Huawei', 'Vision'],\n        'UM840': ['Huawei', 'Evolution'],\n        'M860': ['Huawei', 'Ascend'],\n        'M865': ['Huawei', 'Ascend II'],\n        'M886': ['Huawei', 'Glory'],\n        'C8150': ['Huawei', 'IDEOS'],\n        'c8500': ['Huawei', 'C8500'],\n        'C8500': ['Huawei', 'C8500'],\n        'C8500S': ['Huawei', 'C8500'],\n        'C8600': ['Huawei', 'C8600'],\n        'c8650': ['Huawei', 'C8650'],\n        'C8650': ['Huawei', 'C8650'],\n        'c8800': ['Huawei', 'C8800'],\n        'C8800': ['Huawei', 'C8800'],\n        'c8810': ['Huawei', 'Ascend G300C'],\n        'C8812': ['Huawei', 'Ascend C8812'],\n        'S8600': ['Huawei', 'S8600'],\n        'U8100': ['Huawei', 'U8100'],\n        'U8110': ['Huawei', 'U8110'],\n        'u8120': ['Huawei', 'U8120'],\n        'U8120': ['Huawei', 'U8120'],\n        'U8180': ['Huawei', 'IDEOS X1'],\n        'U8220': ['Huawei', 'Pulse'],\n        'U8300': ['Huawei', 'U8300'],\n        'U8350': ['Huawei', 'Boulder'],\n        'U8150': ['Huawei', 'IDEOS'],\n        'U8160': ['Huawei', 'U8160'],\n        'U8500': ['Huawei', 'IDEOS X2'],\n        'U8500 HiQQ': ['Huawei', 'U8500 HiQQ Edition'],\n        'U8510': ['Huawei', 'IDEOS X3'],\n        'u8650': ['Huawei', 'Sonic'],\n        'U8650': ['Huawei', 'Sonic'],\n        'U8650-1': ['Huawei', 'Sonic'],\n        'U8660': ['Huawei', 'Sonic'],\n        'u8800': ['Huawei', 'IDEOS X5'],\n        'U8800': ['Huawei', 'IDEOS X5'],\n        'U8800+': ['Huawei', 'IDEOS X5'],\n        'U8800X': ['Huawei', 'IDEOS X5'],\n        'U8800pro': ['Huawei', 'IDEOS X5 Pro'],\n        'U8800PRO': ['Huawei', 'IDEOS X5 Pro'],\n        'U8800Pro': ['Huawei', 'IDEOS X5 Pro'],\n        'u8800pro': ['Huawei', 'IDEOS X5 Pro'],\n        'U8800 Pro': ['Huawei', 'IDEOS X5 Pro'],\n        'U8818': ['Huawei', 'Ascend G300'],\n        'U8850': ['Huawei', 'Vision'],\n        'u8860': ['Huawei', 'Honor'],\n        'U8860': ['Huawei', 'Honor'],\n        'U9000': ['Huawei', 'Ascend X'],\n        'U9200': ['Huawei', 'Ascend P1'],\n        'U9200-1': ['Huawei', 'Ascend P1'],\n        'U9500': ['Huawei', 'Ascend D1'],\n        'U9501L': ['Huawei', 'Ascend D LTE'],\n        'U9510': ['Huawei', 'Ascend D quad'],\n        'U9510E': ['Huawei', 'Ascend D quad'],\n        'Comet': ['Huawei', 'Comet'],\n        'GS02': ['Huawei', 'Honor'],\n        'GS03': ['Huawei', 'Ascend P1'],\n        'DroniX-0.5': ['Huawei', 'U8180'],\n        'MTS-SP101': ['Huawei', 'C8511'],\n        'TSP21': ['Huawei', 'U8110'],\n        'HYUNDAI H6': ['Hyundai', 'Storm H6'],\n        'iBall Slide i7011': ['iBall', 'Slide i7011'],\n        'NetTAB RUNE': ['IconBit', 'NetTab Rune', 'tablet'],\n        'D70W': ['Icoo', 'D70W', 'tablet'],\n        'D80': ['Icoo', 'D80', 'tablet'],\n        'INFOBAR A01': ['iida', 'INFOBAR A01'],\n        'M009F': ['Infotmic', 'M009F'],\n        'AZ210A': ['Intel', 'AZ210A'],\n        'AZ210B': ['Intel', 'AZ210B'],\n        'AZ510': ['Intel', 'AZ510'],\n        'greenridge': ['Intel', 'Green Ridge', 'tablet'],\n        'INQ Cloud Touch': ['INQ', 'Cloud Touch'],\n        'ILT-MX100': ['iRiver', 'Tab', 'tablet'],\n        'IVIO_DE38': ['Ivio', 'DE38'],\n        'JY-G2': ['Jiayu', 'G2'],\n        'JXD S601WIFI': ['JXD', 'S601 WIFI', 'media'],\n        'A2': ['KakaTech', 'A2'],\n        'D91': ['KK', 'D91', 'tablet'],\n        'K080': ['Kobo', 'K080', 'ereader'],\n        'A106': ['koobee', 'A160'],\n        'KPT A9': ['KPT', 'A9'],\n        'EV-S100': ['Kttech', 'Take EV-S100'],\n        'KM-S120': ['Kttech', 'Take 2 KM-S120'],\n        'KM-S200': ['TAKE', 'Janus KM-S200'],\n        'KM-S220': ['Kttech', 'Take Tachy KM-S220'],\n        'Kyobo mirasol eReader': ['Kyobo', 'eReader', 'ereader'],\n        'ISW11K': ['Kyocera', 'Digno'],\n        'JC-KSP8000': ['Kyocera', 'Echo'],\n        'KSP8000': ['Kyocera', 'Echo'],\n        'Zio': ['Kyocera', 'Zio'],\n        'C5155': ['Kyocera', 'C5155'],\n        'C5170': ['Kyocera', 'C5170'],\n        'M9300': ['Kyocera', 'M9300'],\n        'E800': ['K-Touch', 'E800'],\n        'W606': ['K-Touch', 'W606'],\n        'K-Touch T619': ['K-Touch', 'T619'],\n        'K-Touch W619': ['K-Touch', 'W619'],\n        'K-Touch W650': ['K-Touch', 'W650'],\n        'W700': ['K-Touch', 'W700'],\n        'W800': ['K-Touch', 'W800'],\n        'W806': ['K-Touch', 'W806'],\n        'W808': ['K-Touch', 'W808'],\n        'W810': ['K-Touch', 'W810'],\n        'X900': ['Lava', 'XOLO X900'],\n        'Lenovo A798t': ['Lenovo', 'A798t'],\n        'LENOVO-Lenovo-A288t': ['Lenovo', 'LePhone A288'],\n        'ThinkPad Tablet': ['Lenovo', 'ThinkPad Tablet', 'tablet'],\n        'K1': ['Lenovo', 'IdeaPad K1', 'tablet'],\n        'Ideapad S10-3T': ['Lenovo', 'IdeaPad S10-3T', 'tablet'],\n        'S2005A-H': ['Lenovo', 'S2005A'],\n        'IdeaTab S2007A-D': ['Lenovo', 'IdeaTab S2007A', 'tablet'],\n        'IdeaTabV2007A': ['Lenovo', 'IdeaTab V2007A', 'tablet'],\n        'IdeaTabV2007A-D-I': ['Lenovo', 'IdeaTab V2007A', 'tablet'],\n        'IdeaTabV2010A': ['Lenovo', 'IdeaTab V2010A', 'tablet'],\n        'IdeaTab A2107A-H': ['Lenovo', 'IdeaTab V2107A', 'tablet'],\n        'A1 07': ['Lenovo', 'LePad', 'tablet'],\n        'lepad 001b': ['Lenovo', 'LePad', 'tablet'],\n        'lepad 001n': ['Lenovo', 'LePad', 'tablet'],\n        '3GC101': ['Lenovo', 'LePhone 3GC101'],\n        'Lenovo 3GC101': ['Lenovo', 'LePhone 3GC101'],\n        '3GW100': ['Lenovo', 'LePhone 3GW100'],\n        'Lenovo 3GW100': ['Lenovo', 'LePhone 3GW100'],\n        '3GW101': ['Lenovo', 'LePhone 3GW101'],\n        'Lenovo 3GW101': ['Lenovo', 'LePhone 3GW101'],\n        'Lephone 3GW101': ['Lenovo', 'LePhone 3GW101'],\n        'Lenovo A1-32AB0': ['Lenovo', 'LePhone A1-32AB0'],\n        'Lenovo S1-37AH0': ['Lenovo', 'LePhone S1-37AH0'],\n        'S1 37AHO': ['Lenovo', 'LePhone S1-37AH0'],\n        'Lenovo S2-38AH0': ['Lenovo', 'LePhone S2-38AH0'],\n        'Lenovo S2-38AT0': ['Lenovo', 'LePhone S2-38AT0'],\n        'Lenovo A288t': ['Lenovo', 'LePhone A288'],\n        'Lenovo A366t': ['Lenovo', 'LePhone A366'],\n        'Lenovo A390e': ['Lenovo', 'LePhone A390'],\n        'Lenovo A500': ['Lenovo', 'LePhone A500'],\n        'Lenovo A520': ['Lenovo', 'LePhone A520'],\n        'Lenovo A560e': ['Lenovo', 'A560'],\n        'Lenovo A668t': ['Lenovo', 'LePhone A668'],\n        'Lenovo A698t': ['Lenovo', 'LePhone A698'],\n        'Lenovo A750': ['Lenovo', 'LePhone A750'],\n        'Lenovo A780': ['Lenovo', 'LePhone A780'],\n        'Lenovo A789': ['Lenovo', 'LePhone A789'],\n        'Lenovo A790e': ['Lenovo', 'LePhone A790'],\n        'Lenovo P70': ['Lenovo', 'LePhone P70'],\n        'Lenovo P700': ['Lenovo', 'LePhone P700'],\n        'Lenovo S850e': ['Lenovo', 'S850'],\n        'Lenovo S880': ['Lenovo', 'S880'],\n        'Lenovo K860': ['Lenovo', 'K860'],\n        'A30t': ['Lenovo', 'A30t'],\n        'Lenovo A60': ['Lenovo', 'A60'],\n        'Lenovo A65': ['Lenovo', 'A65'],\n        'Lenovo A66t': ['Lenovo', 'A66t'],\n        'Lenovo A68e': ['Lenovo', 'A68e'],\n        'Lenovo K800': ['Lenovo', 'K800'],\n        'IDEA TV T100': ['Lenovo', 'IDEA TV', 'television'],\n        'IDEA TV K91': ['Lenovo', 'IDEA TV', 'television'],\n        'TC970': ['Le Pan', 'TC970', 'tablet'],\n        'LePanII': ['Le Pan', 'II', 'tablet'],\n        'LG-C555': ['LG', 'Optimus Chat'],\n        'LG-C555-parrot': ['LG', 'Optimus Chat'],\n        'LG-C660h': ['LG', 'Optimus Pro'],\n        'LG-C729': ['LG', 'DoublePlay'],\n        'LG-C800G': ['LG', 'Eclypse'],\n        'LG-CX670': ['LG', 'Optimus 3G'],\n        'LG-E400': ['LG', 'Optimus L3'],\n        'LG-E400f': ['LG', 'Optimus L3'],\n        'LG-E510': ['LG', 'Optimus Hub'],\n        'LG-E510f': ['LG', 'Optimus Hub'],\n        'LG-E510g': ['LG', 'Optimus Hub'],\n        'LG-E610': ['LG', 'Optimus L5'],\n        'LG-E612': ['LG', 'Optimus L5'],\n        'LG-E612g': ['LG', 'Optimus L5'],\n        'LG-E615F': ['LG', 'E615'],\n        'LG-E617G': ['LG', 'E617'],\n        'LG-E720': ['LG', 'Optimus Chic'],\n        'LG-E720b': ['LG', 'Optimus Chic'],\n        'LG-E730': ['LG', 'Optimus Sol'],\n        'LG-E970': ['LG', 'Shine'],\n        'LG-F100L': ['LG', 'Optimus Vu'],\n        'LG-F100S': ['LG', 'Optimus Vu'],\n        'LG-F120K': ['LG', 'Optimus LTE Tag'],\n        'LG-F120L': ['LG', 'Optimus LTE Tag'],\n        'LG-F120S': ['LG', 'Optimus LTE Tag'],\n        'LG-F160K': ['LG', 'Optimus LTE II'],\n        'LG-F160L': ['LG', 'Optimus LTE II'],\n        'LG-F160S': ['LG', 'Optimus LTE II'],\n        'LG-F180L': ['LG', 'F180L'],\n        'LG-GT540': ['LG', 'Optimus'],\n        'LG-GT540f': ['LG', 'Optimus'],\n        'LG-GT540 Swift': ['LG', 'Optimus'],\n        'LG-GW620': ['LG', 'GW620'],\n        'LG-KH5200': ['LG', 'Andro-1'],\n        'LG-KU3700': ['LG', 'Optimus One'],\n        'LG-KU5400': ['LG', 'PRADA 3.0'],\n        'LG-KU5900': ['LG', 'Optimus Black'],\n        'LG-L40G': ['LG', 'L40G'],\n        'LG-LG855': ['LG', 'Marquee'],\n        'LG-LS670': ['LG', 'Optimus S'],\n        'LG-LS696': ['LG', 'Optimus Elite'],\n        'LG-LS840': ['LG', 'Viper 4G'],\n        'LG-LS855': ['LG', 'Marquee'],\n        'LG-LS860': ['LG', '\\'Cayenne\\''],\n        'LG-LS970': ['LG', '\\'Eclipse\\''],\n        'LG-LU3000': ['LG', 'Optimus Mach'],\n        'LG-LU3100': ['LG', 'Optimus Chic'],\n        'LG-LU3700': ['LG', 'Optimus One'],\n        'LG-LU5400': ['LG', 'PRADA 3.0'],\n        'LG-LU6200': ['LG', 'Optimus Q2'],\n        'LG-lu6200': ['LG', 'Optimus Q2'],\n        'LG-LU6500': ['LG', 'Optimus Note'],\n        'LG-LU6800': ['LG', 'Optimus Big'],\n        'LG-LU8300': ['LG', 'Optimus Pad LTE'],\n        'LG-LW690': ['LG', 'Optimus C'],\n        'LG-LW770': ['LG', 'LW770'],\n        'LG-MS690': ['LG', 'Optimus M'],\n        'LG-MS770': ['LG', 'MS770'],\n        'LG-MS840': ['LG', 'Connect 4G'],\n        'LG-MS910': ['LG', 'Esteem'],\n        'LG-MS695': ['LG', 'Optimus M+'],\n        'LG P350': ['LG', 'Optimus Me'],\n        'LG-P350': ['LG', 'Optimus Me'],\n        'LG-P350f': ['LG', 'Optimus Me'],\n        'LG-P350g': ['LG', 'Optimus Me'],\n        'LG-P355': ['LG', 'P355'],\n        'LG-P500': ['LG', 'Optimus One'],\n        'LG-P500h': ['LG', 'Optimus One'],\n        'LG-P500h-parrot': ['LG', 'Optimus One'],\n        'LG-P503': ['LG', 'Optimus One'],\n        'LG-P504': ['LG', 'Optimus One'],\n        'LG-P505': ['LG', 'Phoenix'],\n        'LG-P505R': ['LG', 'Phoenix'],\n        'LG-P506': ['LG', 'Thrive'],\n        'LG-P509': ['LG', 'Optimus T'],\n        'LG-P690': ['LG', 'Optimus Net'],\n        'LG-P693': ['LG', 'P693'],\n        'LG-P698': ['LG', 'Optimus Net'],\n        'LG-P698f': ['LG', 'Optimus Net'],\n        'LG-P700': ['LG', 'Optimus L7'],\n        'LG-P705': ['LG', 'Optimus L7'],\n        'LG-P705f': ['LG', 'Optimus L7'],\n        'LG-P705g': ['LG', 'Optimus L7'],\n        'LG-P708g': ['LG', 'P708'],\n        'LG-P720': ['LG', 'Optimus Chic'],\n        'LG-P720h': ['LG', 'Optimus Chic'],\n        'LG-P725': ['LG', 'Optimus 3D Max'],\n        'LG-P760': ['LG', 'P760'],\n        'LG-P769': ['LG', 'P769'],\n        'LG-P860': ['LG', 'P860'],\n        'LG-P870': ['LG', 'P870'],\n        'LG-P870F': ['LG', 'P870'],\n        'LG-P880': ['LG', 'X3'],\n        'LG-P880g': ['LG', 'X3'],\n        'LG-P895': ['LG', 'P895'],\n        'LG-P920': ['LG', 'Optimus 3D'],\n        'LG-P920h': ['LG', 'Optimus 3D'],\n        'LG-P925': ['LG', 'Thrill'],\n        'LG-P925g': ['LG', 'Thrill'],\n        'LG-P930': ['LG', 'Nitro HD'],\n        'LG-P936': ['LG', 'Optimus LTE'],\n        'LG-P940': ['LG', 'PRADA 3.0'],\n        'LG-P970': ['LG', 'Optimus Black'],\n        'LG-P970h': ['LG', 'Optimus Black'],\n        'LG-P990': ['LG', 'Optimus 2X Speed'],\n        'LG-P990h': ['LG', 'Optimus 2X Speed'],\n        'LG-P990hN': ['LG', 'Optimus 2X Speed'],\n        'LG-P990H': ['LG', 'Optimus 2X Speed'],\n        'LG-P993': ['LG', 'Optimus 2X'],\n        'LG-SU540': ['LG', 'PRADA 3.0'],\n        'LG-SU640': ['LG', 'Optimus LTE'],\n        'LG-SU660': ['LG', 'Optimus 2X'],\n        'LG-SU760': ['LG', 'Optimus 3D'],\n        'LG-SU760-Kust': ['LG', 'Optimus 3D'],\n        'LG-SU870': ['LG', 'Optimus 3D Cube'],\n        'LG-SU880': ['LG', 'Optimus EX'],\n        'LG-US670': ['LG', 'Optimus U'],\n        'LG-US730': ['LG', 'US730'],\n        'LG-V900': ['LG', 'Optimus Pad', 'tablet'],\n        'LG-V905R': ['LG', 'Optimus G-Slate', 'tablet'],\n        'LG-V909': ['LG', 'Optimus G-Slate', 'tablet'],\n        'LG-VM670': ['LG', 'Optimus V'],\n        'LG-VM696': ['LG', 'Optimus Elite'],\n        'LG-VM701': ['LG', 'Optimus Slider'],\n        'LG-VS660': ['LG', 'Vortex'],\n        'LG-VS700': ['LG', 'Enlighten'],\n        'LG-VS740': ['LG', 'Ally'],\n        'LG-VS840': ['LG', 'Connect 4G'],\n        'LG-VS910': ['LG', 'Revolution'],\n        'lgp-970': ['LG', 'Optimus Black'],\n        'E900': ['LG', 'Optimus 7'],\n        'GT540': ['LG', 'Optimus GT540'],\n        'GW620': ['LG', 'GW620'],\n        'KU9500': ['LG', 'Optimus Z'],\n        'LGC660': ['LG', 'Optimus Pro'],\n        'LGL45C': ['LG', 'Optimus Net'],\n        'LGL55C': ['LG', 'Optimus Q'],\n        'LU2300': ['LG', 'Optimus Q'],\n        'LS670': ['LG', 'Optimus S'],\n        'P940': ['LG', 'PRADA 3.0'],\n        'P990': ['LG', 'Optimus 2X Speed'],\n        'USCC-US730': ['LG', 'US730'],\n        'USCC-US760': ['LG', 'Genesis'],\n        'VM670': ['LG', 'Optimus V'],\n        'VS840 4G': ['LG', 'Connect 4G'],\n        'VS900-4G': ['LG', 'VS900'],\n        'VS910 4G': ['LG', 'Revolution 4G'],\n        'VS920 4G': ['LG', 'Spectrum 4G'],\n        'VS930 4G': ['LG', 'VS930'],\n        'VS950 4G': ['LG', 'VS950'],\n        'L-01D': ['LG', 'Optimus LTE'],\n        'L-02D': ['LG', 'PRADA phone'],\n        'L-04C': ['LG', 'Optimus Chat'],\n        'L-05D': ['LG', 'Optimus it'],\n        'L-06C': ['LG', 'Optimus Pad', 'tablet'],\n        'L-06D': ['LG', 'Optimus Vu'],\n        'L-07C': ['LG', 'Optimus Bright'],\n        'LG-Eve': ['LG', 'Eve'],\n        'LG-Optimus One P500': ['LG', 'Optimus One'],\n        'LG-Optimus 2X': ['LG', 'Optimus 2X'],\n        'LG-GT540 Optimus': ['LG', 'Optimus'],\n        'LG-Optimus Black': ['LG', 'Optimus Black'],\n        'Ally': ['LG', 'Ally'],\n        'Optimus': ['LG', 'Optimus'],\n        'Optimus Me': ['LG', 'Optimus Me'],\n        'optimus me p350': ['LG', 'Optimus Me'],\n        'Optimus 2X': ['LG', 'Optimus 2X'],\n        'Optimus 2x': ['LG', 'Optimus 2X'],\n        'IS11LG': ['LG', 'Optimus X'],\n        'Vortex': ['LG', 'Vortex'],\n        'LDK-ICK v1.4': ['LG', 'Esteem'],\n        'T6': ['Malata', 'Zpad T6', 'tablet'],\n        'Malata SMBA1002': ['Malata', 'Tablet SMB-A1002', 'tablet'],\n        'STM712HCZ': ['Mediacom', 'SmartPad 712c', 'tablet'],\n        'STM803HC': ['Mediacom', 'SmartPad 810c', 'tablet'],\n        'Mediacom 810C': ['Mediacom', 'SmartPad 810c', 'tablet'],\n        'Smartpad810c': ['Mediacom', 'SmartPad 810c', 'tablet'],\n        'SmartPad810c': ['Mediacom', 'SmartPad 810c', 'tablet'],\n        'MP810C': ['Mediacom', 'SmartPad 810c', 'tablet'],\n        'MP907C': ['Mediacom', 'SmartPad 907c', 'tablet'],\n        'MTK6516': ['Mediatek', 'MTK6516'],\n        'LIFETAB S9512': ['Medion', 'Lifetab S9512', 'tablet'],\n        'LIFETAB P9514': ['Medion', 'Lifetab P9514', 'tablet'],\n        'MD LIFETAB P9516': ['Medion', 'Lifetab P9516', 'tablet'],\n        'MEDION LIFE P4310': ['Medion', 'Life P4310'],\n        'M8': ['Meizu', 'M8'],\n        'M9': ['Meizu', 'M9'],\n        'M040': ['Meizu', 'M040'],\n        'M9-unlocked': ['Meizu', 'M9'],\n        'meizu m9': ['Meizu', 'M9'],\n        'MEIZU M9': ['Meizu', 'M9'],\n        'MEIZU MX': ['Meizu', 'MX'],\n        'M030': ['Meizu', 'MX M030'],\n        'M031': ['Meizu', 'MX M031'],\n        'M032': ['Meizu', 'MX M032'],\n        'Slidepad': ['Memup', 'Slidepad', 'tablet'],\n        'A45': ['Micromax', 'A45 Punk'],\n        'Micromax A50': ['Micromax', 'A50 Ninja'],\n        'Micromax A60': ['Micromax', 'Andro A60'],\n        'Micromax A70': ['Micromax', 'Andro A70'],\n        'P300(Funbook)': ['Micromax', 'Funbook P300', 'tablet'],\n        'AT735': ['Moinstone', 'AT735', 'tablet'],\n        'A853': ['Motorola', 'Milestone'],\n        'A953': ['Motorola', 'Milestone 2'],\n        'A1680': ['Motorola', 'MOTO A1680'],\n        'ET1': ['Motorola', 'ET1 Enterprise Tablet', 'tablet'],\n        'MB200': ['Motorola', 'CLIQ'],\n        'MB300': ['Motorola', 'BACKFLIP'],\n        'MB501': ['Motorola', 'CLIQ XT'],\n        'MB502': ['Motorola', 'CHARM'],\n        'MB511': ['Motorola', 'FLIPOUT'],\n        'MB520': ['Motorola', 'BRAVO'],\n        'MB525': ['Motorola', 'DEFY'],\n        'MB525+': ['Motorola', 'DEFY'],\n        'MB525 for me': ['Motorola', 'DEFY'],\n        'MB526': ['Motorola', 'DEFY+'],\n        'MB611': ['Motorola', 'CLIQ 2'],\n        'MB612': ['Motorola', 'XPRT'],\n        'MB632': ['Motorola', 'PRO+'],\n        'MB855': ['Motorola', 'PHOTON 4G'],\n        'MB860': ['Motorola', 'ATRIX'],\n        'MB861': ['Motorola', 'ATRIX'],\n        'mb861': ['Motorola', 'ATRIX'],\n        'MB865': ['Motorola', 'ATRIX 2'],\n        'MB870': ['Motorola', 'Droid X2'],\n        'MB886': ['Motorola', 'DINARA'],\n        'ME501': ['Motorola', 'CLIQ XT'],\n        'ME511': ['Motorola', 'FLIPOUT'],\n        'me525': ['Motorola', 'MOTO ME525'],\n        'Me525': ['Motorola', 'MOTO ME525'],\n        'ME525': ['Motorola', 'MOTO ME525'],\n        'ME525+': ['Motorola', 'MOTO ME525'],\n        'ME600': ['Motorola', 'BACKFLIP'],\n        'ME632': ['Motorola', 'PRO+'],\n        'ME722': ['Motorola', 'Milestone 2'],\n        'ME811': ['Motorola', 'Droid X'],\n        'ME860': ['Motorola', 'ATRIX'],\n        'ME863': ['Motorola', 'Milestone 3'],\n        'ME865': ['Motorola', 'ATRIX 2'],\n        'MT620': ['Motorola', 'MOTO MT620'],\n        'MT620t': ['Motorola', 'MOTO MT620'],\n        'MT716': ['Motorola', 'MOTO MT716'],\n        'MT810': ['Motorola', 'MOTO MT810'],\n        'MT870': ['Motorola', 'MOTO MT870'],\n        'MT917': ['Motorola', 'MT917'],\n        'MZ505': ['Motorola', 'XOOM Family Edition', 'tablet'],\n        'MZ600': ['Motorola', 'XOOM 4G LTE', 'tablet'],\n        'MZ601': ['Motorola', 'XOOM 3G', 'tablet'],\n        'MZ602': ['Motorola', 'XOOM 4G LTE', 'tablet'],\n        'MZ603': ['Motorola', 'XOOM 3G', 'tablet'],\n        'MZ604': ['Motorola', 'XOOM WiFi', 'tablet'],\n        'MZ605': ['Motorola', 'XOOM 3G', 'tablet'],\n        'MZ606': ['Motorola', 'XOOM WiFi', 'tablet'],\n        'MZ607': ['Motorola', 'XOOM 2 WiFi Media Edition', 'tablet'],\n        'MZ609': ['Motorola', 'Droid XYBOARD 8.2', 'tablet'],\n        'MZ609 4G': ['Motorola', 'Droid XYBOARD 8.2', 'tablet'],\n        'MZ615': ['Motorola', 'XOOM 2 WiFi', 'tablet'],\n        'MZ617': ['Motorola', 'Droid XYBOARD 10.1', 'tablet'],\n        'MZ617 4G': ['Motorola', 'Droid XYBOARD 10.1', 'tablet'],\n        'WX435': ['Motorola', 'TRIUMPH WX435'],\n        'WX445': ['Motorola', 'CITRUS WX445'],\n        'XT300': ['Motorola', 'SPICE'],\n        'XT301': ['Motorola', 'MOTO XT301'],\n        'XT311': ['Motorola', 'FIRE'],\n        'XT316': ['Motorola', 'MOTO XT316'],\n        'XT319': ['Motorola', 'MOTO XT319'],\n        'XT390': ['Motorola', 'MOTO XT390'],\n        'XT320': ['Motorola', 'DEFY Mini'],\n        'XT321': ['Motorola', 'DEFY Mini'],\n        'XT500': ['Motorola', 'MOTO XT500'],\n        'xt-500': ['Motorola', 'MOTO XT500'],\n        'XT502': ['Motorola', 'QUENCH XT5'],\n        'XT530': ['Motorola', 'FIRE XT'],\n        'XT531': ['Motorola', 'FIRE XT'],\n        'XT532': ['Motorola', 'XT532'],\n        'XT535': ['Motorola', 'DEFY'],\n        'XT550': ['Motorola', 'XT550'],\n        'XT556': ['Motorola', 'XT556'],\n        'XT603': ['Motorola', 'ADMIRAL'],\n        'XT610': ['Motorola', 'Droid Pro'],\n        'XT615': ['Motorola', 'MOTO XT615'],\n        'XT626': ['Motorola', 'MOTO XT626'],\n        'XT681': ['Motorola', 'MOTO XT681'],\n        'XT682': ['Motorola', 'Droid 3'],\n        'XT685': ['Motorola', 'MOTO XT685'],\n        'XT687': ['Motorola', 'ATRIX TV'],\n        'XT701': ['Motorola', 'XT701'],\n        'XT702': ['Motorola', 'MOTO XT702'],\n        'XT711': ['Motorola', 'MOTO XT711'],\n        'XT720': ['Motorola', 'Milestone'],\n        'XT875': ['Motorola', 'Droid Bionic'],\n        'XT800': ['Motorola', 'MOTO XT800'],\n        'XT800+': ['Motorola', 'MOTO XT800'],\n        'XT800W': ['Motorola', 'MOTO Glam'],\n        'XT806': ['Motorola', 'MOTO XT806'],\n        'XT860': ['Motorola', 'Milestone 3'],\n        'XT862': ['Motorola', 'Droid 3'],\n        'XT882': ['Motorola', 'MOTO XT882'],\n        'XT883': ['Motorola', 'Milestone 3'],\n        'XT889': ['Motorola', 'XT889'],\n        'XT897': ['Motorola', 'Droid 4'],\n        'XT901': ['Motorola', 'RAZR'],\n        'XT910': ['Motorola', 'RAZR'],\n        'XT910K': ['Motorola', 'RAZR'],\n        'XT910S': ['Motorola', 'RAZR'],\n        'XT910 4G': ['Motorola', 'RAZR'],\n        'XT912': ['Motorola', 'Droid RAZR'],\n        'XT923': ['Motorola', 'Droid RAZR HD'],\n        'XT925': ['Motorola', 'Droid RAZR HD'],\n        'XT926': ['Motorola', 'Droid RAZR'],\n        'XT926 4G': ['Motorola', 'Droid RAZR'],\n        'XT928': ['Motorola', 'XT928'],\n        'Atrix 2': ['Motorola', 'ATRIX 2'],\n        'Atrix 4g': ['Motorola', 'ATRIX 4G'],\n        'Atrix 4G': ['Motorola', 'ATRIX 4G'],\n        'Atrix 4G ME860': ['Motorola', 'ATRIX 4G'],\n        'CLIQ': ['Motorola', 'CLIQ'],\n        'CLIQ XT': ['Motorola', 'CLIQ XT'],\n        'CLIQ2': ['Motorola', 'CLIQ 2'],\n        'Corvair': ['Motorola', 'Corvair', 'tablet'],\n        'DEFY': ['Motorola', 'DEFY'],\n        'Defy+': ['Motorola', 'DEFY+'],\n        'Defy Plus': ['Motorola', 'DEFY+'],\n        'Devour': ['Motorola', 'Devour'],\n        'Dext': ['Motorola', 'Dext'],\n        'Droid': ['Motorola', 'Droid'],\n        'DROID': ['Motorola', 'Droid'],\n        'DROID2': ['Motorola', 'Droid 2'],\n        'DROID2 GLOBAL': ['Motorola', 'Droid 2'],\n        'DROID2 Global': ['Motorola', 'Droid 2'],\n        'Droid2Global': ['Motorola', 'Droid 2'],\n        'DROID 2': ['Motorola', 'Droid 2'],\n        'DROID3': ['Motorola', 'Droid 3'],\n        'DROID4': ['Motorola', 'Droid 4'],\n        'DROID4 4G': ['Motorola', 'Droid 4'],\n        'DROID Pro': ['Motorola', 'Droid Pro'],\n        'DROID BIONIC': ['Motorola', 'Droid Bionic'],\n        'DROID BIONIC 4G': ['Motorola', 'Droid Bionic'],\n        'DROID BIONIC XT875 4G': ['Motorola', 'Droid Bionic'],\n        'DROIDRAZR': ['Motorola', 'Droid RAZR'],\n        'Droid Razr': ['Motorola', 'Droid RAZR'],\n        'DROID RAZR': ['Motorola', 'Droid RAZR'],\n        'DROID RAZR 4G': ['Motorola', 'Droid RAZR'],\n        'DROID SPYDER': ['Motorola', 'Droid RAZR'],\n        'DROID RAZR HD': ['Motorola', 'Droid RAZR HD'],\n        'DROID RAZR HD 4G': ['Motorola', 'Droid RAZR HD'],\n        'DroidX': ['Motorola', 'Droid X'],\n        'DROIDX': ['Motorola', 'Droid X'],\n        'droid x': ['Motorola', 'Droid X'],\n        'Droid X': ['Motorola', 'Droid X'],\n        'DROID X': ['Motorola', 'Droid X'],\n        'DROID X2': ['Motorola', 'Droid X2'],\n        'Electrify': ['Motorola', 'Electrify'],\n        'Milestone XT720': ['Motorola', 'Milestone'],\n        'Milestone Xt720': ['Motorola', 'Milestone'],\n        'Milestone': ['Motorola', 'Milestone'],\n        'A853 Milestone': ['Motorola', 'Milestone'],\n        'Milestone X': ['Motorola', 'Milestone X'],\n        'Milestone X2': ['Motorola', 'Milestone X2'],\n        'MotoroiX': ['Motorola', 'Droid X'],\n        'Moto Backflip': ['Motorola', 'BACKFLIP'],\n        'RAZR': ['Motorola', 'RAZR'],\n        'Triumph': ['Motorola', 'TRIUMPH'],\n        'Opus One': ['Motorola', 'i1'],\n        'Photon': ['Motorola', 'PHOTON'],\n        'Photon 4G': ['Motorola', 'PHOTON 4G'],\n        'XOOM': ['Motorola', 'XOOM', 'tablet'],\n        'Xoom': ['Motorola', 'XOOM', 'tablet'],\n        'XOOM 2': ['Motorola', 'XOOM 2', 'tablet'],\n        'XOOM 2 ME': ['Motorola', 'XOOM 2', 'tablet'],\n        'XOOM MZ606': ['Motorola', 'XOOM WiFi', 'tablet'],\n        'ISW11M': ['Motorola', 'PHOTON'],\n        'IS12M': ['Motorola', 'RAZR'],\n        'MOTWX435KT': ['Motorola', 'TRIUMPH'],\n        'X3-Ice MIUI XT720 Memorila Classics': ['Motorola', 'Milestone'],\n        'NABI-A': ['Nabi', 'Kids tablet', 'tablet'],\n        'Newpad': ['Newsmy', 'Newpad', 'tablet'],\n        'Newpad-K97': ['Newsmy', 'Newpad K97', 'tablet'],\n        'Newpad P9': ['Newsmy', 'Newpad P9', 'tablet'],\n        'M-PAD N8': ['Newsmy', 'M-pad N8', 'tablet'],\n        'LT-NA7': ['NEC', 'LT-NA7'],\n        'N-01D': ['NEC', 'MEDIAS PP N-01D'],\n        'N-04C': ['NEC', 'MEDIAS N-04C'],\n        'N-04D': ['NEC', 'MEDIAS LTE N-04D'],\n        'N-05D': ['NEC', 'MEDIAS ES N-05D'],\n        'N-06C': ['NEC', 'MEDIAS WP N-06C'],\n        'N-06D': ['NEC', 'MEDIAS Tab N-06D', 'tablet'],\n        'N-07D': ['NEC', 'MEDIAS X N-07D'],\n        '101N': ['NEC', 'MEDIAS CH Softbank 101N'],\n        'IS11N': ['NEC', 'MEDIAS BR IS11N'],\n        'Nexian NX-A890': ['Nexian', 'Journey'],\n        'NX-A891': ['Nexian', 'Ultra Journey'],\n        'M726HC': ['Nextbook', 'Premium 7', 'ereader'],\n        'NXM726HN': ['Nextbook', 'Premium 7', 'ereader'],\n        'NXM803HD': ['Nextbook', 'Premium 8', 'ereader'],\n        'DATAM803HC': ['Nextbook', 'Premium 8', 'ereader'],\n        'NXM901': ['Nextbook', 'Next 3', 'ereader'],\n        'NGM Vanity Smart': ['NGM', 'Vanity Smart'],\n        'Nokia N9': ['Nokia', 'N9'],\n        'Nokia N900': ['Nokia', 'N900'],\n        'Lumia800': ['Nokia', 'Lumia 800'],\n        'Lumia 900': ['Nokia', 'Lumia 900'],\n        'Notion Ink ADAM': ['Notion Ink', 'ADAM', 'tablet'],\n        'P4D SIRIUS': ['Nvsbl', 'P4D SIRIUS', 'tablet'],\n        'P4D Sirius': ['Nvsbl', 'P4D SIRIUS', 'tablet'],\n        'EFM710A': ['Oblio', 'Mint 7x', 'tablet'],\n        'ODYS-Xpress': ['Odys', 'Xpress', 'tablet'],\n        'Olivetti Olipad 100': ['Olivetti', 'Olipad 100', 'tablet'],\n        'OP110': ['Olivetti', 'Olipad 110', 'tablet'],\n        'ONDA MID': ['Onda', 'MID', 'tablet'],\n        'VX580A': ['Onda', 'VX580A', 'tablet'],\n        'VX610A': ['Onda', 'VX610A', 'tablet'],\n        'TQ150': ['Onda', 'TQ150'],\n        'N2T': ['ONN', 'N2T', 'tablet'],\n        'Renesas': ['Opad', 'Renesas', 'tablet'],\n        'renesas emev': ['Opad', 'Renesas', 'tablet'],\n        'X903': ['Oppo', 'Find Me X903'],\n        'X905': ['Oppo', 'Find 3 X905'],\n        'R805': ['Oppo', 'R805'],\n        'R801': ['Oppo', 'R801'],\n        'R811': ['Oppo', 'R811'],\n        'X909': ['Oppo', 'X909'],\n        'OPPOR801': ['Oppo', 'R801'],\n        'OPPOX905': ['Oppo', 'Find 3 X905'],\n        'OPPOX907': ['Oppo', 'Find 3 X907'],\n        'X907': ['Oppo', 'Find 3 X907'],\n        'X9015': ['Oppo', 'Find X9015'],\n        'OPPOX9017': ['Oppo', 'Finder X9017'],\n        'OPPOU701': ['Oppo', 'OPPOU701'],\n        'OPPOR807': ['Oppo', 'Real R807'],\n        'OPPOR805': ['Oppo', 'Real R805'],\n        'R807': ['Oppo', 'Real R807'],\n        'OPPOT703': ['Oppo', 'T703'],\n        'P-01D': ['Panasonic', 'P-01D'],\n        'P-02D': ['Panasonic', 'Lumix Phone'],\n        'P-04D': ['Panasonic', 'Eluga'],\n        'P-07C': ['Panasonic', 'P-07C'],\n        'dL1': ['Panasonic', 'Eluga dL1'],\n        '101P': ['Panasonic', 'Lumix Phone'],\n        'JT-H580VT': ['Panasonic', 'BizPad 7', 'tablet'],\n        'JT-H581VT': ['Panasonic', 'BizPad 10', 'tablet'],\n        'FZ-A1A': ['Panasonic', 'Toughpad', 'tablet'],\n        'pandigital9hr': ['Pandigital', '9HR', 'tablet'],\n        'pandigital9hr2': ['Pandigital', '9HR2', 'tablet'],\n        'pandigitalopc1': ['Pandigital', 'OPC1', 'tablet'],\n        'pandigitalopp1': ['Pandigital', 'OPP1', 'tablet'],\n        'pandigitalp1hr': ['Pandigital', 'p1hr', 'tablet'],\n        'IM-A600S': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n        'IM-A630K': ['Pantech', 'SKY Izar'],\n        'IM-A690L': ['Pantech', 'SKY'],\n        'IM-A690S': ['Pantech', 'SKY'],\n        'IM-A710K': ['Pantech', 'SKY Vega Xpress'],\n        'IM-A720L': ['Pantech', 'SKY Vega Xpress'],\n        'IM-A725L': ['Pantech', 'SKY Vega X+'],\n        'IM-A730s': ['Pantech', 'SKY Vega S'],\n        'IM-A730S': ['Pantech', 'SKY Vega S'],\n        'IM-A750K': ['Pantech', 'SKY Mirach A'],\n        'IM-A760S': ['Pantech', 'SKY Vega Racer'],\n        'IM-A770K': ['Pantech', 'SKY Vega Racer'],\n        'IM-A780L': ['Pantech', 'SKY Vega Racer'],\n        'IM-A800S': ['Pantech', 'SKY Vega LTE'],\n        'IM-A810K': ['Pantech', 'SKY Vega LTE M'],\n        'IM-A810S': ['Pantech', 'SKY Vega LTE M'],\n        'IM-A820L': ['Pantech', 'SKY Vega LTE EX'],\n        'IM-A830K': ['Pantech', 'SKY Vega Racer 2'],\n        'IM-A830L': ['Pantech', 'SKY Vega Racer 2'],\n        'IM-A830S': ['Pantech', 'SKY Vega Racer 2'],\n        'IM-A840S': ['Pantech', 'SKY Vega S5'],\n        'IM-A850K': ['Pantech', 'IM-A850K'],\n        'IM-T100K': ['Pantech', 'SKY Vega No. 5', 'tablet'],\n        'IS06': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n        'ADR8995': ['Pantech', 'Breakout'],\n        'ADR8995 4G': ['Pantech', 'Breakout'],\n        'ADR910L 4G': ['Pantech', 'ADR910L'],\n        'PantechP4100': ['Pantech', 'Element', 'tablet'],\n        'PantechP8000': ['Pantech', 'Crossover'],\n        'PantechP8010': ['Pantech', 'P8010'],\n        'PantechP9060': ['Pantech', 'Pocket'],\n        'PantechP9070': ['Pantech', 'Burst'],\n        'SKY IM-A600S': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n        'SKY IM-A630K': ['Pantech', 'SKY Izar'],\n        'SKY IM-A650S': ['Pantech', 'SKY Vega'],\n        'IS11PT': ['Pantech', 'Mirach IS11PT'],\n        'PAT712W': ['Perfeo', 'PAT712W', 'tablet'],\n        'X7G': ['Pearl', 'Touchlet X7G', 'tablet'],\n        'FWS810': ['PHICOMM', 'FWS810'],\n        'Philips PI5000': ['Philips', 'PI5000', 'tablet'],\n        'PI7000': ['Philips', 'PI7000', 'tablet'],\n        'Philips W626': ['Philips', 'W626'],\n        'Philips W632': ['Philips', 'W632'],\n        'MOMO': ['Ployer', 'MOMO', 'tablet'],\n        'MOMO15': ['Ployer', 'MOMO15', 'tablet'],\n        'PocketBook A7': ['PocketBook', 'A7', 'tablet'],\n        'PocketBook A10': ['PocketBook', 'A10', 'tablet'],\n        'Mobii 7': ['Point Of View', 'Mobii 7', 'tablet'],\n        'PMP3384BRU': ['Prestigio', 'Multipad 3384', 'tablet'],\n        'TB07FTA': ['Positivo', 'TB07FTA', 'tablet'],\n        'QW TB-1207': ['Qware', 'Pro3', 'tablet'],\n        'W6HD ICS': ['Ramos', 'W6HD', 'tablet'],\n        'w10': ['Ramos', 'W10', 'tablet'],\n        'W10': ['Ramos', 'W10', 'tablet'],\n        'w10 v2.0': ['Ramos', 'W10 v2.0', 'tablet'],\n        'W10 V2.0': ['Ramos', 'W10 v2.0', 'tablet'],\n        'T11AD': ['Ramos', 'T11AD', 'tablet'],\n        'T11AD.FE': ['Ramos', 'T11AD', 'tablet'],\n        'PlayBook': ['RIM', 'BlackBerry PlayBook', 'tablet'],\n        'RBK-490': ['Ritmix', 'RBK-490', 'tablet'],\n        'A8HD': ['Saayi', 'Dropad A8HD', 'tablet'],\n        'GT-S7568': ['Samsung', 'S7568'],\n        'Galaxy Nexus': ['Samsung', 'Galaxy Nexus'],\n        'GT-B5330': ['Samsung', 'GT-B5330'],\n        'GT-B5510': ['Samsung', 'Galaxy Y Pro'],\n        'GT-B5510B': ['Samsung', 'Galaxy Y Pro'],\n        'GT-B5510L': ['Samsung', 'Galaxy Y Pro'],\n        'GT-B5512': ['Samsung', 'Galaxy Y Pro Duos'],\n        'GT-B7510': ['Samsung', 'Galaxy Pro'],\n        'GT-B7510L': ['Samsung', 'Galaxy Pro'],\n        'GT-I5500': ['Samsung', 'Galaxy 5'],\n        'GT-I5500B': ['Samsung', 'Galaxy 5'],\n        'GT-I5500L': ['Samsung', 'Galaxy 5'],\n        'GT-I5500M': ['Samsung', 'Galaxy 5'],\n        'GT-I5500-MR3': ['Samsung', 'Galaxy 5'],\n        'GT-I5503': ['Samsung', 'Galaxy 5'],\n        'GT-I5508': ['Samsung', 'Galaxy 5'],\n        'GT-I5510': ['Samsung', 'Galaxy 551'],\n        'GT-I5510L': ['Samsung', 'Galaxy 551'],\n        'GT-I5510M': ['Samsung', 'Galaxy 551'],\n        'GT-I5510T': ['Samsung', 'Galaxy 551'],\n        'GT-I5700': ['Samsung', 'Galaxy Spica'],\n        'GT-I5700L': ['Samsung', 'Galaxy Spica'],\n        'GT-I5800': ['Samsung', 'Galaxy Apollo'],\n        'GT-I5800D': ['Samsung', 'Galaxy Apollo'],\n        'GT-I5800L': ['Samsung', 'Galaxy Apollo'],\n        'GT-I5801': ['Samsung', 'Galaxy Apollo'],\n        'GT-I6500U': ['Samsung', 'Saturn'],\n        'GT-I8000': ['Samsung', 'Omnia 2'],\n        'GT-I8150': ['Samsung', 'Galaxy W'],\n        'GT-I8150B': ['Samsung', 'Galaxy W'],\n        'GT-I8160': ['Samsung', 'Galaxy Ace 2'],\n        'GT-I8160L': ['Samsung', 'Galaxy Ace 2'],\n        'GT-I8160P': ['Samsung', 'Galaxy Ace 2'],\n        'GT-I8320': ['Samsung', 'H1'],\n        'GT-I8520': ['Samsung', 'Galaxy Beam'],\n        'GT-I8530': ['Samsung', 'Galaxy Beam'],\n        'GT-I8250': ['Samsung', 'Galaxy Beam'],\n        'GT-i9000': ['Samsung', 'Galaxy S'],\n        'GT-I9000': ['Samsung', 'Galaxy S'],\n        'GT-I9000B': ['Samsung', 'Galaxy S'],\n        'GT-I9000M': ['Samsung', 'Galaxy S Vibrant'],\n        'GT-I9000T': ['Samsung', 'Galaxy S'],\n        'GT-I9001': ['Samsung', 'Galaxy S Plus'],\n        'GT-I9003': ['Samsung', 'Galaxy SL'],\n        'GT-I9003L': ['Samsung', 'Galaxy SL'],\n        'GT-I9008': ['Samsung', 'Galaxy S'],\n        'GT-I9008L': ['Samsung', 'Galaxy S'],\n        'GT-I9010': ['Samsung', 'Galaxy S Giorgio Armani'],\n        'GT-I9018': ['Samsung', 'Galaxy GT-I9018'],\n        'GT-I9070': ['Samsung', 'Galaxy S Advance'],\n        'GT-I9070P': ['Samsung', 'Galaxy S Advance'],\n        'GT-I9082': ['Samsung', 'Galaxy Grand DUOS'],\n        'GT-I9088': ['Samsung', 'Galaxy S'],\n        'GT-i9100': ['Samsung', 'Galaxy S II'],\n        'GT-I9100': ['Samsung', 'Galaxy S II'],\n        'GT-I9100G': ['Samsung', 'Galaxy S II'],\n        'GT-I9100M': ['Samsung', 'Galaxy S II'],\n        'GT-I9100T': ['Samsung', 'Galaxy S II'],\n        'GT-I9100P': ['Samsung', 'Galaxy S II'],\n        'GT-I9103': ['Samsung', 'Galaxy R'],\n        'GT-I9108': ['Samsung', 'Galaxy S II'],\n        'GT-I9210': ['Samsung', 'Galaxy S II LTE'],\n        'GT-I9210T': ['Samsung', 'Galaxy S II LTE'],\n        'GT-I9220': ['Samsung', 'Galaxy Note'],\n        'GT-I9228': ['Samsung', 'Galaxy Note'],\n        'GT-I9250': ['Samsung', 'Galaxy Nexus'],\n        'GT-I9250 EUR XX': ['Samsung', 'Galaxy Nexus'],\n        'GT-I9260': ['Samsung', 'Galaxy Premier'],\n        'GT-I9300': ['Samsung', 'Galaxy S III'],\n        'GT-I9300T': ['Samsung', 'Galaxy S III'],\n        'GT-I9303T': ['Samsung', 'Galaxy S III'],\n        'GT-I9308': ['Samsung', 'Galaxy S III'],\n        'GT-I9500': ['Samsung', 'Galaxy GT-I9500'],\n        'GT-I9800': ['Samsung', 'Galaxy GT-I9800'],\n        'GT-N7000': ['Samsung', 'Galaxy Note'],\n        'GT-N7000B': ['Samsung', 'Galaxy Note'],\n        'GT-N7100': ['Samsung', 'Galaxy Note II'],\n        'GT-N7102': ['Samsung', 'Galaxy Note II'],\n        'GT-N8000': ['Samsung', 'Galaxy Note 10.1'],\n        'GT-N8010': ['Samsung', 'Galaxy Note 10.1'],\n        'GT-P1000': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1000L': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1000M': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1000N': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1000T': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1000 Tablet': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P1010': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GT-P3100': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n        'GT-P3100B': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n        'GT-P3110': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n        'GT-P3113': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n        'GT-P5100': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n        'GT-P5110': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n        'GT-P5113': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n        'GT-P6200': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n        'GT-P6200L': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n        'GT-P6201': ['Samsung', 'Galaxy Tab 7.0 Plus N', 'tablet'],\n        'GT-P6210': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n        'GT-P6211': ['Samsung', 'Galaxy Tab 7.0 Plus N', 'tablet'],\n        'GT-P6800': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n        'GT-P6810': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n        'GT-P7100': ['Samsung', 'Galaxy Tab 10.1V', 'tablet'],\n        'GT-P7300': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'GT-P7300B': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'GT-P7310': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'GT-P7320': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'GT-P7320T': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'GT-P7500': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'GT-P7500D': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'GT-P7500R': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'GT-P7500V': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'GT-P7501': ['Samsung', 'Galaxy Tab 10.1N', 'tablet'],\n        'GT-P7510': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'GT-P7511': ['Samsung', 'Galaxy Tab 10.1N', 'tablet'],\n        'GT-S5300': ['Samsung', 'Galaxy Pocket'],\n        'GT-S5360': ['Samsung', 'Galaxy Y'],\n        'GT-S5360B': ['Samsung', 'Galaxy Y'],\n        'GT-S5360L': ['Samsung', 'Galaxy Y'],\n        'GT-S5363': ['Samsung', 'Galaxy Y'],\n        'GT-S5367': ['Samsung', 'Galaxy Y TV'],\n        'GT-S5368': ['Samsung', 'GT-S5368'],\n        'GT-S5369': ['Samsung', 'Galaxy Y'],\n        'GT-S5570': ['Samsung', 'Galaxy Mini'],\n        'GT-S5570B': ['Samsung', 'Galaxy Mini'],\n        'GT-S5570I': ['Samsung', 'Galaxy Mini'],\n        'GT-S5570L': ['Samsung', 'Galaxy Mini'],\n        'GT-S5578': ['Samsung', 'Galaxy Mini'],\n        'GT-S5660': ['Samsung', 'Galaxy Gio'],\n        'GT-S5660M': ['Samsung', 'Galaxy Gio'],\n        'GT-S5660V': ['Samsung', 'Galaxy Gio'],\n        'GT-S5670': ['Samsung', 'Galaxy Fit'],\n        'GT-S5670B': ['Samsung', 'Galaxy Fit'],\n        'GT-S5670L': ['Samsung', 'Galaxy Fit'],\n        'GT-S5690': ['Samsung', 'Galaxy Xcover'],\n        'GT-S5690L': ['Samsung', 'Galaxy Xcover'],\n        'GT-S5820': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830B': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830C': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830D': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830D-parrot': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830i': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830L': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830M': ['Samsung', 'Galaxy Ace'],\n        'GT-S5830T': ['Samsung', 'Galaxy Ace'],\n        'GT-S5838': ['Samsung', 'Galaxy Ace'],\n        'GT-S5839i': ['Samsung', 'Galaxy Ace'],\n        'GT-S6102': ['Samsung', 'Galaxy Y Duos'],\n        'GT-S6102B': ['Samsung', 'Galaxy Y Duos'],\n        'GT-S6500': ['Samsung', 'Galaxy Mini 2'],\n        'GT-S6500D': ['Samsung', 'Galaxy Mini 2'],\n        'GT-S6702': ['Samsung', 'GT-S6702'],\n        'GT-S6802': ['Samsung', 'Galaxy Ace Duos'],\n        'GT-S7500': ['Samsung', 'Galaxy Ace Plus'],\n        'GT-S7500L': ['Samsung', 'Galaxy Ace Plus'],\n        'GT-S7500W': ['Samsung', 'Galaxy Ace Plus'],\n        'GT-T959': ['Samsung', 'Galaxy S Vibrant'],\n        'SCH-i509': ['Samsung', 'Galaxy Y'],\n        'SCH-i559': ['Samsung', 'Galaxy Pop'],\n        'SCH-i569': ['Samsung', 'Galaxy Gio'],\n        'SCH-i579': ['Samsung', 'Galaxy Ace'],\n        'SCH-i589': ['Samsung', 'Galaxy Ace Duos'],\n        'SCH-i705 4G': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n        'SCH-i809': ['Samsung', 'SCH-i809'],\n        'SCH-i889': ['Samsung', 'Galaxy Note'],\n        'SCH-i909': ['Samsung', 'Galaxy S'],\n        'SCH-i919': ['Samsung', 'SCH-i919'],\n        'SCH-i929': ['Samsung', 'SCH-i929'],\n        'SCH-I100': ['Samsung', 'Gem'],\n        'SCH-I110': ['Samsung', 'Illusion'],\n        'SCH-I400': ['Samsung', 'Continuum'],\n        'SCH-I405': ['Samsung', 'Stratosphere'],\n        'SCH-I405 4G': ['Samsung', 'Stratosphere'],\n        'SCH-I500': ['Samsung', 'Fascinate'],\n        'SCH-I510': ['Samsung', 'Stealth V'],\n        'SCH-I510 4G': ['Samsung', 'Droid Charge'],\n        'SCH-I515': ['Samsung', 'Galaxy Nexus'],\n        'SCH-I535': ['Samsung', 'Galaxy S III'],\n        'SCH-I535 4G': ['Samsung', 'Galaxy S III'],\n        'SCH-I619': ['Samsung', 'SCH-I619'],\n        'SCH-I699': ['Samsung', 'SCH-I699'],\n        'SCH-I779': ['Samsung', 'SCH-I779'],\n        'SCH-I800': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n        'SCH-I815': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n        'SCH-I815 4G': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n        'SCH-I905': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SCH-I905 4G': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SCH-I909': ['Samsung', 'Galaxy S'],\n        'SCH-I915': ['Samsung', 'SCH-I915'],\n        'SCH-I939': ['Samsung', 'Galaxy S III'],\n        'SCH-M828C': ['Samsung', 'Galaxy Precedent'],\n        'SCH-M828Carray(9096483449)': ['Samsung', 'Galaxy Precedent'],\n        'SCH-R530U': ['Samsung', 'Galaxy S III'],\n        'SCH-R680': ['Samsung', 'Repp'],\n        'SCH-R720': ['Samsung', 'Admire'],\n        'SCH-R730': ['Samsung', 'Transfix'],\n        'SCH-R760': ['Samsung', 'Galaxy S II'],\n        'SCH-R820': ['Samsung', 'SCH-R820'],\n        'SCH-R880': ['Samsung', 'Acclaim'],\n        'SCH-R910': ['Samsung', 'Galaxy Indulge 4G'],\n        'SCH-R915': ['Samsung', 'Galaxy Indulge'],\n        'SCH-R920': ['Samsung', 'Galaxy Attain 4G'],\n        'SCH-R930': ['Samsung', 'Galaxy S Aviator'],\n        'SCH-R940': ['Samsung', 'Galaxy S Lightray'],\n        'SCH-S720C': ['Samsung', 'Galaxy Proclaim'],\n        'SCH-S735C': ['Samsung', 'SCH-S735'],\n        'SCH-W899': ['Samsung', 'SCH-W899'],\n        'SCH-W999': ['Samsung', 'SCH-W999'],\n        'SGH-I547': ['Samsung', 'SGH-I547'],\n        'SGH-I717': ['Samsung', 'Galaxy Note'],\n        'SGH-I717D': ['Samsung', 'Galaxy Note'],\n        'SGH-I717M': ['Samsung', 'Galaxy Note'],\n        'SGH-I717R': ['Samsung', 'Galaxy Note'],\n        'SGH-I727': ['Samsung', 'Galaxy S II Skyrocket'],\n        'SGH-i727R': ['Samsung', 'Galaxy S II'],\n        'SGH-I727R': ['Samsung', 'Galaxy S II'],\n        'SGH-I747': ['Samsung', 'Galaxy S III'],\n        'SGH-I747M': ['Samsung', 'Galaxy S III'],\n        'SGH-I748': ['Samsung', 'Galaxy S III'],\n        'SGH-I757': ['Samsung', 'Galaxy S II Skyrocket HD'],\n        'SGH-I777': ['Samsung', 'Galaxy S II'],\n        'SGH-I9777': ['Samsung', 'Galaxy S II'],\n        'SGH-I896': ['Samsung', 'Captivate'],\n        'SGH-I897': ['Samsung', 'Captivate'],\n        'SGH-I927': ['Samsung', 'Captivate Glide'],\n        'SGH-I927R': ['Samsung', 'Captivate Glide'],\n        'SGH-I957': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SGH-I957D': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SGH-I957M': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SGH-I957R': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SGH-I987': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n        'SGH-I997': ['Samsung', 'Infuse 4G'],\n        'SGH-I997R': ['Samsung', 'Infuse 4G'],\n        'SGH-I9000': ['Samsung', 'Galaxy S'],\n        'SGH-S730G': ['Samsung', 'SGH-S730'],\n        'SGH-T499': ['Samsung', 'Dart'],\n        'SGH-T499V': ['Samsung', 'Galaxy Mini'],\n        'SGH-T499Y': ['Samsung', 'Galaxy Mini'],\n        'SGH-T589': ['Samsung', 'Gravity Smart'],\n        'SGH-T589R': ['Samsung', 'Gravity Smart'],\n        'SGH-T679': ['Samsung', 'Exhibit II 4G'],\n        'SGH-T679M': ['Samsung', 'Exhibit II 4G'],\n        'SGH-T759': ['Samsung', 'Exhibit 4G'],\n        'SGH-T769': ['Samsung', 'Galaxy S Blaze 4G'],\n        'SGH-T839': ['Samsung', 'T-Mobile Sidekick'],\n        'SGH-T849': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n        'SGH-T859': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SGH-T869': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n        'SGH-T879': ['Samsung', 'Galaxy Note'],\n        'SGH-T959': ['Samsung', 'Vibrant'],\n        'SGH-T959D': ['Samsung', 'Galaxy S Fascinate 3G+'],\n        'SGH-T959P': ['Samsung', 'Galaxy S Fascinate 4G'],\n        'SGH-T959V': ['Samsung', 'Galaxy S 4G'],\n        'SGH-T989': ['Samsung', 'Galaxy S II'],\n        'SGH-T989D': ['Samsung', 'Galaxy S II X'],\n        'SGH-T999': ['Samsung', 'Galaxy S Blaze 4G'],\n        'SGH-T999V': ['Samsung', 'Galaxy S Blaze 4G'],\n        'SHV-E120K': ['Samsung', 'Galaxy S II HD LTE'],\n        'SHV-E120L': ['Samsung', 'Galaxy S II HD LTE'],\n        'SHV-E120S': ['Samsung', 'Galaxy S II HD LTE'],\n        'SHV-E110S': ['Samsung', 'Galaxy S II LTE'],\n        'SHV-E140S': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SHV-E150S': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n        'SHV-E160K': ['Samsung', 'Galaxy Note'],\n        'SHV-E160L': ['Samsung', 'Galaxy Note LTE'],\n        'SHV-E160S': ['Samsung', 'Galaxy Note LTE'],\n        'SHV-E170K': ['Samsung', 'SHV-E170K'],\n        'SHV-E170L': ['Samsung', 'SHV-E170L'],\n        'SHV-E210K': ['Samsung', 'Galaxy S III'],\n        'SHV-E210L': ['Samsung', 'Galaxy S III'],\n        'SHV-E210S': ['Samsung', 'Galaxy S III'],\n        'SHW-M100S': ['Samsung', 'Galaxy A'],\n        'SHW-M110S': ['Samsung', 'Galaxy S'],\n        'SHW-M130L': ['Samsung', 'Galaxy U'],\n        'SHW-M130K': ['Samsung', 'Galaxy K'],\n        'SHW-M180K': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SHW-M180L': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SHW-M180S': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SHW-M180W': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SHW-M185S': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SHW-M190S': ['Samsung', 'Galaxy S Hoppin'],\n        'SHW-M220L': ['Samsung', 'Galaxy Neo'],\n        'SHW-M240S': ['Samsung', 'Galaxy Ace'],\n        'SHW-M250K': ['Samsung', 'Galaxy S II'],\n        'SHW-M250L': ['Samsung', 'Galaxy S II'],\n        'SHW-M250S': ['Samsung', 'Galaxy S II'],\n        'SHW-M300W': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SHW-M305W': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n        'SHW-M340S': ['Samsung', 'Galaxy M Style'],\n        'SHW-M380K': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SHW-M380S': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SHW-M380W': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n        'SHW-M440S': ['Samsung', 'Galaxy S III'],\n        'SMT-i9100': ['Samsung', 'SMT-I9100', 'tablet'],\n        'SPH-D600': ['Samsung', 'Conquer 4G'],\n        'SPH-D700': ['Samsung', 'Epic 4G'],\n        'SPH-D705': ['Samsung', 'Epic 4G 2'],\n        'SPH-D710': ['Samsung', 'Epic 4G Touch'],\n        'SPH-L700': ['Samsung', 'Galaxy Nexus'],\n        'SPH-L710': ['Samsung', 'Galaxy S III'],\n        'SPH-M820': ['Samsung', 'Galaxy Prevail'],\n        'SPH-M820-BST': ['Samsung', 'Galaxy Prevail'],\n        'SPH-M580': ['Samsung', 'Replenish'],\n        'SPH-M900': ['Samsung', 'Moment'],\n        'SPH-M910': ['Samsung', 'Intercept'],\n        'SPH-M920': ['Samsung', 'Transform'],\n        'SPH-M930': ['Samsung', 'Transform Ultra'],\n        'SPH-M930BST': ['Samsung', 'Transform Ultra'],\n        'SPH-P100': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'YP-GB1': ['Samsung', 'Galaxy Player', 'media'],\n        'YP-GB70': ['Samsung', 'Galaxy Player 70', 'media'],\n        'YP-GB70D': ['Samsung', 'Galaxy Player 70 Plus', 'media'],\n        'YP-GS1': ['Samsung', 'Galaxy S WiFi 3.6', 'media'],\n        'YP-G1': ['Samsung', 'Galaxy S WiFi 4.0', 'media'],\n        'YP-GI1': ['Samsung', 'Galaxy S WiFi 4.2', 'media'],\n        'YP-G50': ['Samsung', 'Galaxy Player', 'media'],\n        'YP-G70': ['Samsung', 'Galaxy S WiFi 5.0', 'media'],\n        'GT9100': ['Samsung', 'Galaxy S II'],\n        'I897': ['Samsung', 'Captivate'],\n        'I7500': ['Samsung', 'Galaxy'],\n        'I9000': ['Samsung', 'Galaxy S'],\n        'T959': ['Samsung', 'Galaxy S Vibrant'],\n        'Captivate-I897': ['Samsung', 'Captivate'],\n        'Galaxy': ['Samsung', 'Galaxy'],\n        'Galaxy Note': ['Samsung', 'Galaxy Note'],\n        'GalaxyS': ['Samsung', 'Galaxy S'],\n        'Galaxy S II': ['Samsung', 'Galaxy S II'],\n        'Galaxy X': ['Samsung', 'Galaxy X'],\n        'Galaxy Spica': ['Samsung', 'Galaxy Spica'],\n        'GALAXY Tab': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'GALAXY NEXUS': ['Samsung', 'Galaxy Nexus'],\n        'Vibrantmtd': ['Samsung', 'Vibrant'],\n        'SC-01C': ['Samsung', 'Galaxy Tab', 'tablet'],\n        'SC-01D': ['Samsung', 'Galaxy Tab 10.1 LTE', 'tablet'],\n        'SC-02B': ['Samsung', 'Galaxy S'],\n        'SC-02C': ['Samsung', 'Galaxy S II'],\n        'SC-02D': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n        'SC-03D': ['Samsung', 'Galaxy S II LTE'],\n        'SC-04D': ['Samsung', 'Galaxy Nexus'],\n        'SC-05D': ['Samsung', 'Galaxy Note LTE'],\n        'SC-06D': ['Samsung', 'Galaxy S III'],\n        'ISW11SC': ['Samsung', 'Galaxy S II WiMAX'],\n        'GT-S7562': ['Samsung', 'GT-S7562'],\n        'GT-S7562i': ['Samsung', 'GT-S7562i'],\n        'A01SH': ['Sharp', 'A01SH'],\n        'IS01': ['Sharp', 'IS01'],\n        'IS03': ['Sharp', 'IS03'],\n        'IS05': ['Sharp', 'IS05'],\n        'IS11SH': ['Sharp', 'Aquos IS11SH'],\n        'IS12SH': ['Sharp', 'Aquos IS12SH'],\n        'IS13SH': ['Sharp', 'Aquos IS13SH'],\n        'IS14SH': ['Sharp', 'Aquos IS14SH'],\n        'ISW16SH': ['Sharp', 'Aquos ISW16SH'],\n        'EB-W51GJ': ['Sharp', 'EB-W51GJ'],\n        'SBM003SH': ['Sharp', 'Galapagos'],\n        'SBM005SH': ['Sharp', 'Galapagos'],\n        'SBM006SH': ['Sharp', 'Aquos'],\n        'SBM007SH': ['Sharp', 'Aquos 007SH'],\n        'SBM009SH': ['Sharp', 'Aquos 009SH'],\n        'SBM102SH': ['Sharp', 'Aquos 102SH'],\n        'SBM103SH': ['Sharp', 'Aquos 103SH'],\n        'SBM104SH': ['Sharp', 'Aquos 104SH'],\n        'SBM107SH': ['Sharp', 'Aquos 107SH'],\n        'SBM107SHB': ['Sharp', 'Aquos 107SH'],\n        'SH-01D': ['Sharp', 'Aquos SH-01D'],\n        'SH-02D': ['Sharp', 'Aquos slider SH-02D'],\n        'SH-03C': ['Sharp', 'Lynx 3D'],\n        'SH-06D': ['Sharp', 'Aquos SH-06D'],\n        'SH-09D': ['Sharp', 'Aquos Zeta SH-09D'],\n        'SH-10B': ['Sharp', 'Lynx'],\n        'SH-12C': ['Sharp', 'Aquos'],\n        'SH-13C': ['Sharp', 'Aquos f SH-13C'],\n        'SH80F': ['Sharp', 'Aquos SH80F'],\n        'SH72x8U': ['Sharp', 'SH72x8U'],\n        'SH8118U': ['Sharp', 'SH8118U'],\n        'SH8128U': ['Sharp', 'SH8128U'],\n        'SH8158U': ['Sharp', 'SH8158U'],\n        'SH8188U': ['Sharp', 'SH8188U'],\n        'SH8268U': ['Sharp', 'SH8268U'],\n        'INFOBAR C01': ['Sharp', 'INFOBAR C01'],\n        'SPX-5': ['Simvalley', 'SPX-5'],\n        'SPX-5 3G': ['Simvalley', 'SPX-5 3G'],\n        'SmartQ G7': ['SmartQ', 'G7', 'tablet'],\n        'SmartQT7': ['SmartQ', 'T7', 'tablet'],\n        'SmartQT10': ['SmartQ', 'T10', 'tablet'],\n        'SmartQT15': ['SmartQ', 'T15', 'tablet'],\n        'SmartQT19': ['SmartQ', 'T19', 'tablet'],\n        'SmartQT20': ['SmartQ', 'T20', 'tablet'],\n        'OMS1 6': ['Sony Ericsson', 'A8i'],\n        'E10a': ['Sony Ericsson', 'Xperia X10 Mini'],\n        'E10i': ['Sony Ericsson', 'Xperia X10 Mini'],\n        'E10iv': ['Sony Ericsson', 'Xperia X10 Mini'],\n        'E15': ['Sony Ericsson', 'Xperia X8'],\n        'E15a': ['Sony Ericsson', 'Xperia X8'],\n        'E15i': ['Sony Ericsson', 'Xperia X8'],\n        'E15iv': ['Sony Ericsson', 'Xperia X8'],\n        'E15i-o': ['Sony Ericsson', 'Xperia X8'],\n        'E16i': ['Sony Ericsson', 'W8 Walkman'],\n        'LT11i': ['Sony Ericsson', 'Xperia Neo V'],\n        'LT15': ['Sony Ericsson', 'Xperia Arc'],\n        'LT15a': ['Sony Ericsson', 'Xperia Arc'],\n        'LT15i': ['Sony Ericsson', 'Xperia Arc'],\n        'LT15iv': ['Sony Ericsson', 'Xperia Arc'],\n        'LT15i-o': ['Sony Ericsson', 'Xperia Arc'],\n        'LT18a': ['Sony Ericsson', 'Xperia Arc S'],\n        'LT18i': ['Sony Ericsson', 'Xperia Arc S'],\n        'LT18iv': ['Sony Ericsson', 'Xperia Arc S'],\n        'LT18i-o': ['Sony Ericsson', 'Xperia Arc S'],\n        'LT22i': ['Sony', 'Xperia P'],\n        'LT26i': ['Sony', 'Xperia S'],\n        'LT26ii': ['Sony', 'Xperia S'],\n        'LT26i-o': ['Sony', 'Xperia S'],\n        'LT28at': ['Sony', 'Xperia Ion'],\n        'LT28h': ['Sony', 'Xperia Ion'],\n        'LT28i': ['Sony', 'Xperia Ion'],\n        'LT29i': ['Sony', 'Xperia GX'],\n        'SonyLT29i': ['Sony', 'Xperia GX'],\n        'SonyLT30a': ['Sony', 'Xperia Mint'],\n        'SonyLT30p': ['Sony', 'Xperia Mint'],\n        'MK16a': ['Sony Ericsson', 'Xperia Pro'],\n        'MK16i': ['Sony Ericsson', 'Xperia Pro'],\n        'MT11a': ['Sony Ericsson', 'Xperia Neo V'],\n        'MT11i': ['Sony Ericsson', 'Xperia Neo V'],\n        'MT11iv': ['Sony Ericsson', 'Xperia Neo V'],\n        'MT11i-o': ['Sony Ericsson', 'Xperia Neo V'],\n        'MT15a': ['Sony Ericsson', 'Xperia Neo'],\n        'MT15i': ['Sony Ericsson', 'Xperia Neo'],\n        'MT15iv': ['Sony Ericsson', 'Xperia Neo'],\n        'MT15i-o': ['Sony Ericsson', 'Xperia Neo'],\n        'MT25i': ['Sony', 'Xperia Neo L'],\n        'MT27i': ['Sony', 'Xperia Sola'],\n        'R800a': ['Sony Ericsson', 'Xperia Play'],\n        'R800i': ['Sony Ericsson', 'Xperia Play'],\n        'R800iv': ['Sony Ericsson', 'Xperia Play'],\n        'R800at': ['Sony Ericsson', 'Xperia Play'],\n        'R800x': ['Sony Ericsson', 'Xperia Play'],\n        'SK17a': ['Sony Ericsson', 'Xperia Mini Pro'],\n        'SK17i': ['Sony Ericsson', 'Xperia Mini Pro'],\n        'SK17iv': ['Sony Ericsson', 'Xperia Mini Pro'],\n        'SK17i-o': ['Sony Ericsson', 'Xperia Mini Pro'],\n        'ST15a': ['Sony Ericsson', 'Xperia Mini'],\n        'ST15i': ['Sony Ericsson', 'Xperia Mini'],\n        'ST17a': ['Sony Ericsson', 'Xperia Active'],\n        'ST17i': ['Sony Ericsson', 'Xperia Active'],\n        'ST18a': ['Sony Ericsson', 'Xperia Ray'],\n        'ST18i': ['Sony Ericsson', 'Xperia Ray'],\n        'ST18iv': ['Sony Ericsson', 'Xperia Ray'],\n        'ST18av': ['Sony Ericsson', 'Xperia Ray'],\n        'SonyST21': ['Sony', '\\'Tapioca\\''],\n        'SonyST21i': ['Sony', '\\'Tapioca\\''],\n        'SonyST21a2': ['Sony', '\\'Tapioca\\''],\n        'ST21': ['Sony', '\\'Tapioca\\''],\n        'ST21i': ['Sony', '\\'Tapioca\\''],\n        'SonyST23i': ['Sony', '\\'Tapioca DS\\''],\n        'ST25i': ['Sony', 'Xperia U'],\n        'ST27i': ['Sony', 'Xperia Go'],\n        'U20a': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n        'U20i': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n        'U20iv': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n        'WT13i': ['Sony Ericsson', 'Mix Walkman'],\n        'WT18i': ['Sony Ericsson', 'Walkman'],\n        'WT19a': ['Sony Ericsson', 'Live with Walkman'],\n        'WT19i': ['Sony Ericsson', 'Live with Walkman'],\n        'WT19iv': ['Sony Ericsson', 'Live with Walkman'],\n        'X8': ['Sony Ericsson', 'Xperia X8'],\n        'X10': ['Sony Ericsson', 'Xperia X10'],\n        'X10a': ['Sony Ericsson', 'Xperia X10'],\n        'X10i': ['Sony Ericsson', 'Xperia X10'],\n        'X10iv': ['Sony Ericsson', 'Xperia X10'],\n        'X10S': ['Sony Ericsson', 'Xperia X10'],\n        'X10mini': ['Sony Ericsson', 'Xperia X10 Mini'],\n        'X10 Mini': ['Sony Ericsson', 'Xperia X10 Mini'],\n        'X10 Mini Pro': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n        'Z1i': ['Sony Ericsson', 'Xperia Play'],\n        'S51SE': ['Sony Ericsson', 'Xperia Mini'],\n        'IS11S': ['Sony Ericsson', 'Xperia Acro'],\n        'IS12S': ['Sony Ericsson', 'Xperia Acro HD'],\n        'SO-01B': ['Sony Ericsson', 'Xperia X10'],\n        'SO-01C': ['Sony Ericsson', 'Xperia Arc'],\n        'SO-01D': ['Sony Ericsson', 'Xperia Play'],\n        'SO-02C': ['Sony Ericsson', 'Xperia Acro'],\n        'SO-02D': ['Sony Ericsson', 'Xperia NX'],\n        'SO-03C': ['Sony Ericsson', 'Xperia Ray'],\n        'SO-03D': ['Sony Ericsson', 'Xperia Acro HD'],\n        'SO-04D': ['Sony', 'Xperia GX'],\n        'SO-05D': ['Sony', 'Xperia SX'],\n        'XPERIA X8': ['Sony Ericsson', 'Xperia X8'],\n        'Xperia X8': ['Sony Ericsson', 'Xperia X8'],\n        'Xperia X10': ['Sony Ericsson', 'Xperia X10'],\n        'Xperia ray': ['Sony Ericsson', 'Xperia Ray'],\n        'Xperia Ray': ['Sony Ericsson', 'Xperia Ray'],\n        'Xperia Arc': ['Sony Ericsson', 'Xperia Arc'],\n        'Xperia Mini': ['Sony Ericsson', 'Xperia Mini'],\n        'Xperia neo': ['Sony Ericsson', 'Xperia Neo'],\n        'Xperia Neo': ['Sony Ericsson', 'Xperia Neo'],\n        'XPERIA NEO': ['Sony Ericsson', 'Xperia Neo'],\n        'Xperia NeoV': ['Sony Ericsson', 'Xperia Neo V'],\n        'Xperia Neo V': ['Sony Ericsson', 'Xperia Neo V'],\n        'Xperia Play': ['Sony Ericsson', 'Xperia Play'],\n        'Sony Ericsson Xperia X1': ['Sony Ericsson', 'Xperia X1'],\n        'SonyHayabusa': ['Sony', 'Xperia Ion'],\n        'Hayabusa': ['Sony', 'Xperia Ion'],\n        'nozomi': ['Sony', 'Xperia S'],\n        'Sony Tablet P': ['Sony', 'Tablet P', 'tablet'],\n        'Sony Tablet S': ['Sony', 'Tablet S', 'tablet'],\n        'NWZ-Z1000Series': ['Sony', 'Walkman Z', 'media'],\n        'NW-Z1000Series': ['Sony', 'Walkman Z', 'media'],\n        'Spice Mi280': ['Spice', 'Mi-280'],\n        'Spice Mi300': ['Spice', 'Mi-300'],\n        'Spice Mi-310': ['Spice', 'Mi-310'],\n        'Spice Mi-425': ['Spice', 'Mi-425'],\n        'SPICE Mi-720': ['Spice', 'Mi-720'],\n        'A7272+': ['Star', 'A7272+'],\n        'e1109 v73 gq1002 ctp': ['Star', 'X18i'],\n        'TS1004T': ['Surf 3Q', 'TS1004T', 'tablet'],\n        'SYTABEX7-2': ['Sylvania', 'SYTABEX7', 'tablet'],\n        'TCL A860': ['TCL', 'A860'],\n        'TCL A906': ['TCL', 'A906'],\n        'TCL A909': ['TCL', 'A909'],\n        'TCL A919': ['TCL', 'A919'],\n        'TCL A990': ['TCL', 'A990'],\n        'TCL A996': ['TCL', 'A996'],\n        'TCL A998': ['TCL', 'A998'],\n        'TCL GENESEE E708': ['TCL', 'Genesee E708'],\n        'A10t(5DM3)': ['Teclast', 'A10T', 'tablet'],\n        'P72': ['Teclast', 'P72', 'tablet'],\n        'P76TI': ['Teclast', 'P76Ti', 'tablet'],\n        'P81HD': ['Teclast', 'P81HD', 'tablet'],\n        'P85(R8A1)': ['Teclast', 'P85', 'tablet'],\n        'T720 SE': ['Teclast', 'T720', 'tablet'],\n        'T760 from moage.com': ['Teclast', 'T760', 'tablet'],\n        'tegav2': ['Tegatech', 'TEGA v2', 'tablet'],\n        'TM-7025': ['teXet', 'TM-7025', 'tablet'],\n        'MoFing': ['Thomson', 'MoFing', 'tablet'],\n        'Ultimate10': ['Tomtec', 'Ultimate10', 'tablet'],\n        'Thl V7': ['THL', 'V7'],\n        'ThL V7': ['THL', 'V7'],\n        'ThL V8': ['THL', 'V8'],\n        'ThL V9': ['THL', 'V9'],\n        'ThL V11': ['THL', 'V11'],\n        'TSB CLOUD COMPANION;TOSHIBA AC AND AZ': ['Toshiba', 'Dynabook AZ', 'desktop'],\n        'TOSHIBA AC AND AZ': ['Toshiba', 'Dynabook AZ', 'desktop'],\n        'TOSHIBA FOLIO AND A': ['Toshiba', 'Folio 100', 'tablet'],\n        'T-01C': ['Toshiba', 'Regza T-01C'],\n        'T-01D': ['Toshiba', 'Regza T-01D'],\n        'IS04': ['Toshiba', 'Regza IS04'],\n        'IS11T': ['Toshiba', 'Regza IS11T'],\n        'AT1S0': ['Toshiba', 'Regza AT1S0'],\n        'Tostab03': ['Toshiba', 'Regza AT100', 'tablet'],\n        'AT100': ['Toshiba', 'Regza AT100', 'tablet'],\n        'AT200': ['Toshiba', 'Regza AT200', 'tablet'],\n        'AT470': ['Toshiba', 'Regza AT470', 'tablet'],\n        'AT570': ['Toshiba', 'Regza AT570', 'tablet'],\n        'AT830': ['Toshiba', 'Regza AT830', 'tablet'],\n        'Folio 100': ['Toshiba', 'Folio 100', 'tablet'],\n        'folio100': ['Toshiba', 'Folio 100', 'tablet'],\n        'THRiVE': ['Toshiba', 'THRiVE', 'tablet'],\n        'Fantastic T3': ['TWM', 'Fantastic T3'],\n        'M70014': ['United Star Technology', 'M70014', 'tablet'],\n        'PS47': ['Velocity Micro', 'Cruz PS47', 'tablet'],\n        'T301': ['Velocity Micro', 'Cruz T301', 'tablet'],\n        'Vibo-A688': ['FIH', 'Vibo A688'],\n        'Videocon-V7500': ['Videocon', 'V7500'],\n        'GTablet': ['ViewSonic', 'gTablet', 'tablet'],\n        'GtabComb': ['ViewSonic', 'gTablet', 'tablet'],\n        'TeamDRH ICS for GTablet': ['ViewSonic', 'gTablet', 'tablet'],\n        'ViewPad7': ['ViewSonic', 'ViewPad 7', 'tablet'],\n        'ViewPad 10e': ['ViewSonic', 'ViewPad 10e', 'tablet'],\n        'VTAB1008': ['Vizio', 'VTAB1008', 'tablet'],\n        'VTAB3010': ['Vizio', 'VTAB3010', 'tablet'],\n        'VOTO W5300': ['VOTO', 'W5300'],\n        'xPAD-70': ['WayteQ', 'xPAD-70', 'tablet'],\n        'xTAB-70': ['WayteQ', 'xTAB-70', 'tablet'],\n        'WellcoM-A99': ['WellcoM', 'A99'],\n        'N12': ['Window', 'N12', 'tablet'],\n        'N12R': ['Window', 'N12R', 'tablet'],\n        'N50': ['Window', 'N50', 'tablet'],\n        'N50DT': ['Window', 'N50DT', 'tablet'],\n        'N50GT': ['Window', 'N50GT', 'tablet'],\n        'N50GT A': ['Window', 'N50GT-A', 'tablet'],\n        'N70': ['Window', 'N70', 'tablet'],\n        'N70 DUAL CORE': ['Window', 'N70 Dual Core', 'tablet'],\n        'N80': ['Window', 'N80', 'tablet'],\n        'N90': ['Window', 'N90', 'tablet'],\n        'N90 DUAL CORE2 V12': ['Window', 'N90 Dual Core', 'tablet'],\n        'N612': ['Wishway', 'N612'],\n        'AT-AS43D': ['Wolfgang', 'AT-AS43D'],\n        'M12': ['Wopad', 'M12', 'tablet'],\n        'WM8650': ['WonderMedia', 'WM8650', 'tablet'],\n        'MI-ONE': ['Xiaomi', 'MI-ONE'],\n        'MI-ONE C1': ['Xiaomi', 'MI-ONE C1'],\n        'MI-ONE Plus': ['Xiaomi', 'MI-ONE Plus'],\n        'MI 1S': ['Xiaomi', 'MI-ONE Plus'],\n        'MI 1SC': ['Xiaomi', 'MI-ONE 1SC'],\n        'mione plus': ['Xiaomi', 'MI-ONE Plus'],\n        'MI-TWO': ['Xiaomi', 'MI-TWO'],\n        'MI 2': ['Xiaomi', 'MI-TWO'],\n        'MI 2S': ['Xiaomi', 'MI-TWO Plus'],\n        'MI 2SC': ['Xiaomi', 'MI-TWO Plus'],\n        'Q07CL01': ['XVision', 'Q07', 'tablet'],\n        'N6': ['Yarvik', '210 Tablet', 'tablet'],\n        'EMR1879': ['Yidong', 'EMR1879', 'tablet'],\n        'yusun W702': ['Yusun', 'W702'],\n        'YX-YUSUN E80': ['Yusun', 'E80'],\n        'zt180': ['Zenithink', 'ZT-180', 'tablet'],\n        'Jaguar7': ['ZiiLabs', 'Jaguar 7', 'tablet'],\n        'Ziss Ranger HD': ['Ziss', 'Ranger HD'],\n        'ZTE Libra': ['ZTE', 'Libra'],\n        'ZTE-T T9': ['ZTE', 'Light Tab T9', 'tablet'],\n        'V9': ['ZTE', 'Light Tab V9', 'tablet'],\n        'V9e+': ['ZTE', 'Light Tab 2', 'tablet'],\n        'V9A': ['ZTE', 'Light Tab 2', 'tablet'],\n        'Light Tab 2W': ['ZTE', 'Light Tab 2', 'tablet'],\n        'Light Tab 2': ['ZTE', 'Light Tab 2', 'tablet'],\n        'V9C': ['ZTE', 'Light Tab 3', 'tablet'],\n        'V55': ['ZTE', 'Optik', 'tablet'],\n        'Acqua': ['ZTE', 'Acqua'],\n        'Blade': ['ZTE', 'Blade'],\n        'Blade-V880': ['ZTE', 'Blade'],\n        'ZTE-U V880': ['ZTE', 'Blade'],\n        'Blade-opda': ['ZTE', 'Blade'],\n        'ZTE-BLADE': ['ZTE', 'Blade'],\n        'ZTE Blade': ['ZTE', 'Blade'],\n        'ZTE V880': ['ZTE', 'Blade'],\n        'ZTE-U(V)880+': ['ZTE', 'Blade'],\n        'V880': ['ZTE', 'Blade'],\n        'a5': ['ZTE', 'Blade'],\n        'Blade2': ['ZTE', 'Blade 2'],\n        'Blade S': ['ZTE', 'Blade S'],\n        'X500': ['ZTE', 'Score'],\n        'ZTE-X500': ['ZTE', 'Score'],\n        'Skate': ['ZTE', 'Skate'],\n        'ZTE Skate': ['ZTE', 'Skate'],\n        'ZTE-Skate': ['ZTE', 'Skate'],\n        'ZTE-SKATE': ['ZTE', 'Skate'],\n        'ZTE-V960': ['ZTE', 'Skate'],\n        'ZTE-U V960': ['ZTE', 'Skate'],\n        'ZTE Racer': ['ZTE', 'Racer'],\n        'ZTE-RACER': ['ZTE', 'Racer'],\n        'MTC 916': ['ZTE', 'Racer'],\n        'Racer': ['ZTE', 'Racer'],\n        'RacerII': ['ZTE', 'Racer 2'],\n        'RACERII': ['ZTE', 'Racer 2'],\n        'ZTE Roamer': ['ZTE', 'Roamer'],\n        'N860': ['ZTE', 'Warp'],\n        'N880': ['ZTE', 'Blade'],\n        'ZTE-T U802': ['ZTE', 'T-U802'],\n        'ZTE-T U806': ['ZTE', 'T-U806'],\n        'ZTE-T U812': ['ZTE', 'T-U812'],\n        'ZTE-T U830': ['ZTE', 'T-U830'],\n        'ZTE-T U880': ['ZTE', 'T-U880'],\n        'ZTE T U880': ['ZTE', 'T-U880'],\n        'ZTE-TU880': ['ZTE', 'T-U880'],\n        'ZTE-TU900': ['ZTE', 'T-U900'],\n        'ZTE-T U960': ['ZTE', 'T-U960'],\n        'ZTE-TU960s': ['ZTE', 'T-U960'],\n        'ZTE-T U960s': ['ZTE', 'T-U960'],\n        'ZTE U N720': ['ZTE', 'U-N720'],\n        'ZTE-U V856': ['ZTE', 'U-V856'],\n        'ZTE-U V857': ['ZTE', 'U-V857'],\n        'ZTE-U V881': ['ZTE', 'U-V881'],\n        'ZTE-U X850': ['ZTE', 'U-X850'],\n        'ZTE-U X876': ['ZTE', 'U-X876'],\n        'ZTE-X876': ['ZTE', 'U-X876'],\n        'ZTE-C R750': ['ZTE', 'C-R750'],\n        'ZTE-C N600': ['ZTE', 'C-N600'],\n        'ZTE-C N600+': ['ZTE', 'C-N600'],\n        'ZTE-C N606': ['ZTE', 'C-N606'],\n        'ZTE-C N700': ['ZTE', 'C-N700'],\n        'ZTE-C N760': ['ZTE', 'C-N760'],\n        'ZTE-C N880': ['ZTE', 'C-N880'],\n        'ZTE-C N880S': ['ZTE', 'C-N880'],\n        'ZTE-C N880s': ['ZTE', 'C-N880'],\n        'ZTE-C X500': ['ZTE', 'C-X500'],\n        'ZTE-C X920': ['ZTE', 'C-X920'],\n        'ZXY-ZTE-C X920': ['ZTE', 'C-X920'],\n        'ZTE GV821': ['ZTE', 'G-V821'],\n        'ZTE N880E': ['ZTE', 'N880E'],\n        'ZTE-N880E': ['ZTE', 'N880E'],\n        'MIUI N880S': ['ZTE', 'N880S'],\n        'ZTE N882E': ['ZTE', 'N882E'],\n        'ZTE N855D': ['ZTE', 'N855D'],\n        'ZTE-N910': ['ZTE', 'N910'],\n        'E810': ['ZTE', 'E810'],\n        'u880': ['ZTE', 'U880'],\n        'ZTE U880E': ['ZTE', 'U880E'],\n        'U880': ['ZTE', 'U880'],\n        'ZTE U970': ['ZTE', 'U970'],\n        'ZTE V768': ['ZTE', 'V768'],\n        'ZTE-V856': ['ZTE', 'V856'],\n        'ZTE V877b': ['ZTE', 'V877'],\n        'ZTE V889D': ['ZTE', 'V889'],\n        'ZTE-Z990': ['ZTE', 'Z990'],\n        'ZTEU790': ['ZTE', 'U790'],\n        '003Z': ['ZTE', 'Softbank 003Z'],\n        '008Z': ['ZTE', 'Softbank 008Z'],\n        '009Z': ['ZTE', 'Softbank Star7'],\n        'i-mobile i691': ['i-Mobile', 'i691'],\n        'i-mobile i695': ['i-Mobile', 'i695'],\n        'i-mobile i858': ['i-Mobile', 'i858'],\n        'i-mobile 3G 8500': ['i-Mobile', '3G 8500'],\n        'i-mobile I-Note': ['i-Mobile', 'i-Note', 'tablet'],\n        'Optimus Boston': ['Optimus', 'Boston'],\n        'Optimus San Francisco': ['Optimus', 'San Francisco'],\n        'Optimus Monte Carlo': ['Optimus', 'Monte Carlo'],\n        'Orange Boston': ['Orange', 'Boston'],\n        'Orange Monte Carlo': ['Orange', 'Monte Carlo'],\n        'San Francisco': ['Orange', 'San Francisco'],\n        'San Francisco for Orange': ['Orange', 'San Francisco'],\n        'Orange San Francisco': ['Orange', 'San Francisco'],\n        'MOVE': ['T-Mobile', 'MOVE'],\n        'T-Mobile G1': ['T-Mobile', 'G1'],\n        'T-Mobile G2': ['T-Mobile', 'G2'],\n        'T-Mobile G2 Touch': ['T-Mobile', 'G2'],\n        'LG-P999': ['T-Mobile', 'G2x'],\n        'LG-E739': ['T-Mobile', 'myTouch'],\n        'T-Mobile myTouch 3G': ['T-Mobile', 'myTouch 3G'],\n        'T-Mobile myTouch 3G Slide': ['T-Mobile', 'myTouch 3G Slide'],\n        'T-Mobile Espresso': ['T-Mobile', 'myTouch 3G Slide'],\n        'HTC myTouch 3G Slide': ['T-Mobile', 'myTouch 3G Slide'],\n        'T-Mobile myTouch 4G': ['T-Mobile', 'myTouch 4G'],\n        'HTC Glacier': ['T-Mobile', 'myTouch 4G'],\n        'HTC Panache': ['T-Mobile', 'myTouch 4G'],\n        'myTouch4G': ['T-Mobile', 'myTouch 4G'],\n        'My Touch 4G': ['T-Mobile', 'myTouch 4G'],\n        'HTC Mytouch 4G': ['T-Mobile', 'myTouch 4G'],\n        'HTC My Touch 4G': ['T-Mobile', 'myTouch 4G'],\n        'HTC mytouch4g': ['T-Mobile', 'myTouch 4G'],\n        'HTC myTouch 4G Slide': ['T-Mobile', 'myTouch 4G Slide'],\n        'myTouch 4G Slide': ['T-Mobile', 'myTouch 4G Slide'],\n        'T-Mobile myTouch Q': ['T-Mobile', 'myTouch Q'],\n        'LG-C800': ['T-Mobile', 'myTouch Q'],\n        'Pulse Mini': ['T-Mobile', 'Pulse Mini'],\n        'Vodafone 845': ['Vodafone', '845 Nova'],\n        'Vodafone 858': ['Vodafone', '858 Smart'],\n        'Vodafone 945': ['Vodafone', '945'],\n        'Vodafone Smart II': ['Vodafone', 'Smart II'],\n        'SmartTab10': ['Vodafone', 'SmartTab 10', 'tablet'],\n        'SCH-N719': ['Samsung', 'Galaxy Note II'],\n        'Coolpad 8190': ['Coolpad', '8190'],\n        'U705T': ['Oppo', 'Ulike2'],\n        'Coolpad 8020+': ['Coolpad', '8020'],\n        'Huawei Y310-5000': ['Huawei', 'Y310'],\n        'GT-S7572': ['Samsung', 'Galaxy Trend Duos II'],\n        'Lenovo A278t': ['Lenovo', 'A278t'],\n        'Lenovo A690': ['Lenovo', 'A690'],\n        'GT-I8262D': ['Samsung', 'LePhone I8262D'],\n        'Lenovo A278t': ['Lenovo', 'A278t'],\n        'MI 2C': ['Xiaomi', 'MI-TWO'],\n        'Coolpad 8070': ['Coolpad', '8070'],\n        'R813T': ['Oppo', 'R813T'],\n        'ZTE U930': ['ZTE', 'U930'],\n        'Lenovo A360': ['Lenovo', 'LePhone A360'],\n        'SCH-N719': ['Samsung', 'Galaxy Note II'],\n        'Coolpad 8010': ['Coolpad', '8010'],\n        'LENOVO-Lenovo-A288t': ['Lenovo', 'A288t'],\n        'U701T': ['Oppo', 'U701T'],\n        'ZTEU795': ['Coolpad', 'U795'],\n        'Haier-HT-I617': ['Haier', 'I617'],\n        'ZTEU880s': ['ZTE', 'T-U880'],\n        'GT-S6352': ['Samsung', 'GT-S6352'],\n        'GT-S7568': ['Samsung', 'GT-S7568'],\n        'K-Touch T619+': ['K-Touch', 'T619'],\n        'MI 2A': ['Xiaomi', 'MI-TWO A'],\n        'GT-N7108': ['Samsung', 'Galaxy Note II'],\n        'K-Touch T621': ['K-Touch', 'T621'],\n        'LENOVO-Lenovo-A298t': ['Lenovo', 'A298'],\n        'Coolpad 8150': ['Coolpad', '8150'],\n        '5860S': ['Coolpad', '5860'],\n        'ZTEU807': ['ZTE', 'U807'],\n        'SCH-I739': ['Samsung', 'SCH-I739'],\n        'SCH-I829': ['Samsung', 'SCH-I829'],\n        'HS-E830': ['Hisense', 'E830'],\n        'HS-E920': ['Hisense', 'E920'],\n        'Lenovo S720': ['Lenovo', 'S720'],\n        'MI 2C': ['Xiaomi', 'MI-TWO'],\n        'OPPO R813T': ['Oppo', 'R813'],\n        'SCH-I879': ['Samsung', 'Galaxy Note'],\n        'GT-S6102E': ['Samsung', 'Galaxy Y Duos']\n    }\n\n    var BLACKBERRY_MODELS = {\n        '9600': 'Bold',\n        '9650': 'Bold',\n        '9700': 'Bold',\n        '9780': 'Bold',\n        '9790': 'Bold',\n        '9900': 'Bold',\n        '9930': 'Bold',\n        '8300': 'Curve',\n        '8310': 'Curve',\n        '8320': 'Curve',\n        '8330': 'Curve',\n        '8350i': 'Curve',\n        '8520': 'Curve',\n        '8530': 'Curve',\n        '8900': 'Curve',\n        '9220': 'Curve',\n        '9300': 'Curve',\n        '9330': 'Curve',\n        '9350': 'Curve',\n        '9360': 'Curve',\n        '9370': 'Curve',\n        '9380': 'Curve',\n        '8100': 'Pearl',\n        '8110': 'Pearl',\n        '8120': 'Pearl',\n        '8130': 'Pearl',\n        '8220': 'Pearl',\n        '8230': 'Pearl',\n        '9100': 'Pearl',\n        '9105': 'Pearl',\n        '9530': 'Storm',\n        '9550': 'Storm',\n        '9670': 'Style',\n        '9800': 'Torch',\n        '9810': 'Torch',\n        '9850': 'Torch',\n        '9860': 'Torch',\n        '9630': 'Tour',\n        '9981': 'Porsche P'\n    };\n\n\n    var Version = function () {\n        this.initialize.apply(this, Array.prototype.slice.call(arguments))\n    };\n    Version.prototype = {\n        initialize: function (v) {\n            this.original = v.value || null;\n            this.alias = v.alias || null;\n            \n        }\n    }\n\n    var Detected = function () {\n        this.initialize.apply(this, arguments)\n    };\n    Detected.prototype = {\n        initialize: function (ua, options) {\n            this.options = {\n                useFeatures: options && options.useFeatures || false,\n                detectCamouflage: options && options.detectCamouflage || true\n            }\n\n            this.browser = {\n                'stock': true,\n                'hidden': false,\n                'channel': ''\n            };\n            this.engine = {};\n            this.os = {};\n            this.device = {\n                'type': 'desktop',\n                'identified': false\n            };\n\n            this.camouflage = false;\n            this.features = [];\n            this.detect(ua);\n        },\n\n        detect: function (ua) {\n\n            /****************************************************\n             *      Unix\n             */\n\n            if (ua.match('Unix')) {\n                this.os.name = 'Unix';\n            }\n\n            /****************************************************\n             *      FreeBSD\n             */\n\n            if (ua.match('FreeBSD')) {\n                this.os.name = 'FreeBSD';\n            }\n\n            /****************************************************\n             *      OpenBSD\n             */\n\n            if (ua.match('OpenBSD')) {\n                this.os.name = 'OpenBSD';\n            }\n\n            /****************************************************\n             *      NetBSD\n             */\n\n            if (ua.match('NetBSD')) {\n                this.os.name = 'NetBSD';\n            }\n\n            /****************************************************\n             *      SunOS\n             */\n\n            if (ua.match('SunOS')) {\n                this.os.name = 'Solaris';\n            }\n\n            /****************************************************\n             *      Linux\n             */\n\n            if (ua.match('Linux')) {\n                this.os.name = 'Linux';\n\n                if (ua.match('CentOS')) {\n                    this.os.name = 'CentOS';\n                    if (match = /CentOS\\/[0-9\\.\\-]+el([0-9_]+)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1].replace(/_/g, '.')\n                        });\n                    }\n                }\n\n                if (ua.match('Debian')) {\n                    this.os.name = 'Debian';\n                }\n\n                if (ua.match('Fedora')) {\n                    this.os.name = 'Fedora';\n                    if (match = /Fedora\\/[0-9\\.\\-]+fc([0-9]+)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1]\n                        });\n                    }\n                }\n\n                if (ua.match('Gentoo')) {\n                    this.os.name = 'Gentoo';\n                }\n\n                if (ua.match('Kubuntu')) {\n                    this.os.name = 'Kubuntu';\n                }\n\n                if (ua.match('Mandriva Linux')) {\n                    this.os.name = 'Mandriva';\n                    if (match = /Mandriva Linux\\/[0-9\\.\\-]+mdv([0-9]+)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1]\n                        });\n                    }\n                }\n\n                if (ua.match('Mageia')) {\n                    this.os.name = 'Mageia';\n                    if (match = /Mageia\\/[0-9\\.\\-]+mga([0-9]+)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1]\n                        });\n                    }\n                }\n\n                if (ua.match('Red Hat')) {\n                    this.os.name = 'Red Hat';\n                    if (match = /Red Hat[^\\/]*\\/[0-9\\.\\-]+el([0-9_]+)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1].replace(/_/g, '.')\n                        });\n                    }\n                }\n\n                if (ua.match('Slackware')) {\n                    this.os.name = 'Slackware';\n                }\n\n                if (ua.match('SUSE')) {\n                    this.os.name = 'SUSE';\n                }\n\n                if (ua.match('Turbolinux')) {\n                    this.os.name = 'Turbolinux';\n                }\n\n                if (ua.match('Ubuntu')) {\n                    this.os.name = 'Ubuntu';\n                    if (match = /Ubuntu\\/([0-9.]*)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1]\n                        });\n                    }\n                }\n            }\n\n            /****************************************************\n             *      iOS\n             */\n\n            if (ua.match('iPhone( Simulator)?;') || ua.match('iPad;') || ua.match('iPod;') || ua.match(/iPhone\\s*\\d*s?[cp]?;/i)) {\n                this.os.name = 'iOS';\n                this.os.version = new Version({\n                    value: '1.0'\n                });\n\n                if (match = /OS (.*) like Mac OS X/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1].replace(/_/g, '.')\n                    });\n                }\n\n                if (ua.match('iPhone Simulator;')) {\n                    this.device.type = 'emulator';\n                } else if (ua.match('iPod;')) {\n                    this.device.type = 'media';\n                    this.device.manufacturer = 'Apple';\n                    this.device.model = 'iPod Touch';\n                } else if (ua.match('iPhone;') || ua.match(/iPhone\\s*\\d*s?[cp]?;/i)) {\n                    this.device.type = 'mobile';\n                    this.device.manufacturer = 'Apple';\n                    this.device.model = 'iPhone';\n                } else {\n                    this.device.type = 'tablet';\n                    this.device.manufacturer = 'Apple';\n                    this.device.model = 'iPad';\n                }\n\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      MacOS X\n             */\n\n            else if (ua.match('Mac OS X')) {\n                this.os.name = 'Mac OS X';\n\n                if (match = /Mac OS X (10[0-9\\._]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1].replace(/_/g, '.')\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Windows\n             */\n\n            if (ua.match('Windows')) {\n                this.os.name = 'Windows';\n\n                if (match = /Windows NT ([0-9]\\.[0-9])/.exec(ua)) {\n                    this.os.version = parseVersion(match[1]);\n\n                    switch (match[1]) {\n                        case '6.2':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: '8'\n                            });\n                            break;\n                        case '6.1':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: '7'\n                            });\n                            break;\n                        case '6.0':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: 'Vista'\n                            });\n                            break;\n                        case '5.2':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: 'Server 2003'\n                            });\n                            break;\n                        case '5.1':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: 'XP'\n                            });\n                            break;\n                        case '5.0':\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: '2000'\n                            });\n                            break;\n                        default:\n                            this.os.version = new Version({\n                                value: match[1],\n                                alias: 'NT ' + this.os.version\n                            });\n                    }\n                }\n\n                if (ua.match('Windows 95') || ua.match('Win95') || ua.match('Win 9x 4.00')) {\n                    this.os.version = new Version({\n                        value: '4.0',\n                        alias: '95'\n                    });\n                }\n\n                if (ua.match('Windows 98') || ua.match('Win98') || ua.match('Win 9x 4.10')) {\n                    this.os.version = new Version({\n                        value: '4.1',\n                        alias: '98'\n                    });\n                }\n\n                if (ua.match('Windows ME') || ua.match('WinME') || ua.match('Win 9x 4.90')) {\n                    this.os.version = new Version({\n                        value: '4.9',\n                        alias: 'ME'\n                    });\n                }\n\n                if (ua.match('Windows XP') || ua.match('WinXP')) {\n                    this.os.name = new Version({\n                        value: '5.1',\n                        alias: 'XP'\n                    });\n                }\n\n                if (ua.match('WP7')) {\n                    this.os.name = 'Windows Phone';\n                    this.os.version = new Version({\n                        value: '7.0',\n                        details: 2\n                    });\n                    this.device.type = 'mobile';\n                    this.browser.mode = 'desktop';\n                }\n\n                if (ua.match('Windows CE') || ua.match('WinCE') || ua.match('WindowsCE')) {\n                    if (ua.match(' IEMobile')) {\n                        this.os.name = 'Windows Mobile';\n\n                        if (ua.match(' IEMobile 8')) {\n                            this.os.version = new Version({\n                                value: '6.5',\n                                details: 2\n                            });\n                        }\n\n                        if (ua.match(' IEMobile 7')) {\n                            this.os.version = new Version({\n                                value: '6.1',\n                                details: 2\n                            });\n                        }\n\n                        if (ua.match(' IEMobile 6')) {\n                            this.os.version = new Version({\n                                value: '6.0',\n                                details: 2\n                            });\n                        }\n                    } else {\n                        this.os.name = 'Windows CE';\n\n                        if (match = /WindowsCEOS\\/([0-9.]*)/.exec(ua)) {\n                            this.os.version = new Version({\n                                value: match[1],\n                                details: 2\n                            });\n                        }\n\n                        if (match = /Windows CE ([0-9.]*)/.exec(ua)) {\n                            this.os.version = new Version({\n                                value: match[1],\n                                details: 2\n                            });\n                        }\n                    }\n\n                    this.device.type = 'mobile';\n                }\n\n                if (ua.match('Windows Mobile')) {\n                    this.os.name = 'Windows Mobile';\n                    this.device.type = 'mobile';\n                }\n\n                if (match = /WindowsMobile\\/([0-9.]*)/.exec(ua)) {\n                    this.os.name = 'Windows Mobile';\n                    this.os.version = new Version({\n                        value: match[1],\n                        details: 2\n                    });\n                    this.device.type = 'mobile';\n                }\n\n                if (ua.match('Windows Phone [0-9]')) {\n                    this.os.name = 'Windows Mobile';\n                    this.os.version = new Version({\n                        value: ua.match(/Windows Phone ([0-9.]*)/)[1],\n                        details: 2\n                    });\n                    this.device.type = 'mobile';\n                }\n\n                if (ua.match('Windows Phone OS')) {\n                    this.os.name = 'Windows Phone';\n                    this.os.version = new Version({\n                        value: ua.match(/Windows Phone OS ([0-9.]*)/)[1],\n                        details: 2\n                    });\n\n                    if (this.os.version < 7) {\n                        this.os.name = 'Windows Mobile';\n                    }\n\n                    if (match = /IEMobile\\/[^;]+; ([^;]+); ([^;]+)[;|\\)]/.exec(ua)) {\n                        this.device.manufacturer = match[1];\n                        this.device.model = match[2];\n                    }\n\n                    this.device.type = 'mobile';\n\n                    var manufacturer = this.device.manufacturer;\n                    var model = cleanupModel(this.device.model);\n\n                    if (typeof WINDOWS_PHONE_MODELS[manufacturer] !== 'undefined' && typeof WINDOWS_PHONE_MODELS[manufacturer][model] !== 'undefined') {\n                        this.device.manufacturer = WINDOWS_PHONE_MODELS[manufacturer][model][0];\n                        this.device.model = WINDOWS_PHONE_MODELS[manufacturer][model][1];\n                        this.device.identified = true;\n                    }\n\n                    if (manufacturer === 'Microsoft' && model === 'XDeviceEmulator') {\n                        this.device.manufacturer = null;\n                        this.device.model = null;\n                        this.device.type = 'emulator';\n                        this.device.identified = true;\n                    }\n                }\n            }\n\n            /****************************************************\n             *      Android\n             */\n            if (ua.match('Android')) {\n                this.os.name = 'Android';\n                this.os.version = null;\n\n                if (match = /Android(?: )?(?:AllPhone_|CyanogenMod_)?(?:\\/)?v?([0-9.]+)/.exec(ua.replace('-update', '.'))) {\n                    this.os.version = new Version({\n                        value: match[1],\n                        details: 3\n                    })\n                }\n\n                if (ua.match('Android Eclair')) {\n                    this.os.version = new Version({\n                        value: '2.0',\n                        details: 3\n                    });\n                }\n\n                this.device.type = 'mobile';\n                if (this.os.version >= 3) this.device.type = 'tablet';\n                if (this.os.version >= 4 && ua.match('Mobile')) this.device.type = 'mobile';\n\n                if (match = /Eclair; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?) Build\\/([^\\/]*)\\//.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /; ([^;]*[^;\\s])\\s+Build/.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; ([^;]*[^;\\s]);\\s+Build/.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /\\(([^;]+);U;Android\\/[^;]+;[0-9]+\\*[0-9]+;CTC\\/2.0\\)/.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /;\\s?([^;]+);\\s?[0-9]+\\*[0-9]+;\\s?CTC\\/2.0/.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /zh-cn;\\s*(.*?)(\\/|build)/i.exec(ua)) {\n                    this.device.model = match[1];\n                } else if (match = /Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?([^)]+)\\)/.exec(ua)) {\n                    if (!ua.match(/[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?/)) {\n                        this.device.model = match[1];\n                    }\n                } else if (match = /^(.+?)\\/\\S+/i.exec(ua)) {\n                    this.device.model = match[1];\n                }\n\n\n                /* Sometimes we get a model name that starts with Android, in that case it is a mismatch and we should ignore it */\n                if (this.device.model && this.device.model.substring(0, 7) === 'Android') {\n                    this.device.model = null;\n                }\n\n                if (this.device.model) {\n                    var model = cleanupModel(this.device.model);\n\n                    if (typeof ANDROID_MODELS[model] !== 'undefined') {\n                        this.device.manufacturer = ANDROID_MODELS[model][0];\n                        this.device.model = ANDROID_MODELS[model][1];\n                        if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n                        this.device.identified = true;\n                    }\n\n                    if (model === 'Emulator' || model === 'x86 Emulator' || model === 'x86 VirtualBox' || model === 'vm') {\n                        this.device.manufacturer = null;\n                        this.device.model = null;\n                        this.device.type = 'emulator';\n                        this.device.identified = true;\n                    }\n                }\n\n                if (ua.match('HP eStation')) {\n                    this.device.manufacturer = 'HP';\n                    this.device.model = 'eStation';\n                    this.device.type = 'tablet';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pre\\/1.0')) {\n                    this.device.manufacturer = 'Palm';\n                    this.device.model = 'Pre';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pre\\/1.1')) {\n                    this.device.manufacturer = 'Palm';\n                    this.device.model = 'Pre Plus';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pre\\/1.2')) {\n                    this.device.manufacturer = 'Palm';\n                    this.device.model = 'Pre 2';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pre\\/3.0')) {\n                    this.device.manufacturer = 'HP';\n                    this.device.model = 'Pre 3';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pixi\\/1.0')) {\n                    this.device.manufacturer = 'Palm';\n                    this.device.model = 'Pixi';\n                    this.device.identified = true;\n                }\n                if (ua.match('Pixi\\/1.1')) {\n                    this.device.manufacturer = 'Palm';\n                    this.device.model = 'Pixi Plus';\n                    this.device.identified = true;\n                }\n                if (ua.match('P160UN?A?\\/1.0')) {\n                    this.device.manufacturer = 'HP';\n                    this.device.model = 'Veer';\n                    this.device.identified = true;\n                }\n            }\n\n            /****************************************************\n             *      Google TV\n             */\n\n            if (ua.match('GoogleTV')) {\n                this.os.name = 'Google TV';\n\n                if (ua.match('Chrome/5.')) {\n                    this.os.version = new Version({\n                        value: '1'\n                    });\n                }\n\n                if (ua.match('Chrome/11.')) {\n                    this.os.version = new Version({\n                        value: '2'\n                    });\n                }\n\n                this.device.type = 'television';\n            }\n\n            /****************************************************\n             *      WoPhone\n             */\n\n            if (ua.match('WoPhone')) {\n                this.os.name = 'WoPhone';\n\n                if (match = /WoPhone\\/([0-9\\.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      BlackBerry\n             */\n\n            if (ua.match('BlackBerry')) {\n                this.os.name = 'BlackBerry OS';\n\n                if (!ua.match('Opera')) {\n                    if (match = /BlackBerry([0-9]*)\\/([0-9.]*)/.exec(ua)) {\n                        this.device.model = match[1];\n                        this.os.version = new Version({\n                            value: match[2],\n                            details: 2\n                        });\n                    }\n\n                    if (match = /; BlackBerry ([0-9]*);/.exec(ua)) {\n                        this.device.model = match[1];\n                    }\n\n                    if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n                        this.os.version = new Version({\n                            value: match[1],\n                            details: 2\n                        });\n                    }\n\n                    if (this.os.version >= 10) {\n                        this.os.name = 'BlackBerry';\n                    }\n\n                    if (typeof this.device.model !== 'undefined') {\n                        if (typeof BLACKBERRY_MODELS[this.device.model] !== 'undefined') {\n                            this.device.model = 'BlackBerry ' + BLACKBERRY_MODELS[this.device.model] + ' ' + this.device.model;\n                        } else {\n                            this.device.model = 'BlackBerry ' + this.device.model;\n                        }\n                    } else {\n                        this.device.model = 'BlackBerry';\n                    }\n                } else {\n                    this.device.model = 'BlackBerry';\n                }\n\n                this.device.manufacturer = 'RIM';\n                this.device.type = 'mobile';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      BlackBerry PlayBook\n             */\n\n            if (ua.match('RIM Tablet OS')) {\n                this.os.name = 'BlackBerry Tablet OS';\n                this.os.version = new Version({\n                    value: ua.match(/RIM Tablet OS ([0-9.]*)/)[1],\n                    details: 2\n                });\n\n                this.device.manufacturer = 'RIM';\n                this.device.model = 'BlackBerry PlayBook';\n                this.device.type = 'tablet';\n                this.device.identified = true;\n            } else if (ua.match('PlayBook')) {\n                if (match = /Version\\/(10[0-9.]*)/.exec(ua)) {\n                    this.os.name = 'BlackBerry';\n                    this.os.version = new Version({\n                        value: match[1],\n                        details: 2\n                    });\n\n                    this.device.manufacturer = 'RIM';\n                    this.device.model = 'BlackBerry PlayBook';\n                    this.device.type = 'tablet';\n                    this.device.identified = true;\n                }\n            }\n\n\n            /****************************************************\n             *      WebOS\n             */\n\n            if (ua.match('(?:web|hpw)OS')) {\n                this.os.name = 'webOS';\n                this.os.version = new Version({\n                    value: ua.match(/(?:web|hpw)OS\\/([0-9.]*)/)[1]\n                });\n\n                if (ua.match('tablet')) this.device.type = 'tablet';\n                else this.device.type = 'mobile';\n\n                this.device.manufacturer = ua.match('hpwOS') ? 'HP' : 'Palm';\n                if (ua.match('Pre\\/1.0')) this.device.model = 'Pre';\n                if (ua.match('Pre\\/1.1')) this.device.model = 'Pre Plus';\n                if (ua.match('Pre\\/1.2')) this.device.model = 'Pre2';\n                if (ua.match('Pre\\/3.0')) this.device.model = 'Pre3';\n                if (ua.match('Pixi\\/1.0')) this.device.model = 'Pixi';\n                if (ua.match('Pixi\\/1.1')) this.device.model = 'Pixi Plus';\n                if (ua.match('P160UN?A?\\/1.0')) this.device.model = 'Veer';\n                if (ua.match('TouchPad\\/1.0')) this.device.model = 'TouchPad';\n\n                if (ua.match('Emulator\\/') || ua.match('Desktop\\/')) {\n                    this.device.type = 'emulator';\n                    this.device.manufacturer = null;\n                    this.device.model = null;\n                }\n\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      S60\n             */\n\n            if (ua.match('Symbian') || ua.match('Series[ ]?60') || ua.match('S60')) {\n                this.os.name = 'Series60';\n\n                if (ua.match('SymbianOS/9.1') && !ua.match('Series60')) {\n                    this.os.version = new Version({\n                        value: '3.0'\n                    });\n                }\n\n                if (match = /Series60\\/([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (match = /Nokia([^\\/;]+)[\\/|;]/.exec(ua)) {\n                    if (match[1] !== 'Browser') {\n                        this.device.manufacturer = 'Nokia';\n                        this.device.model = match[1];\n                        this.device.identified = true;\n                    }\n                }\n\n                if (match = /Vertu([^\\/;]+)[\\/|;]/.exec(ua)) {\n                    this.device.manufacturer = 'Vertu';\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n\n                if (match = /Symbian; U; ([^;]+); [a-z][a-z]\\-[a-z][a-z]/i.exec(ua)) {\n                    this.device.manufacturer = 'Nokia';\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n\n                if (match = /Samsung\\/([^;]*);/.exec(ua)) {\n                    this.device.manufacturer = STRINGS_SAMSUNG;\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      S40\n             */\n\n            if (ua.match('Series40')) {\n                this.os.name = 'Series40';\n\n                if (match = /Nokia([^\\/]+)\\//.exec(ua)) {\n                    this.device.manufacturer = 'Nokia';\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      MeeGo\n             */\n\n            if (ua.match('MeeGo')) {\n                this.os.name = 'MeeGo';\n                this.device.type = 'mobile';\n\n                if (match = /Nokia([^\\)]+)\\)/.exec(ua)) {\n                    this.device.manufacturer = 'Nokia';\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n            }\n\n            /****************************************************\n             *      Maemo\n             */\n\n            if (ua.match('Maemo')) {\n                this.os.name = 'Maemo';\n                this.device.type = 'mobile';\n\n                if (match = /(N[0-9]+)/.exec(ua)) {\n                    this.device.manufacturer = 'Nokia';\n                    this.device.model = match[1];\n                    this.device.identified = true;\n                }\n            }\n\n            /****************************************************\n             *      Tizen\n             */\n\n            if (ua.match('Tizen')) {\n                this.os.name = 'Tizen';\n\n                if (match = /Tizen[\\/ ]([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.type = 'mobile';\n\n                if (match = /\\(([^;]+); ([^\\/]+)\\//.exec(ua)) {\n                    if (match[1] !== 'Linux') {\n                        this.device.manufacturer = match[1];\n                        this.device.model = match[2];\n\n                        if (typeof TIZEN_MODELS[this.device.manufacturer] !== 'undefined' && typeof TIZEN_MODELS[this.device.manufacturer][this.device.model] !== 'undefined') {\n                            var manufacturer = this.device.manufacturer;\n                            var model = cleanupModel(this.device.model);\n\n                            this.device.manufacturer = TIZEN_MODELS[manufacturer][model][0];\n                            this.device.model = TIZEN_MODELS[manufacturer][model][1];\n                            this.device.identified = true;\n                        }\n                    }\n                }\n            }\n\n            /****************************************************\n             *      Bada\n             */\n\n            if (ua.match('[b|B]ada')) {\n                this.os.name = 'Bada';\n\n                if (match = /[b|B]ada\\/([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.type = 'mobile';\n\n                if (match = /\\(([^;]+); ([^\\/]+)\\//.exec(ua)) {\n                    this.device.manufacturer = match[1];\n                    this.device.model = cleanupModel(match[2]);\n                }\n\n                if (typeof BADA_MODELS[this.device.manufacturer] !== 'undefined' && typeof BADA_MODELS[this.device.manufacturer][this.device.model] !== 'undefined') {\n                    var manufacturer = this.device.manufacturer;\n                    var model = cleanupModel(this.device.model);\n\n                    this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n                    this.device.model = BADA_MODELS[manufacturer][model][1];\n                    this.device.identified = true;\n                }\n            }\n\n            /****************************************************\n             *      Brew\n             */\n\n            if (ua.match(/BREW/i) || ua.match('BMP; U')) {\n                this.os.name = 'Brew';\n                this.device.type = 'mobile';\n\n                if (match = /BREW; U; ([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                } else if (match = /;BREW\\/([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n\n                if (match = /\\(([^;]+);U;REX\\/[^;]+;BREW\\/[^;]+;(?:.*;)?[0-9]+\\*[0-9]+;CTC\\/2.0\\)/.exec(ua)) {\n                    this.device.model = match[1];\n                }\n\n                if (this.device.model) {\n                    var model = cleanupModel(this.device.model);\n\n                    if (typeof BREW_MODELS[model] !== 'undefined') {\n                        this.device.manufacturer = BREW_MODELS[model][0];\n                        this.device.model = BREW_MODELS[model][1];\n                        this.device.identified = true;\n                    }\n                }\n            }\n\n            /****************************************************\n             *      MTK\n             */\n\n            if (ua.match(/\\(MTK;/)) {\n                this.os.name = 'MTK';\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      CrOS\n             */\n\n            if (ua.match('CrOS')) {\n                this.os.name = 'Chrome OS';\n                this.device.type = 'desktop';\n            }\n\n            /****************************************************\n             *      Joli OS\n             */\n\n            if (ua.match('Joli OS')) {\n                this.os.name = 'Joli OS';\n                this.device.type = 'desktop';\n\n                if (match = /Joli OS\\/([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Haiku\n             */\n\n            if (ua.match('Haiku')) {\n                this.os.name = 'Haiku';\n                this.device.type = 'desktop';\n            }\n\n            /****************************************************\n             *      QNX\n             */\n\n            if (ua.match('QNX')) {\n                this.os.name = 'QNX';\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      OS/2 Warp\n             */\n\n            if (ua.match('OS\\/2; Warp')) {\n                this.os.name = 'OS/2 Warp';\n                this.device.type = 'desktop';\n\n                if (match = /OS\\/2; Warp ([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Grid OS\n             */\n\n            if (ua.match('Grid OS')) {\n                this.os.name = 'Grid OS';\n                this.device.type = 'tablet';\n\n                if (match = /Grid OS ([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      AmigaOS\n             */\n\n            if (ua.match(/AmigaOS/i)) {\n                this.os.name = 'AmigaOS';\n                this.device.type = 'desktop';\n\n                if (match = /AmigaOS ([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n            }\n\n            /****************************************************\n             *      MorphOS\n             */\n\n            if (ua.match(/MorphOS/i)) {\n                this.os.name = 'MorphOS';\n                this.device.type = 'desktop';\n\n                if (match = /MorphOS ([0-9.]*)/i.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n            }\n\n            /****************************************************\n             *      Kindle\n             */\n\n            if (ua.match('Kindle') && !ua.match('Fire')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Amazon';\n                this.device.model = 'Kindle';\n                this.device.type = 'ereader';\n\n                if (ua.match('Kindle\\/2.0')) this.device.model = 'Kindle 2';\n                if (ua.match('Kindle\\/3.0')) this.device.model = 'Kindle 3 or later';\n\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      NOOK\n             */\n\n            if (ua.match('nook browser')) {\n                this.os.name = 'Android';\n\n                this.device.manufacturer = 'Barnes & Noble';\n                this.device.model = 'NOOK';\n                this.device.type = 'ereader';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Bookeen\n             */\n\n            if (ua.match('bookeen\\/cybook')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Bookeen';\n                this.device.model = 'Cybook';\n                this.device.type = 'ereader';\n\n                if (ua.match('Orizon')) {\n                    this.device.model = 'Cybook Orizon';\n                }\n\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Sony Reader\n             */\n\n            if (ua.match('EBRD1101')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Sony';\n                this.device.model = 'Reader';\n                this.device.type = 'ereader';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      iRiver\n             */\n\n            if (ua.match('Iriver ;')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'iRiver';\n                this.device.model = 'Story';\n                this.device.type = 'ereader';\n\n                if (ua.match('EB07')) {\n                    this.device.model = 'Story HD EB07';\n                }\n\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Nintendo\n             *\n             *      Opera/9.30 (Nintendo Wii; U; ; 3642; en)\n             *      Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)\n             *      Opera/9.50 (Nintendo DSi; Opera/507; U; en-US)\n             *      Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7455.US\n             *      Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7455.EU\n             */\n\n            if (ua.match('Nintendo Wii')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Nintendo';\n                this.device.model = 'Wii';\n                this.device.type = 'gaming';\n                this.device.identified = true;\n            }\n\n            if (ua.match('Nintendo DSi')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Nintendo';\n                this.device.model = 'DSi';\n                this.device.type = 'gaming';\n                this.device.identified = true;\n            }\n\n            if (ua.match('Nintendo 3DS')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Nintendo';\n                this.device.model = '3DS';\n                this.device.type = 'gaming';\n\n                if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.identified = true;\n            }\n\n\n            if (ua.match('PlayStation Portable')) {\n                this.os.name = '';\n\n                this.device.manufacturer = 'Sony';\n                this.device.model = 'Playstation Portable';\n                this.device.type = 'gaming';\n                this.device.identified = true;\n            }\n\n            if (ua.match('PlayStation Vita')) {\n                this.os.name = '';\n\n                if (match = /PlayStation Vita ([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.manufacturer = 'Sony';\n                this.device.model = 'PlayStation Vita';\n                this.device.type = 'gaming';\n                this.device.identified = true;\n            }\n\n            if (ua.match(/PlayStation 3/i)) {\n                this.os.name = '';\n\n                if (match = /PLAYSTATION 3;? ([0-9.]*)/.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.device.manufacturer = 'Sony';\n                this.device.model = 'Playstation 3';\n                this.device.type = 'gaming';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Panasonic Smart Viera\n             *\n             *      Mozilla/5.0 (FreeBSD; U; Viera; ja-JP) AppleWebKit/535.1 (KHTML, like Gecko) Viera/1.2.4 Chrome/14.0.835.202 Safari/535.1\n             */\n\n            if (ua.match('Viera')) {\n                this.os.name = '';\n                this.device.manufacturer = 'Panasonic';\n                this.device.model = 'Smart Viera';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n\n            /****************************************************\n             *      Sharp AQUOS TV\n             *\n             *      Mozilla/5.0 (DTV) AppleWebKit/531.2  (KHTML, like Gecko) AQUOSBrowser/1.0 (US00DTV;V;0001;0001)\n             *      Mozilla/5.0 (DTV) AppleWebKit/531.2+ (KHTML, like Gecko) Espial/6.0.4 AQUOSBrowser/1.0 (CH00DTV;V;0001;0001)\n             *      Opera/9.80 (Linux armv6l; U; en) Presto/2.8.115 Version/11.10 AQUOS-AS/1.0 LC-40LE835X\n             */\n\n            if (ua.match('AQUOSBrowser') || ua.match('AQUOS-AS')) {\n                this.os.name = '';\n                this.device.manufacturer = STRINGS_SHARP;\n                this.device.model = 'Aquos TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n\n            /****************************************************\n             *      Samsung Smart TV\n             *\n             *      Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV; Maple2012) AppleWebKit/534.7 (KHTML, like Gecko) SmartTV Safari/534.7\n             *      Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+\n             */\n\n            if (ua.match('SMART-TV')) {\n                this.os.name = '';\n                this.device.manufacturer = STRINGS_SAMSUNG;\n                this.device.model = 'Smart TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n\n                if (match = /Maple([0-9]*)/.exec(ua)) {\n                    this.device.model += ' ' + match[1];\n                }\n            }\n\n            /****************************************************\n             *      Sony Internet TV\n             *\n             *      Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) KDL-46EX640; CC/USA; en) Presto/2.8.115 Version/11.10\n             *      Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) KDL-40EX640; CC/USA; en) Presto/2.10.250 Version/11.60\n             *      Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) N/A; CC/USA; en) Presto/2.8.115 Version/11.10\n             *      Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) ; CC/JPN; en) Presto/2.9.167 Version/11.50\n             *      Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) AZ2CVT2; CC/CAN; en) Presto/2.7.61 Version/11.00\n             *      Opera/9.80 (Linux armv6l; Opera TV Store/4207; U; (SonyBDP/BDV11); en) Presto/2.9.167 Version/11.50\n             *      Opera/9.80 (Linux armv6l ; U; (SonyBDP/BDV11); en) Presto/2.6.33 Version/10.60\n             *      Opera/9.80 (Linux armv6l; U; (SonyBDP/BDV11); en) Presto/2.8.115 Version/11.10\n             */\n\n            if (ua.match('SonyDTV|SonyBDP|SonyCEBrowser')) {\n                this.os.name = '';\n                this.device.manufacturer = 'Sony';\n                this.device.model = 'Internet TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Philips Net TV\n             *\n             *      Opera/9.70 (Linux armv6l ; U; CE-HTML/1.0 NETTV/2.0.2; en) Presto/2.2.1\n             *      Opera/9.80 (Linux armv6l ; U; CE-HTML/1.0 NETTV/3.0.1;; en) Presto/2.6.33 Version/10.60\n             *      Opera/9.80 (Linux mips; U; CE-HTML/1.0 NETTV/3.0.1; PHILIPS-AVM-2012; en) Presto/2.9.167 Version/11.50\n             *      Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70\n             *      Opera/9.80 (Linux i686; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.9.167 Version/11.50\n             */\n\n            if (ua.match('NETTV\\/')) {\n                this.os.name = '';\n                this.device.manufacturer = 'Philips';\n                this.device.model = 'Net TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      LG NetCast TV\n             *\n             *      Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ LG Browser/5.00.00(+mouse+3D+SCREEN+TUNER; LGE; GLOBAL-PLAT4; 03.09.22; 0x00000001;); LG NetCast.TV-2012\n             *      Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ LG Browser/5.00.00(+SCREEN+TUNER; LGE; GLOBAL-PLAT4; 01.00.00; 0x00000001;); LG NetCast.TV-2012\n             *      Mozilla/5.0 (DirectFB; U; Linux armv6l; en) AppleWebKit/531.2  (KHTML, like Gecko) Safari/531.2  LG Browser/4.1.4( BDP; LGE; Media/BD660; 6970; abc;); LG NetCast.Media-2011\n             *      Mozilla/5.0 (DirectFB; U; Linux 7631; en) AppleWebKit/531.2  (KHTML, like Gecko) Safari/531.2  LG Browser/4.1.4( NO_NUM; LGE; Media/SP520; ST.3.97.409.F; 0x00000001;); LG NetCast.Media-2011\n             *      Mozilla/5.0 (DirectFB; U; Linux 7630; en) AppleWebKit/531.2  (KHTML, like Gecko) Safari/531.2  LG Browser/4.1.4( 3D BDP NO_NUM; LGE; Media/ST600; LG NetCast.Media-2011\n             *      (LGSmartTV/1.0) AppleWebKit/534.23 OBIGO-T10/2.0\n             */\n\n            if (match = /LG NetCast\\.(?:TV|Media)-([0-9]*)/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = STRINGS_LG;\n                this.device.model = 'NetCast TV ' + match[1];\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            if (match = /LGSmartTV/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = STRINGS_LG;\n                this.device.model = 'Smart TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Toshiba Smart TV\n             *\n             *      Mozilla/5.0 (Linux mipsel; U; HbbTV/1.1.1 (; TOSHIBA; DTV_RL953; 56.7.66.7; t12; ) ; ToshibaTP/1.3.0 (+VIDEO_MP4+VIDEO_X_MS_ASF+AUDIO_MPEG+AUDIO_MP4+DRM+NATIVELAUNCH) ; en) AppleWebKit/534.1 (KHTML, like Gecko)\n             *      Mozilla/5.0 (DTV; TSBNetTV/T32013713.0203.7DD; TVwithVideoPlayer; like Gecko) NetFront/4.1 DTVNetBrowser/2.2 (000039;T32013713;0203;7DD) InettvBrowser/2.2 (000039;T32013713;0203;7DD)\n             *      Mozilla/5.0 (Linux mipsel; U; HbbTV/1.1.1 (; TOSHIBA; 40PX200; 0.7.3.0.; t12; ) ; Toshiba_TP/1.3.0 (+VIDEO_MP4+AUDIO_MPEG+AUDIO_MP4+VIDEO_X_MS_ASF+OFFLINEAPP) ; en) AppleWebKit/534.1 (KHTML, like Gec\n             */\n\n            if (ua.match('Toshiba_?TP\\/') || ua.match('TSBNetTV\\/')) {\n                this.os.name = '';\n                this.device.manufacturer = 'Toshiba';\n                this.device.model = 'Smart TV';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      MachBlue XT\n             */\n\n            if (match = /mbxtWebKit\\/([0-9.]*)/.exec(ua)) {\n                this.os.name = '';\n                this.browser.name = 'MachBlue XT'\n                this.browser.version = new Version({\n                    value: match[1],\n                    details: 2\n                });\n                this.device.type = 'television';\n            }\n\n            /****************************************************\n             *      ADB\n             */\n\n            if (match = /\\(ADB; ([^\\)]+)\\)/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = 'ADB';\n                this.device.model = (match[1] !== 'Unknown' ? match[1].replace('ADB', '') + ' ' : '') + 'IPTV receiver';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      MStar\n             */\n\n            if (ua.match(/Mstar;OWB/)) {\n                this.os.name = '';\n                this.device.manufacturer = 'MStar';\n                this.device.model = 'PVR';\n                this.device.type = 'television';\n                this.device.identified = true;\n\n                this.browser.name = 'Origyn Web Browser';\n            }\n\n            /****************************************************\n             *      TechniSat\n             */\n\n            if (match = /\\TechniSat ([^;]+);/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = 'TechniSat';\n                this.device.model = match[1];\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Technicolor\n             */\n\n            if (match = /\\Technicolor_([^;]+);/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = 'Technicolor';\n                this.device.model = match[1];\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Winbox Evo2\n             */\n\n            if (match = /Winbox Evo2/.exec(ua)) {\n                this.os.name = '';\n                this.device.manufacturer = 'Winbox';\n                this.device.model = 'Evo2';\n                this.device.type = 'television';\n                this.device.identified = true;\n            }\n\n            /****************************************************\n             *      Roku\n             */\n\n            if (match = /^Roku\\/DVP-([0-9]+)/.exec(ua)) {\n                this.device.manufacturer = 'Roku';\n                this.device.type = 'television';\n\n                switch (match[1]) {\n                    case '2000':\n                        this.device.model = 'HD';\n                        break;\n                    case '2050':\n                        this.device.model = 'XD';\n                        break;\n                    case '2100':\n                        this.device.model = 'XDS';\n                        break;\n                    case '2400':\n                        this.device.model = 'LT';\n                        break;\n                    case '3000':\n                        this.device.model = '2 HD';\n                        break;\n                    case '3050':\n                        this.device.model = '2 XD';\n                        break;\n                    case '3100':\n                        this.device.model = '2 XS';\n                        break;\n                }\n\n                this.device.identified = true;\n            }\n\n            if (match = /HbbTV\\/1.1.1 \\([^;]*;\\s*([^;]*)\\s*;\\s*([^;]*)\\s*;/.exec(ua)) {\n                var vendorName = match[1].trim();\n                var modelName = match[2].trim();\n\n                if (!this.device.manufacturer && vendorName !== '' && vendorName !== 'vendorName') {\n                    switch (vendorName) {\n                        case 'LGE':\n                            this.device.manufacturer = 'LG';\n                            break;\n                        case 'TOSHIBA':\n                            this.device.manufacturer = 'Toshiba';\n                            break;\n                        case 'smart':\n                            this.device.manufacturer = 'Smart';\n                            break;\n                        case 'tv2n':\n                            this.device.manufacturer = 'TV2N';\n                            break;\n                        default:\n                            this.device.manufacturer = vendorName;\n                    }\n\n                    if (!this.device.model && modelName !== '' && modelName !== 'modelName') {\n                        switch (modelName) {\n                            case 'GLOBAL_PLAT3':\n                                this.device.model = 'NetCast TV';\n                                break;\n                            case 'SmartTV2012':\n                                this.device.model = 'Smart TV 2012';\n                                break;\n                            case 'videoweb':\n                                this.device.model = 'Videoweb';\n                                break;\n                            default:\n                                this.device.model = modelName;\n                        }\n\n                        if (vendorName === 'Humax') {\n                            this.device.model = this.device.model.toUpperCase();\n                        }\n\n                        this.device.identified = true;\n                        this.os.name = '';\n                    }\n                }\n\n                this.device.type = 'television';\n            }\n\n            /****************************************************\n             *      Detect type based on common identifiers\n             */\n\n            if (ua.match('InettvBrowser')) {\n                this.device.type = 'television';\n            }\n\n            if (ua.match('MIDP')) {\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      Try to detect any devices based on common\n             *      locations of model ids\n             */\n\n            if (!this.device.model && !this.device.manufacturer) {\n                var candidates = [];\n\n                if (!ua.match(/^(Mozilla|Opera)/)) if (match = /^(?:MQQBrowser\\/[0-9\\.]+\\/)?([^\\s]+)/.exec(ua)) {\n                    match[1] = match[1].replace(/_TD$/, '');\n                    match[1] = match[1].replace(/_CMCC$/, '');\n                    match[1] = match[1].replace(/[_ ]Mozilla$/, '');\n                    match[1] = match[1].replace(/ Linux$/, '');\n                    match[1] = match[1].replace(/ Opera$/, '');\n                    match[1] = match[1].replace(/\\/[0-9].*$/, '');\n\n                    candidates.push(match[1]);\n                }\n\n                if (match = /[0-9]+x[0-9]+; ([^;]+)/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /[0-9]+X[0-9]+ ([^;\\/\\(\\)]+)/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /Windows NT 5.1; ([^;]+); Windows Phone/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /\\) PPC; (?:[0-9]+x[0-9]+; )?([^;\\/\\(\\)]+)/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /\\(([^;]+); U; Windows Mobile/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /Vodafone\\/1.0\\/([^\\/]+)/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                if (match = /\\ ([^\\s]+)$/.exec(ua)) {\n                    candidates.push(match[1]);\n                }\n\n                for (var i = 0; i < candidates.length; i++) {\n\n                    if (!this.device.model && !this.device.manufacturer) {\n                        var model = cleanupModel(candidates[i]);\n                        var result = false;\n\n                        if (this.os.name === 'Android') {\n                            if (typeof ANDROID_MODELS[model] !== 'undefined') {\n                                this.device.manufacturer = ANDROID_MODELS[model][0];\n                                this.device.model = ANDROID_MODELS[model][1];\n                                if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n                                this.device.identified = true;\n\n                                result = true;\n                            }\n                        }\n\n                        if (!this.os.name || this.os.name === 'Windows' || this.os.name === 'Windows Mobile' || this.os.name === 'Windows CE') {\n                            if (typeof WINDOWS_MOBILE_MODELS[model] !== 'undefined') {\n                                this.device.manufacturer = WINDOWS_MOBILE_MODELS[model][0];\n                                this.device.model = WINDOWS_MOBILE_MODELS[model][1];\n                                this.device.type = 'mobile';\n                                this.device.identified = true;\n\n                                if (this.os.name !== 'Windows Mobile') {\n                                    this.os.name = 'Windows Mobile';\n                                    this.os.version = null;\n                                }\n\n                                result = true;\n                            }\n                        }\n                    }\n\n                    if (!result) {\n                        if (match = /^GIONEE-([^\\s]+)/.exec(candidates[i])) {\n                            this.device.manufacturer = 'Gionee';\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^HTC_?([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_HTC;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^HUAWEI-([^\\/]*)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_HUAWEI;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /(?:^|\\()LGE?(?:\\/|-|_|\\s)([^\\s]*)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_LG;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^MOT-([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_MOTOROLA;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^Motorola_([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_MOTOROLA;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^Nokia([^\\/]+)(?:\\/|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = 'Nokia';\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n\n                            if (!this.os.name) {\n                                this.os.name = 'Series40';\n                            }\n                        }\n\n                        if (match = /^SonyEricsson([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_SONY_ERICSSON;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n                            this.device.identified = true;\n                        }\n\n                        if (match = /^SAMSUNG-([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n                            this.device.manufacturer = STRINGS_SAMSUNG;\n                            this.device.model = cleanupModel(match[1]);\n                            this.device.type = 'mobile';\n\n                            if (this.os.name === 'Bada') {\n                                var manufacturer = 'SAMSUNG';\n                                var model = cleanupModel(this.device.model);\n\n                                if (typeof BADA_MODELS[manufacturer] !== 'undefined' && typeof BADA_MODELS[manufacturer][model] !== 'undefined') {\n                                    this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n                                    this.device.model = BADA_MODELS[manufacturer][model][1];\n                                    this.device.identified = true;\n                                }\n                            } else if (match = /Jasmine\\/([0-9.]*)/.exec(ua)) {\n                                var version = match[1];\n                                var manufacturer = 'SAMSUNG';\n                                var model = cleanupModel(this.device.model);\n\n                                if (typeof TOUCHWIZ_MODELS[manufacturer] !== 'undefined' && typeof TOUCHWIZ_MODELS[manufacturer][model] !== 'undefined') {\n                                    this.device.manufacturer = TOUCHWIZ_MODELS[manufacturer][model][0];\n                                    this.device.model = TOUCHWIZ_MODELS[manufacturer][model][1];\n                                    this.device.identified = true;\n\n                                    this.os.name = 'Touchwiz';\n                                    this.os.version = new Version({\n                                        value: '2.0'\n                                    });\n                                }\n                            } else if (match = /Dolfin\\/([0-9.]*)/.exec(ua)) {\n                                var version = match[1];\n                                var manufacturer = 'SAMSUNG';\n                                var model = cleanupModel(this.device.model);\n\n                                if (typeof BADA_MODELS[manufacturer] !== 'undefined' && typeof BADA_MODELS[manufacturer][model] !== 'undefined') {\n                                    this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n                                    this.device.model = BADA_MODELS[manufacturer][model][1];\n                                    this.device.identified = true;\n\n                                    this.os.name = 'Bada';\n\n                                    switch (version) {\n                                        case '2.0':\n                                            this.os.version = new Version({\n                                                value: '1.0'\n                                            });\n                                            break;\n                                        case '2.2':\n                                            this.os.version = new Version({\n                                                value: '1.2'\n                                            });\n                                            break;\n                                        case '3.0':\n                                            this.os.version = new Version({\n                                                value: '2.0'\n                                            });\n                                            break;\n                                    }\n                                }\n\n                                if (typeof TOUCHWIZ_MODELS[manufacturer] !== 'undefined' && typeof TOUCHWIZ_MODELS[manufacturer][model] !== 'undefined') {\n                                    this.device.manufacturer = TOUCHWIZ_MODELS[manufacturer][model][0];\n                                    this.device.model = TOUCHWIZ_MODELS[manufacturer][model][1];\n                                    this.device.identified = true;\n\n                                    this.os.name = 'Touchwiz';\n\n                                    switch (version) {\n                                        case '1.0':\n                                            this.os.version = new Version({\n                                                value: '1.0'\n                                            });\n                                            break;\n                                        case '1.5':\n                                            this.os.version = new Version({\n                                                value: '2.0'\n                                            });\n                                            break;\n                                        case '2.0':\n                                            this.os.version = new Version({\n                                                value: '3.0'\n                                            });\n                                            break;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n\n            if (match = /\\((?:LG[-|\\/])(.*) (?:Browser\\/)?AppleWebkit/.exec(ua)) {\n                this.device.manufacturer = STRINGS_LG;\n                this.device.model = match[1];\n                this.device.type = 'mobile';\n                this.device.identified = true;\n            }\n\n            if (match = /^Mozilla\\/5.0 \\((?:Nokia|NOKIA)(?:\\s?)([^\\)]+)\\)UC AppleWebkit\\(like Gecko\\) Safari\\/530$/.exec(ua)) {\n                this.device.manufacturer = 'Nokia';\n                this.device.model = match[1];\n                this.device.type = 'mobile';\n                this.device.identified = true;\n\n                this.os.name = 'Series60';\n            }\n\n\n\n            /****************************************************\n             *      Safari\n             */\n\n            if (ua.match('Safari')) {\n                if (this.os.name === 'iOS') {\n                    this.browser.stock = true;\n                    this.browser.hidden = true;\n                    this.browser.name = 'Safari';\n                    this.browser.version = null;\n                }\n\n\n\n                if (this.os.name === 'Mac OS X' || this.os.name === 'Windows') {\n                    this.browser.name = 'Safari';\n                    this.browser.stock = this.os.name === 'Mac OS X';\n\n                    if (match = /Version\\/([0-9\\.]+)/.exec(ua)) {\n                        this.browser.version = new Version({\n                            value: match[1]\n                        });\n                    }\n\n                    if (ua.match(/AppleWebKit\\/[0-9\\.]+\\+/)) {\n                        this.browser.name = 'WebKit Nightly Build';\n                        this.browser.version = null;\n                    }\n                }\n            }\n\n            /****************************************************\n             *      Internet Explorer\n             */\n\n            if (ua.match('MSIE')) {\n                this.browser.name = 'Internet Explorer';\n\n                if (ua.match('IEMobile') || ua.match('Windows CE') || ua.match('Windows Phone') || ua.match('WP7')) {\n                    this.browser.name = 'Mobile Internet Explorer';\n                }\n\n                if (match = /MSIE ([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Opera\n             */\n\n            if (ua.match(/Opera/i)) {\n                this.browser.stock = false;\n                this.browser.name = 'Opera';\n\n                if (match = /Opera[\\/| ]([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n                    if (parseFloat(match[1]) >= 10) {\n                        this.browser.version = new Version({\n                            value: match[1]\n                        });\n                    } else {\n                        this.browser.version = null;\n                    }\n                }\n\n                if (this.browser.version && ua.match('Edition Labs')) {\n                    this.browser.version.type = 'alpha';\n                    this.browser.channel = 'Labs';\n                }\n\n                if (this.browser.version && ua.match('Edition Next')) {\n                    this.browser.version.type = 'alpha';\n                    this.browser.channel = 'Next';\n                }\n\n                if (ua.match('Opera Tablet')) {\n                    this.browser.name = 'Opera Mobile';\n                    this.device.type = 'tablet';\n                }\n\n                if (ua.match('Opera Mobi')) {\n                    this.browser.name = 'Opera Mobile';\n                    this.device.type = 'mobile';\n                }\n\n                if (match = /Opera Mini;/.exec(ua)) {\n                    this.browser.name = 'Opera Mini';\n                    this.browser.version = null;\n                    this.browser.mode = 'proxy';\n                    this.device.type = 'mobile';\n                }\n\n                if (match = /Opera Mini\\/(?:att\\/)?([0-9.]*)/.exec(ua)) {\n                    this.browser.name = 'Opera Mini';\n                    this.browser.version = new Version({\n                        value: match[1],\n                        details: -1\n                    });\n                    this.browser.mode = 'proxy';\n                    this.device.type = 'mobile';\n                }\n\n                if (this.browser.name === 'Opera' && this.device.type === 'mobile') {\n                    this.browser.name = 'Opera Mobile';\n\n                    if (ua.match(/BER/)) {\n                        this.browser.name = 'Opera Mini';\n                        this.browser.version = null;\n                    }\n                }\n\n                if (ua.match('InettvBrowser')) {\n                    this.device.type = 'television';\n                }\n\n                if (ua.match('Opera TV') || ua.match('Opera-TV')) {\n                    this.browser.name = 'Opera';\n                    this.device.type = 'television';\n                }\n\n                if (ua.match('Linux zbov')) {\n                    this.browser.name = 'Opera Mobile';\n                    this.browser.mode = 'desktop';\n\n                    this.device.type = 'mobile';\n\n                    this.os.name = null;\n                    this.os.version = null;\n                }\n\n                if (ua.match('Linux zvav')) {\n                    this.browser.name = 'Opera Mini';\n                    this.browser.version = null;\n                    this.browser.mode = 'desktop';\n\n                    this.device.type = 'mobile';\n\n                    this.os.name = null;\n                    this.os.version = null;\n                }\n            }\n\n            /****************************************************\n             *      Firefox\n             */\n\n            if (ua.match('Firefox')) {\n                this.browser.stock = false;\n                this.browser.name = 'Firefox';\n\n                if (match = /Firefox\\/([0-9ab.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (this.browser.version.type === 'alpha') {\n                    this.browser.channel = 'Aurora';\n                }\n\n                if (this.browser.version.type === 'beta') {\n                    this.browser.channel = 'Beta';\n                }\n\n                if (ua.match('Fennec')) {\n                    this.device.type = 'mobile';\n                }\n\n                if (ua.match('Mobile; rv')) {\n                    this.device.type = 'mobile';\n                }\n\n                if (ua.match('Tablet; rv')) {\n                    this.device.type = 'tablet';\n                }\n\n                if (this.device.type === 'mobile' || this.device.type === 'tablet') {\n                    this.browser.name = 'Firefox Mobile';\n                }\n            }\n\n            if (ua.match('Namoroka')) {\n                this.browser.stock = false;\n                this.browser.name = 'Firefox';\n\n                if (match = /Namoroka\\/([0-9ab.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.browser.channel = 'Namoroka';\n            }\n\n            if (ua.match('Shiretoko')) {\n                this.browser.stock = false;\n                this.browser.name = 'Firefox';\n\n                if (match = /Shiretoko\\/([0-9ab.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.browser.channel = 'Shiretoko';\n            }\n\n            if (ua.match('Minefield')) {\n                this.browser.stock = false;\n                this.browser.name = 'Firefox';\n\n                if (match = /Minefield\\/([0-9ab.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                this.browser.channel = 'Minefield';\n            }\n\n            if (ua.match('Firebird')) {\n                this.browser.stock = false;\n                this.browser.name = 'Firebird';\n\n                if (match = /Firebird\\/([0-9ab.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      SeaMonkey\n             */\n\n            if (ua.match('SeaMonkey')) {\n                this.browser.stock = false;\n                this.browser.name = 'SeaMonkey';\n\n                if (match = /SeaMonkey\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Netscape\n             */\n\n            if (ua.match('Netscape')) {\n                this.browser.stock = false;\n                this.browser.name = 'Netscape';\n\n                if (match = /Netscape[0-9]?\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Konqueror\n             */\n\n            if (ua.match('[k|K]onqueror/')) {\n                this.browser.name = 'Konqueror';\n\n                if (match = /[k|K]onqueror\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Chrome\n             */\n\n            if (match = /(?:Chrome|CrMo|CriOS)\\/([0-9.]*)/.exec(ua)) {\n                this.browser.stock = false;\n                this.browser.name = 'Chrome';\n                this.browser.version = new Version({\n                    value: match[1]\n                });\n\n                if (this.os.name === 'Android') {\n                    switch (match[1].split('.', 3).join('.')) {\n                        case '16.0.912':\n                            this.browser.channel = 'Beta';\n                            break;\n                        case '18.0.1025':\n                            this.browser.version.details = 1;\n                            break;\n                        default:\n                            this.browser.channel = 'Nightly';\n                            break;\n                    }\n                } else {\n                    switch (match[1].split('.', 3).join('.')) {\n                        case '0.2.149':\n                        case '0.3.154':\n                        case '0.4.154':\n                        case '1.0.154':\n                        case '2.0.172':\n                        case '3.0.195':\n                        case '4.0.249':\n                        case '4.1.249':\n                        case '5.0.375':\n                        case '6.0.472':\n                        case '7.0.517':\n                        case '8.0.552':\n                        case '9.0.597':\n                        case '10.0.648':\n                        case '11.0.696':\n                        case '12.0.742':\n                        case '13.0.782':\n                        case '14.0.835':\n                        case '15.0.874':\n                        case '16.0.912':\n                        case '17.0.963':\n                        case '18.0.1025':\n                        case '19.0.1084':\n                        case '20.0.1132':\n                        case '21.0.1180':\n                            if (this.browser.version.minor === 0) this.browser.version.details = 1;\n                            else this.browser.version.details = 2;\n\n                            break;\n                        default:\n                            this.browser.channel = 'Nightly';\n                            break;\n                    }\n                }\n            }\n\n            /****************************************************\n             *      Chrome Frame\n             */\n\n            if (ua.match('chromeframe')) {\n                this.browser.stock = false;\n                this.browser.name = 'Chrome Frame';\n\n                if (match = /chromeframe\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Chromium\n             */\n\n            if (ua.match('Chromium')) {\n                this.browser.stock = false;\n                this.browser.channel = '';\n                this.browser.name = 'Chromium';\n\n                if (match = /Chromium\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      BrowserNG\n             */\n\n            if (ua.match('BrowserNG')) {\n                this.browser.name = 'Nokia Browser';\n\n                if (match = /BrowserNG\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1],\n                        details: 3,\n                        builds: false\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Nokia Browser\n             */\n\n            if (ua.match('NokiaBrowser')) {\n                this.browser.name = 'Nokia Browser';\n\n                if (match = /NokiaBrowser\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1],\n                        details: 3\n                    });\n                }\n            }\n\n            /****************************************************\n             *      MicroB\n             */\n\n            if (ua.match('Maemo[ |_]Browser')) {\n                this.browser.name = 'MicroB';\n\n                if (match = /Maemo[ |_]Browser[ |_]([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1],\n                        details: 3\n                    });\n                }\n            }\n\n\n            /****************************************************\n             *      NetFront\n             */\n\n            if (ua.match('NetFront')) {\n                this.browser.name = 'NetFront';\n                this.device.type = 'mobile';\n\n                if (match = /NetFront\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (ua.match('InettvBrowser')) {\n                    this.device.type = 'television';\n                }\n            }\n\n            /****************************************************\n             *      Silk\n             */\n\n            if (ua.match('Silk')) {\n                if (ua.match('Silk-Accelerated')) {\n                    this.browser.name = 'Silk';\n\n                    if (match = /Silk\\/([0-9.]*)/.exec(ua)) {\n                        this.browser.version = new Version({\n                            value: match[1],\n                            details: 2\n                        });\n                    }\n\n                    this.device.manufacturer = 'Amazon';\n                    this.device.model = 'Kindle Fire';\n                    this.device.type = 'tablet';\n                    this.device.identified = true;\n\n                    if (this.os.name !== 'Android') {\n                        this.os.name = 'Android';\n                        this.os.version = null;\n                    }\n                }\n            }\n\n            /****************************************************\n             *      Dolfin\n             */\n\n            if (ua.match('Dolfin')) {\n                this.browser.name = 'Dolfin';\n\n                if (match = /Dolfin\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n\n            /****************************************************\n             *      Iris\n             */\n\n            if (ua.match('Iris')) {\n                this.browser.name = 'Iris';\n\n                this.device.type = 'mobile';\n                this.device.model = null;\n                this.device.manufacturer = null;\n\n                this.os.name = 'Windows Mobile';\n                this.os.version = null;\n\n                if (match = /Iris\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (match = / WM([0-9]) /.exec(ua)) {\n                    this.os.version = new Version({\n                        value: match[1] + '.0'\n                    });\n                } else {\n                    this.browser.mode = 'desktop';\n                }\n            }\n\n            /****************************************************\n             *      Jasmine\n             */\n\n            if (ua.match('Jasmine')) {\n                this.browser.name = 'Jasmine';\n\n                if (match = /Jasmine\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Boxee\n             */\n\n            if (ua.match('Boxee')) {\n                this.browser.name = 'Boxee';\n                this.device.type = 'television';\n\n                if (match = /Boxee\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Espial\n             */\n\n            if (ua.match('Espial')) {\n                this.browser.name = 'Espial';\n\n                this.os.name = '';\n                this.os.version = null;\n\n                if (this.device.type !== 'television') {\n                    this.device.type = 'television';\n                    this.device.model = null;\n                    this.device.manufacturer = null;\n                }\n\n                if (match = /Espial\\/([0-9.]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      ANT Galio\n             */\n            if (match = /ANTGalio\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'ANT Galio';\n                this.browser.version = new Version({\n                    value: match[1],\n                    details: 3\n                });\n                this.device.type = 'television';\n            }\n\n            /****************************************************\n             *      NetFront NX\n             */\n            if (match = /NX\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'NetFront NX';\n                this.browser.version = new Version({\n                    value: match[1],\n                    details: 2\n                });\n                if (match = /DTV/i.exec(ua)) {\n                    this.device.type = 'television';\n                } else if (match = /mobile/i.exec(ua)) {\n                    this.device.type = 'mobile';\n                } else {\n                    this.device.type = 'desktop';\n                }\n\n                this.os.name = null;\n                this.os.version = null;\n            }\n\n            /****************************************************\n             *      Obigo\n             */\n\n            if (ua.match(/Obigo/i)) {\n                this.browser.name = 'Obigo';\n\n                if (match = /Obigo\\/([0-9.]*)/i.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (match = /Obigo\\/([A-Z])([0-9.]*)/i.exec(ua)) {\n                    this.browser.name = 'Obigo ' + match[1];\n                    this.browser.version = new Version({\n                        value: match[2]\n                    });\n                }\n\n                if (match = /Obigo-([A-Z])([0-9.]*)\\//i.exec(ua)) {\n                    this.browser.name = 'Obigo ' + match[1];\n                    this.browser.version = new Version({\n                        value: match[2]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      UC Web\n             */\n\n            if (ua.match('UCWEB')) {\n                this.browser.stock = false;\n                this.browser.name = 'UC Browser';\n\n                if (match = /UCWEB([0-9]*[.][0-9]*)/.exec(ua)) {\n                    this.browser.version = new Version({\n                        value: match[1],\n                        details: 3\n                    });\n                }\n\n                if (this.os.name === 'Linux') {\n                    this.os.name = '';\n                }\n\n                this.device.type = 'mobile';\n\n                if (match = /^IUC \\(U;\\s?iOS ([0-9\\.]+);/.exec(ua)) {\n                    this.os.name = 'iOS';\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n                }\n\n                if (match = /^JUC \\(Linux; U; ([0-9\\.]+)[^;]*; [^;]+; ([^;]*[^\\s])\\s*; [0-9]+\\*[0-9]+\\)/.exec(ua)) {\n                    var model = cleanupModel(match[2]);\n\n                    this.os.name = 'Android';\n                    this.os.version = new Version({\n                        value: match[1]\n                    });\n\n                    if (typeof ANDROID_MODELS[model] !== 'undefined') {\n                        this.device.manufacturer = ANDROID_MODELS[model][0];\n                        this.device.model = ANDROID_MODELS[model][1];\n                        if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n                        this.device.identified = true;\n                    }\n                }\n            }\n\n            if (ua.match(/\\) UC /)) {\n                this.browser.stock = false;\n                this.browser.name = 'UC Browser';\n            }\n\n            if (match = /UCBrowser\\/([0-9.]*)/.exec(ua)) {\n                this.browser.stock = false;\n                this.browser.name = 'UC Browser';\n                this.browser.version = new Version({\n                    value: match[1],\n                    details: 2\n                });\n            }\n\n            /****************************************************\n             *      NineSky\n             */\n\n            if (match = /Ninesky(?:-android-mobile(?:-cn)?)?\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'NineSky';\n                this.browser.version = new Version({\n                    value: match[1]\n                });\n\n                if (this.os.name !== 'Android') {\n                    this.os.name = 'Android';\n                    this.os.version = null;\n\n                    this.device.manufacturer = null;\n                    this.device.model = null;\n                }\n            }\n\n            /****************************************************\n             *      Skyfire\n             */\n\n            if (match = /Skyfire\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'Skyfire';\n                this.browser.version = new Version({\n                    value: match[1]\n                });\n\n                this.device.type = 'mobile';\n\n                this.os.name = 'Android';\n                this.os.version = null;\n            }\n\n            /****************************************************\n             *      Dolphin HD\n             */\n\n            if (match = /DolphinHDCN\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'Dolphin';\n                this.browser.version = new Version({\n                    value: match[1]\n                });\n\n                this.device.type = 'mobile';\n\n                if (this.os.name !== 'Android') {\n                    this.os.name = 'Android';\n                    this.os.version = null;\n                }\n            }\n\n            if (match = /Dolphin\\/INT/.exec(ua)) {\n                this.browser.name = 'Dolphin';\n                this.device.type = 'mobile';\n            }\n\n            /****************************************************\n             *      QQ Browser\n             */\n\n            if (match = /(M?QQBrowser)\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'QQ Browser';\n\n                var version = match[2];\n                if (version.match(/^[0-9][0-9]$/)) version = version[0] + '.' + version[1];\n\n                this.browser.version = new Version({\n                    value: version,\n                    details: 2\n                });\n                this.browser.channel = ''\n\n                if (!this.os.name && match[1] === 'QQBrowser') {\n                    this.os.name = 'Windows';\n                }\n            }\n\n            /****************************************************\n             *      iBrowser\n             */\n\n            if (match = /(iBrowser)\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'iBrowser';\n\n                var version = match[2];\n                if (version.match(/[0-9][0-9]/)) version = version[0] + '.' + version[1];\n\n                this.browser.version = new Version({\n                    value: version,\n                    details: 2\n                });\n                this.browser.channel = ''\n            }\n\n            /****************************************************\n             *      Puffin\n             */\n\n            if (match = /Puffin\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'Puffin';\n                this.browser.version = new Version({\n                    value: match[1],\n                    details: 2\n                });\n\n                this.device.type = 'mobile';\n\n                if (this.os.name === 'Linux') {\n                    this.os.name = null;\n                    this.os.version = null;\n                }\n            }\n\n            /****************************************************\n             *      360 Extreme Explorer\n             */\n\n            if (ua.match('360EE')) {\n                this.browser.stock = false;\n                this.browser.name = '360 Extreme Explorer';\n                this.browser.version = null;\n            }\n\n            /****************************************************\n             *      Midori\n             */\n\n            if (match = /Midori\\/([0-9.]*)/.exec(ua)) {\n                this.browser.name = 'Midori';\n                this.browser.version = new Version({\n                    value: match[1]\n                });\n\n                if (this.os.name !== 'Linux') {\n                    this.os.name = 'Linux';\n                    this.os.version = null;\n                }\n\n                this.device.manufacturer = null;\n                this.device.model = null;\n                this.device.type = 'desktop';\n            }\n\n            /****************************************************\n             *      Others\n             */\n\n            var browsers = [{\n                name: 'AdobeAIR',\n                regexp: /AdobeAIR\\/([0-9.]*)/\n            }, {\n                name: 'Awesomium',\n                regexp: /Awesomium\\/([0-9.]*)/\n            }, {\n                name: 'Canvace',\n                regexp: /Canvace Standalone\\/([0-9.]*)/\n            }, {\n                name: 'Ekioh',\n                regexp: /Ekioh\\/([0-9.]*)/\n            }, {\n                name: 'JavaFX',\n                regexp: /JavaFX\\/([0-9.]*)/\n            }, {\n                name: 'GFXe',\n                regexp: /GFXe\\/([0-9.]*)/\n            }, {\n                name: 'LuaKit',\n                regexp: /luakit/\n            }, {\n                name: 'Titanium',\n                regexp: /Titanium\\/([0-9.]*)/\n            }, {\n                name: 'OpenWebKitSharp',\n                regexp: /OpenWebKitSharp/\n            }, {\n                name: 'Prism',\n                regexp: /Prism\\/([0-9.]*)/\n            }, {\n                name: 'Qt',\n                regexp: /Qt\\/([0-9.]*)/\n            }, {\n                name: 'QtEmbedded',\n                regexp: /QtEmbedded/\n            }, {\n                name: 'QtEmbedded',\n                regexp: /QtEmbedded.*Qt\\/([0-9.]*)/\n            }, {\n                name: 'RhoSimulator',\n                regexp: /RhoSimulator/\n            }, {\n                name: 'UWebKit',\n                regexp: /UWebKit\\/([0-9.]*)/\n            },\n\n            {\n                name: 'PhantomJS',\n                regexp: /PhantomJS\\/([0-9.]*)/\n            }, {\n                name: 'Google Web Preview',\n                regexp: /Google Web Preview/\n            },\n\n            {\n                name: 'Google Earth',\n                regexp: /Google Earth\\/([0-9.]*)/\n            }, {\n                name: 'EA Origin',\n                regexp: /Origin\\/([0-9.]*)/\n            }, {\n                name: 'SecondLife',\n                regexp: /SecondLife\\/([0-9.]*)/\n            }, {\n                name: 'Valve Steam',\n                regexp: /Valve Steam/\n            },\n\n            {\n                name: 'Songbird',\n                regexp: /Songbird\\/([0-9.]*)/\n            }, {\n                name: 'Thunderbird',\n                regexp: /Thunderbird\\/([0-9.]*)/\n            },\n\n            {\n                name: 'Abrowser',\n                regexp: /Abrowser\\/([0-9.]*)/\n            }, {\n                name: 'arora',\n                regexp: /[Aa]rora\\/([0-9.]*)/\n            }, {\n                name: 'Baidu Browser',\n                regexp: /M?BaiduBrowser\\/([0-9.]*)/i\n            }, {\n                name: 'Camino',\n                regexp: /Camino\\/([0-9.]*)/\n            }, {\n                name: 'Canure',\n                regexp: /Canure\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'CometBird',\n                regexp: /CometBird\\/([0-9.]*)/\n            }, {\n                name: 'Comodo Dragon',\n                regexp: /Comodo_Dragon\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'Conkeror',\n                regexp: /[Cc]onkeror\\/([0-9.]*)/\n            }, {\n                name: 'CoolNovo',\n                regexp: /(?:CoolNovo|CoolNovoChromePlus)\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'ChromePlus',\n                regexp: /ChromePlus(?:\\/([0-9.]*))?$/,\n                details: 3\n            }, {\n                name: 'Daedalus',\n                regexp: /Daedalus ([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'Demobrowser',\n                regexp: /demobrowser\\/([0-9.]*)/\n            }, {\n                name: 'Dooble',\n                regexp: /Dooble(?:\\/([0-9.]*))?/\n            }, {\n                name: 'DWB',\n                regexp: /dwb(?:-hg)?(?:\\/([0-9.]*))?/\n            }, {\n                name: 'Epiphany',\n                regexp: /Epiphany\\/([0-9.]*)/\n            }, {\n                name: 'FireWeb',\n                regexp: /FireWeb\\/([0-9.]*)/\n            }, {\n                name: 'Flock',\n                regexp: /Flock\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Galeon',\n                regexp: /Galeon\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Helium',\n                regexp: /HeliumMobileBrowser\\/([0-9.]*)/\n            }, {\n                name: 'iCab',\n                regexp: /iCab\\/([0-9.]*)/\n            }, {\n                name: 'Iceape',\n                regexp: /Iceape\\/([0-9.]*)/\n            }, {\n                name: 'IceCat',\n                regexp: /IceCat ([0-9.]*)/\n            }, {\n                name: 'Iceweasel',\n                regexp: /Iceweasel\\/([0-9.]*)/\n            }, {\n                name: 'InternetSurfboard',\n                regexp: /InternetSurfboard\\/([0-9.]*)/\n            }, {\n                name: 'Iron',\n                regexp: /Iron\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'Isis',\n                regexp: /BrowserServer/\n            }, {\n                name: 'Jumanji',\n                regexp: /jumanji/\n            }, {\n                name: 'Kazehakase',\n                regexp: /Kazehakase\\/([0-9.]*)/\n            }, {\n                name: 'KChrome',\n                regexp: /KChrome\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'K-Meleon',\n                regexp: /K-Meleon\\/([0-9.]*)/\n            }, {\n                name: 'Leechcraft',\n                regexp: /Leechcraft(?:\\/([0-9.]*))?/,\n                details: 2\n            }, {\n                name: 'Lightning',\n                regexp: /Lightning\\/([0-9.]*)/\n            }, {\n                name: 'Lunascape',\n                regexp: /Lunascape[\\/| ]([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'iLunascape',\n                regexp: /iLunascape\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Maxthon',\n                regexp: /Maxthon[\\/ ]([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'MiniBrowser',\n                regexp: /MiniBr?owserM\\/([0-9.]*)/\n            }, {\n                name: 'MiniBrowser',\n                regexp: /MiniBrowserMobile\\/([0-9.]*)/\n            }, {\n                name: 'MixShark',\n                regexp: /MixShark\\/([0-9.]*)/\n            }, {\n                name: 'Motorola WebKit',\n                regexp: /MotorolaWebKit\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'NetFront LifeBrowser',\n                regexp: /NetFrontLifeBrowser\\/([0-9.]*)/\n            }, {\n                name: 'Netscape Navigator',\n                regexp: /Navigator\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Odyssey',\n                regexp: /OWB\\/([0-9.]*)/\n            }, {\n                name: 'OmniWeb',\n                regexp: /OmniWeb/\n            }, {\n                name: 'Orca',\n                regexp: /Orca\\/([0-9.]*)/\n            }, {\n                name: 'Origyn',\n                regexp: /Origyn Web Browser/\n            }, {\n                name: 'Palemoon',\n                regexp: /Pale[mM]oon\\/([0-9.]*)/\n            }, {\n                name: 'Phantom',\n                regexp: /Phantom\\/V([0-9.]*)/\n            }, {\n                name: 'Polaris',\n                regexp: /Polaris\\/v?([0-9.]*)/i,\n                details: 2\n            }, {\n                name: 'QtCreator',\n                regexp: /QtCreator\\/([0-9.]*)/\n            }, {\n                name: 'QtQmlViewer',\n                regexp: /QtQmlViewer/\n            }, {\n                name: 'QtTestBrowser',\n                regexp: /QtTestBrowser\\/([0-9.]*)/\n            }, {\n                name: 'QtWeb',\n                regexp: /QtWeb Internet Browser\\/([0-9.]*)/\n            }, {\n                name: 'QupZilla',\n                regexp: /QupZilla\\/([0-9.]*)/\n            }, {\n                name: 'Roccat',\n                regexp: /Roccat\\/([0-9]\\.[0-9.]*)/\n            }, {\n                name: 'Raven for Mac',\n                regexp: /Raven for Mac\\/([0-9.]*)/\n            }, {\n                name: 'rekonq',\n                regexp: /rekonq/\n            }, {\n                name: 'RockMelt',\n                regexp: /RockMelt\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'Sleipnir',\n                regexp: /Sleipnir\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'SMBrowser',\n                regexp: /SMBrowser/\n            }, {\n                name: 'Sogou Explorer',\n                regexp: /SE 2.X MetaSr/\n            }, {\n                name: 'Snowshoe',\n                regexp: /Snowshoe\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'Sputnik',\n                regexp: /Sputnik\\/([0-9.]*)/i,\n                details: 3\n            }, {\n                name: 'Stainless',\n                regexp: /Stainless\\/([0-9.]*)/\n            }, {\n                name: 'SunChrome',\n                regexp: /SunChrome\\/([0-9.]*)/\n            }, {\n                name: 'Surf',\n                regexp: /Surf\\/([0-9.]*)/\n            }, {\n                name: 'TaoBrowser',\n                regexp: /TaoBrowser\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'TaomeeBrowser',\n                regexp: /TaomeeBrowser\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'TazWeb',\n                regexp: /TazWeb/\n            }, {\n                name: 'Viera',\n                regexp: /Viera\\/([0-9.]*)/\n            }, {\n                name: 'Villanova',\n                regexp: /Villanova\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Wavelink Velocity',\n                regexp: /Wavelink Velocity Browser\\/([0-9.]*)/,\n                details: 2\n            }, {\n                name: 'WebPositive',\n                regexp: /WebPositive/\n            }, {\n                name: 'WebRender',\n                regexp: /WebRender/\n            }, {\n                name: 'Wyzo',\n                regexp: /Wyzo\\/([0-9.]*)/,\n                details: 3\n            }, {\n                name: 'Zetakey',\n                regexp: /Zetakey Webkit\\/([0-9.]*)/\n            }, {\n                name: 'Zetakey',\n                regexp: /Zetakey\\/([0-9.]*)/\n            }]\n\n            for (var b = 0; b < browsers.length; b++) {\n                if (match = browsers[b].regexp.exec(ua)) {\n                    this.browser.name = browsers[b].name;\n                    this.browser.channel = '';\n                    this.browser.stock = false;\n\n                    if (match[1]) {\n                        this.browser.version = new Version({\n                            value: match[1],\n                            details: browsers[b].details || null\n                        });\n                    } else {\n                        this.browser.version = null;\n                    }\n                }\n            }\n\n\n\n            /****************************************************\n             *      WebKit\n             */\n\n            if (match = /WebKit\\/([0-9.]*)/i.exec(ua)) {\n                this.engine.name = 'Webkit';\n                this.engine.version = new Version({\n                    value: match[1]\n                });\n            }\n\n            if (match = /Browser\\/AppleWebKit([0-9.]*)/i.exec(ua)) {\n                this.engine.name = 'Webkit';\n                this.engine.version = new Version({\n                    value: match[1]\n                });\n            }\n\n            /****************************************************\n             *      KHTML\n             */\n\n            if (match = /KHTML\\/([0-9.]*)/.exec(ua)) {\n                this.engine.name = 'KHTML';\n                this.engine.version = new Version({\n                    value: match[1]\n                });\n            }\n\n            /****************************************************\n             *      Gecko\n             */\n\n            if (/Gecko/.exec(ua) && !/like Gecko/i.exec(ua)) {\n                this.engine.name = 'Gecko';\n\n                if (match = /; rv:([^\\)]+)\\)/.exec(ua)) {\n                    this.engine.version = new Version({\n                        value: match[1]\n                    });\n                }\n            }\n\n            /****************************************************\n             *      Presto\n             */\n\n            if (match = /Presto\\/([0-9.]*)/.exec(ua)) {\n                this.engine.name = 'Presto';\n                this.engine.version = new Version({\n                    value: match[1]\n                });\n            }\n\n            /****************************************************\n             *      Trident\n             */\n\n            if (match = /Trident\\/([0-9.]*)/.exec(ua)) {\n                this.engine.name = 'Trident';\n                this.engine.version = new Version({\n                    value: match[1]\n                });\n\n                if (this.browser.name === 'Internet Explorer') {\n                    if (parseVersion(this.engine.version) === 6 && parseFloat(this.browser.version) < 10) {\n                        this.browser.version = new Version({\n                            value: '10.0'\n                        });\n                        this.browser.mode = 'compat';\n                    }\n\n                    if (parseVersion(this.engine.version) === 5 && parseFloat(this.browser.version) < 9) {\n                        this.browser.version = new Version({\n                            value: '9.0'\n                        });\n                        this.browser.mode = 'compat';\n                    }\n\n                    if (parseVersion(this.engine.version) === 4 && parseFloat(this.browser.version) < 8) {\n                        this.browser.version = new Version({\n                            value: '8.0'\n                        });\n                        this.browser.mode = 'compat';\n                    }\n                }\n\n                if (this.os.name === 'Windows Phone') {\n                    if (parseVersion(this.engine.version) === 5 && parseFloat(this.os.version) < 7.5) {\n                        this.os.version = new Version({\n                            value: '7.5'\n                        });\n                    }\n                }\n            }\n\n\n            /****************************************************\n             *      Corrections\n             */\n\n            if (this.os.name === 'Android' && this.browser.stock) {\n                this.browser.hidden = true;\n            }\n\n            if (this.os.name === 'iOS' && this.browser.name === 'Opera Mini') {\n                this.os.version = null;\n            }\n\n            if (this.browser.name === 'Midori' && this.engine.name !== 'Webkit') {\n                this.engine.name = 'Webkit';\n                this.engine.version = null;\n            }\n\n            if (this.device.type === 'television' && this.browser.name === 'Opera') {\n                this.browser.name = 'Opera Devices';\n                switch (true) {\n                    case this.engine.version.is('2.10'):\n                        this.browser.version = new Version({\n                            value: 3.2\n                        });\n                        break;\n                    case this.engine.version.is('2.9'):\n                        this.browser.version = new Version({\n                            value: 3.1\n                        });\n                        break;\n                    case this.engine.version.is('2.8'):\n                        this.browser.version = new Version({\n                            value: 3.0\n                        });\n                        break;\n                    case this.engine.version.is('2.7'):\n                        this.browser.version = new Version({\n                            value: 2.9\n                        });\n                        break;\n                    case this.engine.version.is('2.6'):\n                        this.browser.version = new Version({\n                            value: 2.8\n                        });\n                        break;\n                    case this.engine.version.is('2.4'):\n                        this.browser.version = new Version({\n                            value: 10.3\n                        });\n                        break;\n                    case this.engine.version.is('2.3'):\n                        this.browser.version = new Version({\n                            value: 10\n                        });\n                        break;\n                    case this.engine.version.is('2.2'):\n                        this.browser.version = new Version({\n                            value: 9.7\n                        });\n                        break;\n                    case this.engine.version.is('2.1'):\n                        this.browser.version = new Version({\n                            value: 9.6\n                        });\n                        break;\n                    default:\n                        this.browser.version = null;\n                }\n\n                this.os.name = null;\n                this.os.version = null;\n            }\n\n\n            /****************************************************\n             *      Camouflage\n             */\n\n            if (this.options.detectCamouflage) {\n\n                if (match = /Mac OS X 10_6_3; ([^;]+); [a-z]{2}-(?:[a-z]{2})?\\)/.exec(ua)) {\n                    this.browser.name = '';\n                    this.browser.version = null;\n                    this.browser.mode = 'desktop';\n\n                    this.os.name = 'Android';\n                    this.os.version = null;\n\n                    this.engine.name = 'Webkit';\n                    this.engine.version = null;\n\n                    this.device.model = match[1];\n                    this.device.type = 'mobile';\n\n                    var model = cleanupModel(this.device.model);\n                    if (typeof ANDROID_MODELS[model] !== 'undefined') {\n                        this.device.manufacturer = ANDROID_MODELS[model][0];\n                        this.device.model = ANDROID_MODELS[model][1];\n                        if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n                        this.device.identified = true;\n                    }\n\n                    this.features.push('foundDevice');\n                }\n\n                if (match = /Linux Ventana; [a-z]{2}-[a-z]{2}; (.+) Build/.exec(ua)) {\n                    this.browser.name = '';\n                    this.browser.version = null;\n                    this.browser.mode = 'desktop';\n\n                    this.os.name = 'Android';\n                    this.os.version = null;\n\n                    this.engine.name = 'Webkit';\n                    this.engine.version = null;\n\n                    this.device.model = match[1];\n                    this.device.type = 'mobile';\n\n                    var model = cleanupModel(this.device.model);\n                    if (typeof ANDROID_MODELS[model] !== 'undefined') {\n                        this.device.manufacturer = ANDROID_MODELS[model][0];\n                        this.device.model = ANDROID_MODELS[model][1];\n                        if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n                        this.device.identified = true;\n                    }\n\n                    this.features.push('foundDevice');\n                }\n\n                if (this.browser.name === 'Safari') {\n                    if (this.os.name !== 'iOS' && /AppleWebKit\\/([0-9]+.[0-9]+)/i.exec(ua)[1] !== /Safari\\/([0-9]+.[0-9]+)/i.exec(ua)[1]) {\n                        this.features.push('safariMismatch');\n                        this.camouflage = true;\n                    }\n\n                    if (this.os.name === 'iOS' && !ua.match(/^Mozilla/)) {\n                        this.features.push('noMozillaPrefix');\n                        this.camouflage = true;\n                    }\n\n                    if (!/Version\\/[0-9\\.]+/.exec(ua)) {\n                        this.features.push('noVersion');\n                        this.camouflage = true;\n                    }\n                }\n\n                if (this.browser.name === 'Chrome') {\n                    if (!/(?:Chrome|CrMo|CriOS)\\/([0-9]{1,2}\\.[0-9]\\.[0-9]{3,4}\\.[0-9]+)/.exec(ua)) {\n                        this.features.push('wrongVersion');\n                        this.camouflage = true;\n                    }\n                }\n\n\n                if (this.options.useFeatures) {\n                    /* If it claims not to be Trident, but it is probably Trident running camouflage mode */\n                    if (window.ActiveXObject) {\n                        this.features.push('trident');\n\n                        if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Trident') {\n                            this.camouflage = typeof this.browser.name === 'undefined' || this.browser.name !== 'Maxthon';\n                        }\n                    }\n\n                    /* If it claims not to be Opera, but it is probably Opera running camouflage mode */\n                    if (window.opera) {\n                        this.features.push('presto');\n\n                        if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Presto') {\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.name === 'Internet Explorer') {\n                            this.camouflage = true;\n                        }\n                    }\n\n                    /* If it claims not to be Gecko, but it is probably Gecko running camouflage mode */\n                    if ('getBoxObjectFor' in document || 'mozInnerScreenX' in window) {\n                        this.features.push('gecko');\n\n                        if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Gecko') {\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.name === 'Internet Explorer') {\n                            this.camouflage = true;\n                        }\n                    }\n\n                    /* If it claims not to be Webkit, but it is probably Webkit running camouflage mode */\n                    if ('WebKitCSSMatrix' in window || 'WebKitPoint' in window || 'webkitStorageInfo' in window || 'webkitURL' in window) {\n                        this.features.push('webkit');\n\n                        if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Webkit') {\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.name === 'Internet Explorer') {\n                            this.camouflage = true;\n                        }\n                    }\n\n\n\n                    /* If it claims to be Safari and uses V8, it is probably an Android device running camouflage mode */\n                    if (this.engine.name === 'Webkit' && ({}.toString).toString().indexOf('\\n') === -1) {\n                        this.features.push('v8');\n\n                        if (this.browser !== null && this.browser.name === 'Safari') {\n                            this.camouflage = true;\n                        }\n                    }\n\n\n\n                    /* If we have an iPad that is not 768 x 1024, we have an imposter */\n                    if (this.device.model === 'iPad') {\n                        if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 768 && screen.height !== 1024) && (screen.width !== 1024 && screen.height !== 768)) {\n                            this.features.push('sizeMismatch');\n                            this.camouflage = true;\n                        }\n                    }\n\n                    /* If we have an iPhone or iPod that is not 320 x 480, we have an imposter */\n                    if (this.device.model === 'iPhone' || this.device.model === 'iPod') {\n                        if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 320 && screen.height !== 480) && (screen.width !== 480 && screen.height !== 320)) {\n                            this.features.push('sizeMismatch');\n                            this.camouflage = true;\n                        }\n                    }\n\n\n                    if (this.os.name === 'iOS' && this.os.version) {\n\n                        if (this.os.version.isOlder('4.0') && 'sandbox' in document.createElement('iframe')) {\n                            this.features.push('foundSandbox');\n                            this.camouflage = true;\n                        }\n\n                        if (this.os.version.isOlder('4.2') && 'WebSocket' in window) {\n                            this.features.push('foundSockets');\n                            this.camouflage = true;\n                        }\n\n                        if (this.os.version.isOlder('5.0') && !! window.Worker) {\n                            this.features.push('foundWorker');\n                            this.camouflage = true;\n                        }\n\n                        if (this.os.version.isNewer('2.1') && !window.applicationCache) {\n                            this.features.push('noAppCache');\n                            this.camouflage = true;\n                        }\n                    }\n\n                    if (this.os.name !== 'iOS' && this.browser.name === 'Safari' && this.browser.version) {\n\n                        if (this.browser.version.isOlder('4.0') && !! window.applicationCache) {\n                            this.features.push('foundAppCache');\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.version.isOlder('4.1') && !! (window.history && history.pushState)) {\n                            this.features.push('foundHistory');\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.version.isOlder('5.1') && !! document.documentElement.webkitRequestFullScreen) {\n                            this.features.push('foundFullscreen');\n                            this.camouflage = true;\n                        }\n\n                        if (this.browser.version.isOlder('5.2') && 'FileReader' in window) {\n                            this.features.push('foundFileReader');\n                            this.camouflage = true;\n                        }\n                    }\n                }\n            }\n        }\n    };\n\n    function cleanupModel(s) {\n        s = typeof s === 'undefined' ? '' : s;\n\n        s = s.replace(/_TD$/, '');\n        s = s.replace(/_CMCC$/, '');\n\n        s = s.replace(/_/g, ' ');\n        s = s.replace(/^\\s+|\\s+$/g, '');\n        s = s.replace(/\\/[^/]+$/, '');\n        s = s.replace(/\\/[^/]+ Android\\/.*/, '');\n\n        s = s.replace(/^tita on /, '');\n        s = s.replace(/^Android on /, '');\n        s = s.replace(/^Android for /, '');\n        s = s.replace(/^ICS AOSP on /, '');\n        s = s.replace(/^Full AOSP on /, '');\n        s = s.replace(/^Full Android on /, '');\n        s = s.replace(/^Full Cappuccino on /, '');\n        s = s.replace(/^Full MIPS Android on /, '');\n        s = s.replace(/^Full Android/, '');\n\n        s = s.replace(/^Acer ?/i, '');\n        s = s.replace(/^Iconia /, '');\n        s = s.replace(/^Ainol /, '');\n        s = s.replace(/^Coolpad ?/i, 'Coolpad ');\n        s = s.replace(/^ALCATEL /, '');\n        s = s.replace(/^Alcatel OT-(.*)/, 'one touch $1');\n        s = s.replace(/^YL-/, '');\n        s = s.replace(/^Novo7 ?/i, 'Novo7 ');\n        s = s.replace(/^GIONEE /, '');\n        s = s.replace(/^HW-/, '');\n        s = s.replace(/^Huawei[ -]/i, 'Huawei ');\n        s = s.replace(/^SAMSUNG[ -]/i, '');\n        s = s.replace(/^SonyEricsson/, '');\n        s = s.replace(/^Lenovo Lenovo/, 'Lenovo');\n        s = s.replace(/^LNV-Lenovo/, 'Lenovo');\n        s = s.replace(/^Lenovo-/, 'Lenovo ');\n        s = s.replace(/^(LG)[ _\\/]/, '$1-');\n        s = s.replace(/^(HTC.*)\\s(?:v|V)?[0-9.]+$/, '$1');\n        s = s.replace(/^(HTC)[-\\/]/, '$1 ');\n        s = s.replace(/^(HTC)([A-Z][0-9][0-9][0-9])/, '$1 $2');\n        s = s.replace(/^(Motorola[\\s|-])/, '')\n        s = s.replace(/^(Moto|MOT-)/, '')\n\n        s = s.replace(/-?(orange(-ls)?|vodafone|bouygues)$/i, '');\n        s = s.replace(/http:\\/\\/.+$/i, '');\n\n        s = s.replace(/^\\s+|\\s+$/g, '');\n\n        return s;\n    }\n\n    function parseVersion(version) {\n        version = version.toString();\n        var components = version.split('.');\n        var major = components.shift();\n        return parseFloat(major + '.' + components.join(''));\n    }\n\n    return Detected;\n\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91c2VyYWdlbnQtYmFzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdWEtZGV2aWNlQDAuMS4xMEB1YS1kZXZpY2UvbGliL3VzZXJhZ2VudC1iYXNlLmpzPzA1ZDkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBTVFJJTkdTX1NBTVNVTkcgPSAnU2Ftc3VuZycsXG4gICAgICAgIFNUUklOR1NfU0hBUlAgPSAnU2hhcnAnLFxuICAgICAgICBTVFJJTkdTX1NPTllfRVJJQ1NTT04gPSAnU29ueSBFcmljc3NvbicsXG4gICAgICAgIFNUUklOR1NfTU9UT1JPTEEgPSAnTW90b3JvbGEnLFxuICAgICAgICBTVFJJTkdTX0xHID0gJ0xHJyxcbiAgICAgICAgU1RSSU5HU19IVUFXRUkgPSAnSHVhd2VpJyxcbiAgICAgICAgU1RSSU5HU19IVEMgPSAnSFRDJyxcbiAgICAgICAgU1RSSU5HU19DT09MUEFEID0gJ0Nvb2xwYWQnLFxuICAgICAgICBTVFJJTkdTX0FTVVMgPSAnQXN1cycsXG4gICAgICAgIFNUUklOR1NfQUNFUiA9ICdBY2VyJztcbiAgICB2YXIgU1RSSU5HU19CQVNFRCA9ICcgYmFzZWQgZGV2aWNlJztcblxuICAgIHZhciBUT1VDSFdJWl9NT0RFTFMgPSB7XG4gICAgICAgICdTQU1TVU5HJzoge1xuICAgICAgICAgICAgJ0dULVMzMzcwQyc6IFtTVFJJTkdTX1NBTVNVTkcsICdDb3JieSAzRyddLFxuICAgICAgICAgICAgJ0dULVMzNjUwJzogW1NUUklOR1NfU0FNU1VORywgJ0NvcmJ5J10sXG4gICAgICAgICAgICAnR1QtUzM2NTMnOiBbU1RSSU5HU19TQU1TVU5HLCAnQ29yYnknXSxcbiAgICAgICAgICAgICdHVC1TMzg1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdDb3JieSBJSSddLFxuICAgICAgICAgICAgJ0dULVM1MjMwJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXInXSxcbiAgICAgICAgICAgICdHVC1TNTIzMFcnOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciddLFxuICAgICAgICAgICAgJ0dULVM1MjMzJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXInXSxcbiAgICAgICAgICAgICdHVC1TNTI2MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdTdGFyIElJJ10sXG4gICAgICAgICAgICAnR1QtUzU1NjAnOiBbU1RSSU5HU19TQU1TVU5HLCAnTWFydmVsJ10sXG4gICAgICAgICAgICAnR1QtUzU2MjAnOiBbU1RSSU5HU19TQU1TVU5HLCAnTW9udGUnXSxcbiAgICAgICAgICAgICdHVC1TNzU1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdCbHVlIEVhcnRoJ10sXG4gICAgICAgICAgICAnR1QtUzgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnSmV0J10sXG4gICAgICAgICAgICAnR1QtUzgwMDMnOiBbU1RSSU5HU19TQU1TVU5HLCAnSmV0J10sXG4gICAgICAgICAgICAnU0dILUY0ODAnOiBbU1RSSU5HU19TQU1TVU5HLCAnVG9jY28nXSxcbiAgICAgICAgICAgICdTR0gtVDUyOGcnOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RyYWlnaHQgVGFsayddLFxuICAgICAgICAgICAgJ0dULUIzNDEwJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXIgUXdlcnR5J10sXG4gICAgICAgICAgICAnR1QtQjUzMTAnOiBbU1RSSU5HU19TQU1TVU5HLCAnQ29yYnkgUHJvJ10sXG4gICAgICAgICAgICAnR1QtQjc3MjInOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciBEdW9zJ10sXG4gICAgICAgICAgICAnR1QtQzY3MTInOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciBJSSBEdW9zJ11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBCQURBX01PREVMUyA9IHtcbiAgICAgICAgJ1NBTVNVTkcnOiB7XG4gICAgICAgICAgICAnR1QtIFM1MjUwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgNTI1J10sXG4gICAgICAgICAgICAnR1QtUzUyNTAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1MjUnXSxcbiAgICAgICAgICAgICdHVC1TNTI1Myc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDUyNSddLFxuICAgICAgICAgICAgJ0dULVM1MzMwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgNTMzJ10sXG4gICAgICAgICAgICAnR1QtUzUzODAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSBZJ10sXG4gICAgICAgICAgICAnR1QtUzUzODBEJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgWSddLFxuICAgICAgICAgICAgJ0dULVM1MzgwSyc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIFknXSxcbiAgICAgICAgICAgICdHVC1TNTc1MEUnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1NzUnXSxcbiAgICAgICAgICAgICdHVC1TNTc1M0UnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1NzUnXSxcbiAgICAgICAgICAgICdHVC1TNzIzMEInOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzIzMEUnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzIzM0UnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzI1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIE0nXSxcbiAgICAgICAgICAgICdHVC1TNzI1MEQnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSBNJ10sXG4gICAgICAgICAgICAnR1QtUzg1MDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSddLFxuICAgICAgICAgICAgJ0dULVM4NTAwQyc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlJ10sXG4gICAgICAgICAgICAnR1QtUzg1MDBSJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUnXSxcbiAgICAgICAgICAgICdHVC1TODUwMFQnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSddLFxuICAgICAgICAgICAgJ0dULVM4NTMwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgSUknXSxcbiAgICAgICAgICAgICdHVC1TODYwMCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDMnXSxcbiAgICAgICAgICAgICdTSFctTTQxMCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDMnXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFRJWkVOX01PREVMUyA9IHtcbiAgICAgICAgJ1NBTVNVTkcnOiB7XG4gICAgICAgICAgICAnR1QtSTk1MDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnR1QtSTk1MDAnXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIEJSRVdfTU9ERUxTID0ge1xuICAgICAgICAnQ29vbHBhZCBENTA4JzogW1NUUklOR1NfQ09PTFBBRCwgJ0Q1MDgnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRTYwMCc6IFtTVFJJTkdTX0NPT0xQQUQsICdFNjAwJ10sXG4gICAgICAgICdTQ0gtRjgzOSc6IFtTVFJJTkdTX1NBTVNVTkcsICdTQ0gtRjgzOSddXG4gICAgfVxuXG4gICAgdmFyIFdJTkRPV1NfTU9CSUxFX01PREVMUyA9IHtcbiAgICAgICAgJ0RYOTAwJzogW1NUUklOR1NfQUNFUiwgJ1RlbXBvIERYOTAwJ10sXG4gICAgICAgICdGOTAwJzogW1NUUklOR1NfQUNFUiwgJ1RlbXBvIEY5MDAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRjgwMCc6IFtTVFJJTkdTX0NPT0xQQUQsICdGODAwJ10sXG4gICAgICAgICdnYXJtaW4tYXN1cy1OdXZpZm9uZS1NMTAnOiBbJ0dhcm1pbi1Bc3VzJywgJ051dmlmb25lIE0xMCddLFxuICAgICAgICAnSFAgaVBBUSA1MTAnOiBbJ0hQJywgJ2lQQVEgNTEwJ10sXG4gICAgICAgICdIRCBtaW5pIFQ1NTU1JzogW1NUUklOR1NfSFRDLCAnSEQgbWluaSddLFxuICAgICAgICAnSFRDIEhEIG1pbmknOiBbU1RSSU5HU19IVEMsICdIRCBtaW5pJ10sXG4gICAgICAgICdIVEMgSEQgbWluaSBUNTU1NSc6IFtTVFJJTkdTX0hUQywgJ0hEIG1pbmknXSxcbiAgICAgICAgJ0hUQyBIRDInOiBbU1RSSU5HU19IVEMsICdIRDInXSxcbiAgICAgICAgJ0hUQyBIRDIgVDg1ODUnOiBbU1RSSU5HU19IVEMsICdIRDInXSxcbiAgICAgICAgJ0hEMiBUODU4NSc6IFtTVFJJTkdTX0hUQywgJ0hEMiddLFxuICAgICAgICAnVC1Nb2JpbGUgTEVPJzogW1NUUklOR1NfSFRDLCAnSEQyJ10sXG4gICAgICAgICdkb3BvZFQ1NTg4JzogW1NUUklOR1NfSFRDLCAnSGVuZ3NoYW4nXSxcbiAgICAgICAgJ0hUQyBNZWdhLVQzMzMzJzogW1NUUklOR1NfSFRDLCAnTWVnYSddLFxuICAgICAgICAnSFRDIFNuYXAgUzUyMSc6IFtTVFJJTkdTX0hUQywgJ1NuYXAnXSxcbiAgICAgICAgJ0hUQyBUb3VjaDIgVDMzMjAnOiBbU1RSSU5HU19IVEMsICdUb3VjaCAyJ10sXG4gICAgICAgICdIVEMgVG91Y2gyIFQzMzMzJzogW1NUUklOR1NfSFRDLCAnVG91Y2ggMiddLFxuICAgICAgICAnSFRDIFRvdWNoMiBUMzMzNSc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIDInXSxcbiAgICAgICAgJ0hUQyBQMzcwMCc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIERpYW1vbmQnXSxcbiAgICAgICAgJ0hUQyBUb3VjaCBEaWFtb25kMiBUNTM1Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIERpYW1vbmQgMiddLFxuICAgICAgICAnSFRDIFRvdWNoIEhEIFQ4MjgyJzogW1NUUklOR1NfSFRDLCAnVG91Y2ggSEQnXSxcbiAgICAgICAgJ0hUQyBUb3VjaCBIRCBUODI4Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIEhEJ10sXG4gICAgICAgICdIVEMgVG91Y2ggSEQyIFQ4NTg1JzogW1NUUklOR1NfSFRDLCAnVG91Y2ggSEQyJ10sXG4gICAgICAgICdIVEMgVG91Y2ggUHJvMiBUNzM3Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIFBybyAyJ10sXG4gICAgICAgICdUNzM4MCc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIFBybyAyJ10sXG4gICAgICAgICdIVEMgVHlUTiBJSSc6IFtTVFJJTkdTX0hUQywgJ1R5VE4gSUknXSxcbiAgICAgICAgJ0dULUI3MzAwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIExpdGUnXSxcbiAgICAgICAgJ0dULUI3NjEwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIFBybyddLFxuICAgICAgICAnR1QtaTgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgMiddLFxuICAgICAgICAnR1QtSTgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgMiddLFxuICAgICAgICAnR1QtSTgwMDBVJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDInXSxcbiAgICAgICAgJ00xaSc6IFtTVFJJTkdTX1NPTllfRVJJQ1NTT04sICdNMWkgQXNwZW4nXVxuICAgIH1cblxuICAgIHZhciBXSU5ET1dTX1BIT05FX01PREVMUyA9IHtcbiAgICAgICAgJ0FjZXInOiB7XG4gICAgICAgICAgICAnQWxsZWdybyc6IFtTVFJJTkdTX0FDRVIsICdBbGxlZ3JvJ10sXG4gICAgICAgICAgICAnTTMxMCc6IFtTVFJJTkdTX0FDRVIsICdBbGxlZ3JvJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnQXN1cyc6IHtcbiAgICAgICAgICAgICdHYWxheHk2JzogW1NUUklOR1NfQVNVUywgJ0dhbGF4eSA2J11cbiAgICAgICAgfSxcblxuICAgICAgICAnREVMTCc6IHtcbiAgICAgICAgICAgICdWZW51ZSBQcm8nOiBbJ0RlbGwnLCAnVmVudWUgUHJvJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnRnVqaXRzdVRvc2hpYmFNb2JpbGVDb21tdW4nOiB7XG4gICAgICAgICAgICAnSVMxMlQnOiBbJ0Z1aml0c3UgVG9zaGliYScsICdJUzEyVCddXG4gICAgICAgIH0sXG5cbiAgICAgICAgJ0hUQyc6IHtcbiAgICAgICAgICAgICc3IE1vemFydCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnNyBNb3phcnQgVDg2OTgnOiBbU1RSSU5HU19IVEMsICc3IE1vemFydCddLFxuICAgICAgICAgICAgJ1Q4Njk3JzogW1NUUklOR1NfSFRDLCAnNyBNb3phcnQnXSxcbiAgICAgICAgICAgICdUODY5OCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnUEQ2NzEwMCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnTW96YXJ0IFQ4Njk4JzogW1NUUklOR1NfSFRDLCAnNyBNb3phcnQnXSxcbiAgICAgICAgICAgICdNb3phcnQnOiBbU1RSSU5HU19IVEMsICc3IE1vemFydCddLFxuICAgICAgICAgICAgJ1VTQ0NIVEMtUEM5MzEwMCc6IFtTVFJJTkdTX0hUQywgJ0Fycml2ZSddLFxuICAgICAgICAgICAgJ0dvbGQnOiBbU1RSSU5HU19IVEMsICdHb2xkICddLFxuICAgICAgICAgICAgJ0hEMic6IFtTVFJJTkdTX0hUQywgJ0hEMiddLFxuICAgICAgICAgICAgJ0hENyc6IFtTVFJJTkdTX0hUQywgJ0hENyddLFxuICAgICAgICAgICAgJ0hENyBUOTI5Mic6IFtTVFJJTkdTX0hUQywgJ0hENyddLFxuICAgICAgICAgICAgJ1Q5Mjk1JzogW1NUUklOR1NfSFRDLCAnSEQ3J10sXG4gICAgICAgICAgICAnVDkyOTYnOiBbU1RSSU5HU19IVEMsICdIRDcnXSxcbiAgICAgICAgICAgICdIRDcgSW5maW5pdHknOiBbU1RSSU5HU19IVEMsICdIRDcnXSxcbiAgICAgICAgICAgICdUNzU3NSc6IFtTVFJJTkdTX0hUQywgJzcgUHJvJ10sXG4gICAgICAgICAgICAnNyBQcm8gVDc1NzYnOiBbU1RSSU5HU19IVEMsICc3IFBybyddLFxuICAgICAgICAgICAgJ213cDY5ODUnOiBbU1RSSU5HU19IVEMsICdUcm9waHknXSxcbiAgICAgICAgICAgICc3IFRyb3BoeSBUODY4Nic6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJzcgVHJvcGh5JzogW1NUUklOR1NfSFRDLCAnVHJvcGh5J10sXG4gICAgICAgICAgICAnUEM0MDEwMCc6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJ1RvdWNoLUlUIFRyb3BoeSc6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJ1JhZGFyJzogW1NUUklOR1NfSFRDLCAnUmFkYXInXSxcbiAgICAgICAgICAgICdSYWRhciA0Ryc6IFtTVFJJTkdTX0hUQywgJ1JhZGFyJ10sXG4gICAgICAgICAgICAnUmFkYXIgQzExMGUnOiBbU1RSSU5HU19IVEMsICdSYWRhciddLFxuICAgICAgICAgICAgJ01hemFhJzogW1NUUklOR1NfSFRDLCAnTWF6YWEnXSxcbiAgICAgICAgICAgICdNb25kcmlhbic6IFtTVFJJTkdTX0hUQywgJ01vbmRyaWFuJ10sXG4gICAgICAgICAgICAnU2NodWJlcnQnOiBbU1RSSU5HU19IVEMsICdTY2h1YmVydCddLFxuICAgICAgICAgICAgJzcgU2NodWJlcnQgVDkyOTInOiBbU1RSSU5HU19IVEMsICdTY2h1YmVydCddLFxuICAgICAgICAgICAgJ1NwYXJrJzogW1NUUklOR1NfSFRDLCAnU3BhcmsnXSxcbiAgICAgICAgICAgICdUODc4OCc6IFtTVFJJTkdTX0hUQywgJ1N1cnJvdW5kJ10sXG4gICAgICAgICAgICAnVElUQU4gWDMxMGUnOiBbU1RSSU5HU19IVEMsICdUaXRhbiddLFxuICAgICAgICAgICAgJ1gzMTBlJzogW1NUUklOR1NfSFRDLCAnVGl0YW4nXSxcbiAgICAgICAgICAgICdQSTM5MTAwJzogW1NUUklOR1NfSFRDLCAnVGl0YW4nXSxcbiAgICAgICAgICAgICdQSTg2MTAwJzogW1NUUklOR1NfSFRDLCAnVGl0YW4gSUknXSxcbiAgICAgICAgICAgICdVbHRpbWF0ZSc6IFtTVFJJTkdTX0hUQywgJ1VsdGltYXRlJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnTEcnOiB7XG4gICAgICAgICAgICAnR1c5MTAnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyddLFxuICAgICAgICAgICAgJ0xHIEUtOTAwJzogW1NUUklOR1NfTEcsICdPcHRpbXVzIDcgRTkwMCddLFxuICAgICAgICAgICAgJ0xHLUU5MDAnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyBFOTAwJ10sXG4gICAgICAgICAgICAnTEctRTkwMGgnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyBFOTAwJ10sXG4gICAgICAgICAgICAnTEctQzkwMCc6IFtTVFJJTkdTX0xHLCAnT3B0aW11cyA3USddLFxuICAgICAgICAgICAgJ0xHLUM5MDBCJzogW1NUUklOR1NfTEcsICdRdWFudHVtJ10sXG4gICAgICAgICAgICAnTEctQzkwMGsnOiBbU1RSSU5HU19MRywgJ1F1YW50dW0nXVxuICAgICAgICB9LFxuXG4gICAgICAgICdub2tpYSc6IHtcbiAgICAgICAgICAgICdTZWFSYXknOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddLFxuICAgICAgICAgICAgJzgwMEMnOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddXG4gICAgICAgIH0sXG5cbiAgICAgICAgJ05PS0lBJzoge1xuICAgICAgICAgICAgJzcxMCc6IFsnTm9raWEnLCAnTHVtaWEgNzEwJ10sXG4gICAgICAgICAgICAnTm9raWEgNzEwJzogWydOb2tpYScsICdMdW1pYSA3MTAnXSxcbiAgICAgICAgICAgICdMdW1pYSA3MTAnOiBbJ05va2lhJywgJ0x1bWlhIDcxMCddLFxuICAgICAgICAgICAgJ0x1bWlhIDcxOSc6IFsnTm9raWEnLCAnTHVtaWEgNzE5J10sXG4gICAgICAgICAgICAnTHVtaWEgODAwJzogWydOb2tpYScsICdMdW1pYSA4MDAnXSxcbiAgICAgICAgICAgICc4MDAnOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddLFxuICAgICAgICAgICAgJ0x1bWlhIDkwMCc6IFsnTm9raWEnLCAnTHVtaWEgOTAwJ10sXG4gICAgICAgICAgICAnWFhYJzogWydOb2tpYScsICdwcm90b3R5cGUnXVxuICAgICAgICB9LFxuXG4gICAgICAgICdTQU1TVU5HJzoge1xuICAgICAgICAgICAgJ0dULUk4MzUwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIFcnXSxcbiAgICAgICAgICAgICdHVC1JODM1MFQnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgVyddLFxuICAgICAgICAgICAgJ1NHSC1pNjc3JzogW1NUUklOR1NfU0FNU1VORywgJ0ZvY3VzIEZsYXNoJ10sXG4gICAgICAgICAgICAnU0dILWk3MDcnOiBbU1RSSU5HU19TQU1TVU5HLCAnVGF5bG9yJ10sXG4gICAgICAgICAgICAnU0dILWk5MTcnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgNyddLFxuICAgICAgICAgICAgJ1NHSC1JOTE3JzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDcnXSxcbiAgICAgICAgICAgICdTR0gtaTkxNy4nOiBbU1RSSU5HU19TQU1TVU5HLCAnRm9jdXMnXSxcbiAgICAgICAgICAgICdTR0gtaTkxN1InOiBbU1RSSU5HU19TQU1TVU5HLCAnRm9jdXMnXSxcbiAgICAgICAgICAgICdTR0gtaTkzNyc6IFtTVFJJTkdTX1NBTVNVTkcsICdGb2N1cyBTJ10sXG4gICAgICAgICAgICAnT01OSUE3JzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDcnXSxcbiAgICAgICAgICAgICdPTUlOQTcnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgNyddLFxuICAgICAgICAgICAgJ1RheWxvcic6IFtTVFJJTkdTX1NBTVNVTkcsICdUYXlsb3InXVxuICAgICAgICB9LFxuXG4gICAgICAgICdUT1NISUJBJzoge1xuICAgICAgICAgICAgJ1RTVU5BR0knOiBbJ1Rvc2hpYmEnLCAnVHN1bmFnaSddXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIEFORFJPSURfTU9ERUxTID0ge1xuICAgICAgICAnQW5kcm9pZCc6IFtudWxsLCBudWxsXSxcbiAgICAgICAgJ2dvb2dsZSBzZGsnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdzZGsnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdnZW5lcmljJzogW251bGwsIG51bGxdLFxuICAgICAgICAnZ2VuZXJpYyB4ODYnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdhbWQgYnJhem9zJzogWydBTUQnLCAnRnVzaW9uYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdBbWxvZ2ljIE0xIHJlZmVyZW5jZSBib2FyZCc6IFsnQW1sb2dpYycsICdNMSByZWZlcmVuY2UgYm9hcmQnXSxcbiAgICAgICAgJ0FNTDg3MjZNJzogWydBbWxvZ2ljJywgJ0FNTDg3MjYtTWJhc2VkIGRldmljZSddLFxuICAgICAgICAndmV4cHJlc3MgYTknOiBbJ0FSTScsICdWZXJzYXRpbGUgRXhwcmVzcyBkZXZlbG9wbWVudCBwbGF0Zm9ybSddLFxuICAgICAgICAnYmNtNzIzMSc6IFsnQnJvYWRjb20nLCAnQkNNNzIzMWJhc2VkIGRldmljZScsICd0ZWxldmlzaW9uJ10sXG4gICAgICAgICdiY203NDI1JzogWydCcm9hZGNvbScsICdCQ003NDI1YmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ2JjbTc0MjknOiBbJ0Jyb2FkY29tJywgJ0JDTTc0MjliYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnaW14NTAgcmRwJzogWydGcmVlc2NhbGUnLCAnaS5NWDUwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdpbXg1MSBiYmcnOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTFiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIGxvY28nOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIG1wMjA0ZjMnOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIHNtZCc6IFsnRnJlZXNjYWxlJywgJ2kuTVg1M2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnaW14NTMgeWVhZ2xlJzogWydGcmVlc2NhbGUnLCAnaS5NWDUzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdpbXg2cSc6IFsnRnJlZXNjYWxlJywgJ2kuTVg2UWJhc2VkIGRldmljZSddLFxuICAgICAgICAnT0RST0lELUEnOiBbJ0hhcmRrZXJuZWwnLCAnT0RST0lELUEgZGV2ZWxvcGVyIHRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ21mbGQgZHYxMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgZHYyMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgbHcwMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgcHIyJzogWydJbnRlbCcsICdNZWRmaWVsZGJhc2VkIGRldmljZSddLFxuICAgICAgICAnbWZsZCBwcjMnOiBbJ0ludGVsJywgJ01lZGZpZWxkYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdiZXJsaW4gYmcyJzogWydNYXJ2ZWxsJywgJ0FybWFkYSAxMDAwYmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ01TdGFyIEFtYmVyMyc6IFsnTVN0YXInLCAnQW1iZXIzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdLb25rYSBBbWJlcjMnOiBbJ01TdGFyJywgJ0FtYmVyM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnbXQ1Mzk2JzogWydNZWRpYXRlaycsICdNVDUzOTZiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnYmlyZDc1djInOiBbJ01lZGlhdGVrJywgJ01UNjU3NWJhc2VkIGRldmljZSddLFxuICAgICAgICAnZWFnbGU3NXYxIDInOiBbJ01lZGlhdGVrJywgJ01UNjU3NWJhc2VkIGRldmljZSddLFxuICAgICAgICAnTUJYIERWQlQgcmVmZXJlbmNlIGJvYXJkIChjMDNyZWYpJzogWydNWEInLCAnRFZCVCByZWZlcmVuY2UgYm9hcmQnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnTlMyODE2JzogWydOdWZyb250JywgJ051U21hcnQgMjgxNmJhc2VkIGRldmljZSddLFxuICAgICAgICAnVmVudGFuYSc6IFsnblZpZGlhJywgJ1RlZ3JhIFZlbnRhbmEgZGV2ZWxvcG1lbnQga2l0J10sXG4gICAgICAgICdDYXJkaHUnOiBbJ25WaWRpYScsICdUZWdyYSAzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdQYW5kYSc6IFsnUGFuZGFib2FyZCcsICdEZXZlbG9wbWVudCBLaXQnXSxcbiAgICAgICAgJ3BhbmRhYm9hcmQnOiBbJ1BhbmRhYm9hcmQnLCAnRGV2ZWxvcG1lbnQgS2l0J10sXG4gICAgICAgICdQYW5kYUJvYXJkJzogWydQYW5kYWJvYXJkJywgJ0RldmVsb3BtZW50IEtpdCddLFxuICAgICAgICAnTVNNJzogWydRdWFsY29tbScsICdTbmFwZHJhZ29uYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdtc203MjI3IGZmYSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyNyBzdXJmJzogWydRdWFsY29tbScsICdTbmFwZHJhZ29uIFMxYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdtc203NjI3YSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyN2Egc2t1MSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyN2Egc2t1Myc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYzMCBmdXNpb24nOiBbJ1F1YWxjb21tJywgJ1NuYXBkcmFnb24gUzJiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21zbTc2MzAgc3VyZic6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMmJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtODY2MCBjb3VnYXInOiBbJ1F1YWxjb21tJywgJ1NuYXBkcmFnb24gUzNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21zbTg2NjAgc3VyZic6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtODk2MCc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTNGJhc2VkIGRldmljZSddLFxuICAgICAgICAncmsyODA4c2RrJzogWydSb2NrY2hpcCcsICdSSzI4MDhiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ1JLMjgxOCc6IFsnUm9ja2NoaXAnLCAnUksyODE4YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazI4MThzZGsnOiBbJ1JvY2tjaGlwJywgJ1JLMjgxOGJhc2VkIGRldmljZSddLFxuICAgICAgICAnQW5kcm9pZC1mb3ItUm9ja2NoaXAtMjgxOCc6IFsnUm9ja2NoaXAnLCAnUksyODE4YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazI5c2RrJzogWydSb2NrY2hpcCcsICdSSzI5YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdSazI5c2RrJzogWydSb2NrY2hpcCcsICdSSzI5YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazMwc2RrJzogWydSb2NrY2hpcCcsICdSSzMwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdzM2M2NDEwJzogWydTYW1zdW5nJywgJ1MzQzY0MTBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ3NtZGs2NDEwJzogWydTYW1zdW5nJywgJ1MzQzY0MTBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ1NNREtDMTEwJzogWydTYW1zdW5nJywgJ0V4eW5vcyAzMTEwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdTTURLVjIxMCc6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnUzVQVjIxMCc6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnc2VjIHNtZGtjMjEwJzogWydTYW1zdW5nJywgJ0V4eW5vcyA0MjEwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdTTURLNHgxMic6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMiBvciA0NDEyYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdzbXA4Nnh4JzogWydTaWdtYScsICdTTVA4Nnh4YmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ3N2ODg2MCc6IFsnU2t5dmlpYScsICdTVjg4NjBiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnc3RlIHU4NTAwJzogWydTVCBFcmljc3NvbicsICdOb3ZhdGhvciBVODUwMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnVGVsZWNoaXBzIE04MDEgRXZhbHVhdGlvbiBCb2FyZCc6IFsnVGVsZWNoaXBzJywgJ004MDFiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVGVsZWNoaXBzIFRDQzg5MDAgRXZhbHVhdGlvbiBCb2FyZCc6IFsnVGVsZWNoaXBzJywgJ1RDQzg5MDBiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVENDODkyMCBTVEIgRVYnOiBbJ1RlbGVjaGlwcycsICdUQ0M4OTIwYmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ09NQVAnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ09NQVAgU1MnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ0xvZ2ljUEQgWm9vbTInOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ29tYXAzZXZtJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdPTUFQM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnT21hcDVzZXZtJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdPTUFQNWJhc2VkIGRldmljZSddLFxuICAgICAgICAncG54ODQ3MyBraXJ5dW5nJzogWydUcmlkZW50JywgJ1BOWDg0NzNiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnY3Jlc3BvJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnQ3Jlc3BvJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnQ3Jlc3BvNEcnOiBbJ0dvb2dsZScsICdOZXh1cyBTJ10sXG4gICAgICAgICdQYXNzaW9uJzogWydHb29nbGUnLCAnTmV4dXMgT25lJ10sXG4gICAgICAgICdCcmF2byc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnZHJlYW0nOiBbJ0hUQycsICdEcmVhbSddLFxuICAgICAgICAnVm9ndWUnOiBbJ0hUQycsICdUb3VjaCddLFxuICAgICAgICAnVmVuZG9yIE9wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ1N0aW5ncmF5JzogWydNb3Rvcm9sYScsICdYT09NJywgJ3RhYmxldCddLFxuICAgICAgICAnV2luZ3JheSc6IFsnTW90b3JvbGEnLCAnWE9PTScsICd0YWJsZXQnXSxcbiAgICAgICAgJ21hZ3Vybyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ01hZ3Vybyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1Rvcm8tVlpXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOZXh1cyddLFxuICAgICAgICAnYmxhemUnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ0JsYXplIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0JsYXplJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdCbGF6ZSBUYWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdCbGF6ZSBUYWJsZXQnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ0JsYXplIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0JsdWVTdGFja3MnOiBbJ0JsdWVTdGFja3MnLCAnQXBwIFBsYXllcicsICdkZXNrdG9wJ10sXG4gICAgICAgICd5b3V3YXZlIGN1c3RvbSc6IFsnWW91d2F2ZScsICdBbmRyb2lkIG9uIFBDJywgJ2Rlc2t0b3AnXSxcbiAgICAgICAgJ0ExMDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQTEwMSc6IFsnQWNlcicsICdJY29uaWEgVGFiIEExMDEnLCAndGFibGV0J10sXG4gICAgICAgICdBMjAwJzogWydBY2VyJywgJ0ljb25pYSBUYWIgQTIwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E1MDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBNTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQTUwMSc6IFsnQWNlcicsICdJY29uaWEgVGFiIEE1MDEnLCAndGFibGV0J10sXG4gICAgICAgICdBNTEwJzogWydBY2VyJywgJ0ljb25pYSBUYWIgQTUxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E1MTEnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBNTExJywgJ3RhYmxldCddLFxuICAgICAgICAnQTcwMCc6IFsnQWNlcicsICdJY29uaWEgVGFiIEE3MDAnLCAndGFibGV0J10sXG4gICAgICAgICdBY2VyIEE4MDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBODAwJywgJ3RhYmxldCddLFxuICAgICAgICAnRTExMCc6IFsnQWNlcicsICdiZVRvdWNoIEUxMTAnXSxcbiAgICAgICAgJ0UxMjAnOiBbJ0FjZXInLCAnYmVUb3VjaCBFMTIwJ10sXG4gICAgICAgICdFMTMwJzogWydBY2VyJywgJ2JlVG91Y2ggRTEzMCddLFxuICAgICAgICAnRTE0MCc6IFsnQWNlcicsICdiZVRvdWNoIEUxNDAnXSxcbiAgICAgICAgJ0UyMTAnOiBbJ0FjZXInLCAnYmVUb3VjaCBFMjEwJ10sXG4gICAgICAgICdFMzEwJzogWydBY2VyJywgJ0xpcXVpZCBtaW5pJ10sXG4gICAgICAgICdFMzIwJzogWydBY2VyJywgJ0xpcXVpZCBFeHByZXNzJ10sXG4gICAgICAgICdFMzMwJzogWydBY2VyJywgJ0xpcXVpZCBHbG93J10sXG4gICAgICAgICdFNDAwJzogWydBY2VyJywgJ2JlVG91Y2ggRTQwMCddLFxuICAgICAgICAnRzEwMFcnOiBbJ0FjZXInLCAnRzEwMFcnXSxcbiAgICAgICAgJ1MxMDAnOiBbJ0FjZXInLCAnTGlxdWlkJ10sXG4gICAgICAgICdTMTEwJzogWydBY2VyJywgJ1N0cmVhbSddLFxuICAgICAgICAnUzEyMCc6IFsnQWNlcicsICdMaXF1aWQgbXQnXSxcbiAgICAgICAgJ1MzMDAnOiBbJ0FjZXInLCAnSWNvbmlhIFNtYXJ0J10sXG4gICAgICAgICdTNTAwJzogWydBY2VyJywgJ0Nsb3VkTW9iaWxlJ10sXG4gICAgICAgICdURDYwMCc6IFsnQWNlcicsICdiZVRvdWNoIFRENjAwJ10sXG4gICAgICAgICdMaXF1aWQnOiBbJ0FjZXInLCAnTGlxdWlkJ10sXG4gICAgICAgICdMaXF1aWQgRSc6IFsnQWNlcicsICdMaXF1aWQgRSddLFxuICAgICAgICAnTGlxdWlkIE10JzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnTGlxdWlkIE1UJzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnTGlxdWlkIE1ldGFsJzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnU3RyZWFtJzogWydBY2VyJywgJ1N0cmVhbSddLFxuICAgICAgICAnTjcwMCc6IFsnYWlnbycsICdONzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnTTgwMSc6IFsnYWlnbycsICdNODAxJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzcnOiBbJ0Fpbm92bycsICdOb3ZvNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEF1cm9yYSc6IFsnQWlub3ZvJywgJ05vdm83IEF1cm9yYScsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEFkdmFuY2VkJzogWydBaW5vdm8nLCAnTm92bzcgQWR2YW5jZWQnLCAndGFibGV0J10sXG4gICAgICAgICdOb3ZvNyBBZHZhbmNlZDInOiBbJ0Fpbm92bycsICdOb3ZvNyBBZHZhbmNlZCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzcgQmFzaWMnOiBbJ0Fpbm92bycsICdOb3ZvNyBCYXNpYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEVMRic6IFsnQWlub3ZvJywgJ05vdm83IEVsZicsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IFBBTEFESU4nOiBbJ0Fpbm92bycsICdOb3ZvNyBQYWxhZGluJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzggQWR2YW5jZWQnOiBbJ0Fpbm92bycsICdOb3ZvOCBBZHZhbmNlZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA4OTAnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDg5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDg5MEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDg5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDg5MSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggODkxJ10sXG4gICAgICAgICdPTkUgVE9VQ0ggOTAzJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5MDNTSFYtRTE3MEsnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5MDYnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkwNiddLFxuICAgICAgICAnb25lIHRvdWNoIDkwOCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTA4Ric6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTA4Uyc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTEwJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5MTAnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5MTgnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnT05FIFRPVUNIIDkxOEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOE0nOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOE4nOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDk4MCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgwJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTgwQSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgwJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTgxQSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgxJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTg2JzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5ODYnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5OTAnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDk5MEEnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDk5MSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkxJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTkxRCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkxJ10sXG4gICAgICAgICdPTkUgVE9VQ0ggOTkzJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5OTMnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5OTUnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5NSddLFxuICAgICAgICAnVGVsZW5vciBPbmVUb3VjaCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkwJ10sXG4gICAgICAgICdPVCA5MTgnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnVmVudHVyZSc6IFsnQWxjYXRlbCcsICdWZW50dXJlJ10sXG4gICAgICAgICdBbGx3aW5uZXIgQTEwJzogWydBbGxXaW5uZXInLCAnQTEwJywgJ3RhYmxldCddLFxuICAgICAgICAnOTdGQyc6IFsnQWxsV2lubmVyJywgJ0ExMCA5N0ZDJywgJ3RhYmxldCddLFxuICAgICAgICAnS2luZGxlIEZpcmUnOiBbJ0FtYXpvbicsICdLaW5kbGUgRmlyZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FtYXpvbiBLaW5kbGUgRmlyZSc6IFsnQW1hem9uJywgJ0tpbmRsZSBGaXJlJywgJ3RhYmxldCddLFxuICAgICAgICAnQU1EMTIwJzogWydBbnlEQVRBJywgJ0FueVRBQiBBTUQxMjAnLCAndGFibGV0J10sXG4gICAgICAgICdNVzA4MTEnOiBbJ0FPQycsICdCcmVlemUgTVcwODExJywgJ3RhYmxldCddLFxuICAgICAgICAnTVcwODIxIFYyLjAnOiBbJ0FPQycsICdCcmVlemUgTVcwODIxJywgJ3RhYmxldCddLFxuICAgICAgICAnTVcwOTIyJzogWydBT0MnLCAnQnJlZXplIE1XMDkyMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FwYW5kYSBBNjAnOiBbJ0FwYW5kYScsICdBNjAnXSxcbiAgICAgICAgJ2FwYW5kYS1BNjAnOiBbJ0FwYW5kYScsICdBNjAnXSxcbiAgICAgICAgJ0E4MEtTQyc6IFsnQXJjaG9zJywgJ0Fybm92YSA4JywgJ3RhYmxldCddLFxuICAgICAgICAnQU43Q0cyJzogWydBcmNob3MnLCAnQXJub3ZhIDcnLCAndGFibGV0J10sXG4gICAgICAgICdBMTAxQic6IFsnQXJjaG9zJywgJ0Fybm92YSAxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FOMTBCRzJEVCc6IFsnQXJjaG9zJywgJ0Fybm92YSAxMCBCJywgJ3RhYmxldCddLFxuICAgICAgICAnQU4xMEcyJzogWydBcmNob3MnLCAnQXJub3ZhIDEwIEcyJywgJ3RhYmxldCddLFxuICAgICAgICAnQTMyJzogWydBcmNob3MnLCAnMzInLCAnbWVkaWEnXSxcbiAgICAgICAgJ0EzNURFJzogWydBcmNob3MnLCAnMzUgU21hcnQgSG9tZSBQaG9uZSddLFxuICAgICAgICAnQTQzJzogWydBcmNob3MnLCAnNDMnLCAnbWVkaWEnXSxcbiAgICAgICAgJ0FyY2hvczUnOiBbJ0FyY2hvcycsICc1JywgJ21lZGlhJ10sXG4gICAgICAgICdBNzBIJzogWydBcmNob3MnLCAnNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MEhCJzogWydBcmNob3MnLCAnNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MEJIVCc6IFsnQXJjaG9zJywgJzcnLCAndGFibGV0J10sXG4gICAgICAgICdBNzBDSFQnOiBbJ0FyY2hvcycsICc3QycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MFMnOiBbJ0FyY2hvcycsICc3MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3RUInOiBbJ0FyY2hvcycsICc3MEInLCAndGFibGV0J10sXG4gICAgICAgICdBUkNIT1MgNzBpdDInOiBbJ0FyY2hvcycsICc3MCBJVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQVJDSE9TIDgwRzknOiBbJ0FyY2hvcycsICc4MCBHOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FSQ0hPUyAxMDFHOSc6IFsnQXJjaG9zJywgJzEwMSBHOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ExMDFJVCc6IFsnQXJjaG9zJywgJzEwMSBJVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVFJJJzogWydBU1RSSScsICdlLXJlYWRlcicsICdlcmVhZGVyJ10sXG4gICAgICAgICdlZWVwYyc6IFsnQXN1cycsICdFZWUgUGMnXSxcbiAgICAgICAgJ2FzdXMgbGFwdG9wJzogWydBc3VzJywgJ0VlZSBQYyddLFxuICAgICAgICAnTUUxNzEnOiBbJ0FzdXMnLCAnRWVlIFBhZCBNZU1PJywgJ3RhYmxldCddLFxuICAgICAgICAnU2xpZGVyIFNMMTAxJzogWydBc3VzJywgJ0VlZSBQYWQgU2xpZGVyJywgJ3RhYmxldCddLFxuICAgICAgICAnRVBBRCc6IFsnQXN1cycsICdFZWUgUGFkIFRyYW5zZm9ybWVyJywgJ3RhYmxldCddLFxuICAgICAgICAnVEYxMDEnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RyYW5zZm9ybWVyIFRGMTAxJzogWydBc3VzJywgJ0VlZSBQYWQgVHJhbnNmb3JtZXInLCAndGFibGV0J10sXG4gICAgICAgICdUcmFuc2Zvcm1lciBURjEwMUcnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RGMjAxJzogWydBc3VzJywgJ0VlZSBQYWQgVHJhbnNmb3JtZXIgUHJpbWUnLCAndGFibGV0J10sXG4gICAgICAgICdUcmFuc2Zvcm1lciBQcmltZSBURjIwMSc6IFsnQXN1cycsICdFZWUgUGFkIFRyYW5zZm9ybWVyIFByaW1lJywgJ3RhYmxldCddLFxuICAgICAgICAnVHJhbnNmb3JtZXIgUHJpbWUnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lciBQcmltZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RyYW5zZm9ybWVyIFBhZCBURjMwMFQnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgVEYzMDBUJzogWydBc3VzJywgJ1RyYW5zZm9ybWVyIFBhZCAzMDAnLCAndGFibGV0J10sXG4gICAgICAgICdBU1VTIFRyYW5zZm9ybWVyIFBhZCBURjMwMFQnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgUGFkIFRGMzAwVEcnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgUGFkIFRGNzAwVCc6IFsnQXN1cycsICdUcmFuc2Zvcm1lciBQYWQgSW5maW5pdHkgNzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVNVUyBUcmFuc2Zvcm1lciBQYWQgVEY3MDBLJzogWydBc3VzJywgJ1RyYW5zZm9ybWVyIFBhZCBJbmZpbml0eSA3MDAnLCAndGFibGV0J10sXG4gICAgICAgICdBU1VTIFRyYW5zZm9ybWVyIFRGNzAwSyc6IFsnQXN1cycsICdUcmFuc2Zvcm1lciBQYWQgSW5maW5pdHkgNzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnUGFkRm9uZSc6IFsnQXN1cycsICdQYWRmb25lJywgJ3RhYmxldCddLFxuICAgICAgICAnT01TIFRURCc6IFsnQXN1cycsICdFZWUgUGMgVDEwJ10sXG4gICAgICAgICdBU1VTIFQyMCc6IFsnQXN1cycsICdFZWUgUGMgVDIwJ10sXG4gICAgICAgICdFVEJXMTFBQSc6IFsnQXN1cycsICdUb3VnaCddLFxuICAgICAgICAnQVVYIFY5MDAnOiBbJ0FVWCcsICdWOTAwJ10sXG4gICAgICAgICdNOTEwQSc6IFsnQVVYJywgJ005MTAnXSxcbiAgICAgICAgJ1BJQ09wYWQtUUdOJzogWydBeGlvbycsICdQaWNvcGFkIFFHTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ05PT0snOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0snLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9va0NvbG9yJzogWydCYXJuZXMgJiBOb2JsZScsICdOT09LIENvbG9yJywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgQk5SVjIwMCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBDb2xvcicsICdlcmVhZGVyJ10sXG4gICAgICAgICdOT09LIEJOUlYzMDAnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgQ29sb3InLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9va1RhYmxldCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9vayBUYWJsZXQnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgQk5UVjI1MCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnTk9PSyBCTlRWMjUwQSc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnQk5UVjI1MCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnQk5UVjI1MEEnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgU2xhdGUnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ0JlbldlZSA1MTAwJzogWydCZW5XZWUnLCAnNTEwMCddLFxuICAgICAgICAnQ0E5MDdBQUMwRyc6IFsnQmVzdGEnLCAnQ0E5MDdBQUMwRyddLFxuICAgICAgICAnQk05OTknOiBbJ0Jtb3JuJywgJ0JNOTk5JywgJ3RhYmxldCddLFxuICAgICAgICAnVjExJzogWydCbW9ybicsICdWMTEnLCAndGFibGV0J10sXG4gICAgICAgICdWOTknOiBbJ0Jtb3JuJywgJ1Y5OScsICd0YWJsZXQnXSxcbiAgICAgICAgJ2JxIERhVmluY2knOiBbJ2JxJywgJ0RhVmluY2knLCAndGFibGV0J10sXG4gICAgICAgICdDVDcwNCc6IFsnQ2FycmVmb3VyJywgJ0NUNzA0JywgJ3RhYmxldCddLFxuICAgICAgICAnQ1QxMDAyJzogWydDYXJyZWZvdXInLCAnQ1QxMDAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQ2FtYW5naS1NYW5ncm92ZTcnOiBbJ0NhbWFuZ2knLCAnTWFuZ3JvdmUgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1dTMTcxJzogWydDYW1hbmdpJywgJ1dlYlN0YXRpb24nLCAndGFibGV0J10sXG4gICAgICAgICdJUzExQ0EnOiBbJ0Nhc2lvJywgJ0d6T25lIElTMTFDQSddLFxuICAgICAgICAnQzc3MSc6IFsnQ2FzaW8nLCAnR3pPbmUgQ29tbWFuZG8nXSxcbiAgICAgICAgJ0NBVCBOT1ZBJzogWydDYXQnLCAnTk9WQScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FSTU0zVic6IFsnY2hpbmFsZWFwJywgJ0FSTU0zVicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NJVVMtNyc6IFsnQ2lzY28nLCAnQ2l1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NJVVMtNy1BVCc6IFsnQ2lzY28nLCAnQ2l1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NTTCBTcGljZSBNSTMwMCc6IFsnQ1NMJywgJ1NwaWNlIE1JMzAwJ10sXG4gICAgICAgICdDU0wtTUk0MTAnOiBbJ0NTTCcsICdTcGljZSBNSTQxMCddLFxuICAgICAgICAnTUlEMTAyNCc6IFsnQ29ieScsICdLeXJvcyBNSUQxMDI0JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEMTEyNSc6IFsnQ29ieScsICdLeXJvcyBNSUQxMTI1JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEMTEyNic6IFsnQ29ieScsICdLeXJvcyBNSUQxMTI2JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxMCc6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxMic6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxNSc6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDE1JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxNUEnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAxNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMTYnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAxNicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjAnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjInOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjQnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyNCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjUnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcxMjcnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzEyNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgwMjQnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODAyNCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgxMjUnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODEyNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgxMjcnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODEyNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1o3MSc6IFsnQ29tbXRpdmEnLCAnWjcxJ10sXG4gICAgICAgICdWLVQxMDAnOiBbJ0NvbW10aXZhJywgJ1YtVDEwMCddLFxuICAgICAgICAnRklILUZCMCc6IFsnQ29tbXRpdmEnLCAnSEQ3MDAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRDUxMCc6IFsnQ29vbHBhZCcsICdENTEwJ10sXG4gICAgICAgICdDb29scGFkIDgwMjAnOiBbJ0Nvb2xwYWQnLCAnODAyMCddLFxuICAgICAgICAnRDUzMCc6IFsnQ29vbHBhZCcsICdENTMwJ10sXG4gICAgICAgICdDb29scGFkIEQ1MzAnOiBbJ0Nvb2xwYWQnLCAnRDUzMCddLFxuICAgICAgICAnRDUzOSc6IFsnQ29vbHBhZCcsICdENTM5J10sXG4gICAgICAgICdDb29scGFkIEQ1MzknOiBbJ0Nvb2xwYWQnLCAnRDUzOSddLFxuICAgICAgICAnRTIzOSc6IFsnQ29vbHBhZCcsICdFMjM5J10sXG4gICAgICAgICdDb29scGFkIEUyMzknOiBbJ0Nvb2xwYWQnLCAnRTIzOSddLFxuICAgICAgICAnQ29vbHBhZCBOOTMwJzogWydDb29scGFkJywgJ045MzAnXSxcbiAgICAgICAgJ045MzAnOiBbJ0Nvb2xwYWQnLCAnTjkzMCddLFxuICAgICAgICAnQ29vbHBhZCBXNzA2JzogWydDb29scGFkJywgJ1c3MDYnXSxcbiAgICAgICAgJ0Nvb2xwYWQgVzcwNisnOiBbJ0Nvb2xwYWQnLCAnVzcwNiddLFxuICAgICAgICAnQ29vbHBhZCBXNzA4JzogWydDb29scGFkJywgJ1c3MDgnXSxcbiAgICAgICAgJ1c3MTEnOiBbJ0Nvb2xwYWQnLCAnVzcxMSddLFxuICAgICAgICAnQ29vbHBhZCA1MDEwJzogWydDb29scGFkJywgJzUwMTAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgNTIxMCc6IFsnQ29vbHBhZCcsICc1MjEwJ10sXG4gICAgICAgICdDb29scGFkIDU4MjAnOiBbJ0Nvb2xwYWQnLCAnNTgyMCddLFxuICAgICAgICAnNTgzMic6IFsnQ29vbHBhZCcsICc1ODMyJ10sXG4gICAgICAgICdDb29scGFkIDU4MzInOiBbJ0Nvb2xwYWQnLCAnNTgzMiddLFxuICAgICAgICAnNTg1NSc6IFsnQ29vbHBhZCcsICc1ODU1J10sXG4gICAgICAgICdDb29scGFkIDU4NjAnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnQ29vbHBhZCA1ODYwKyc6IFsnQ29vbHBhZCcsICc1ODYwJ10sXG4gICAgICAgICdDb29scGFkIDU4NjBzJzogWydDb29scGFkJywgJzU4NjAnXSxcbiAgICAgICAgJzU4NjAnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnNTg2MEEnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnQ29vbHBhZCA1ODcwJzogWydDb29scGFkJywgJzU4NzAnXSxcbiAgICAgICAgJzU4NzAnOiBbJ0Nvb2xwYWQnLCAnNTg3MCddLFxuICAgICAgICAnQ29vbHBhZCA3MDA1JzogWydDb29scGFkJywgJzcwMDUnXSxcbiAgICAgICAgJzcyNjAnOiBbJ0Nvb2xwYWQnLCAnNzI2MCddLFxuICAgICAgICAnQ29vbHBhZCA3MDE5JzogWydDb29scGFkJywgJzcwMTknXSxcbiAgICAgICAgJ0Nvb2xwYWQgNzI2MCc6IFsnQ29vbHBhZCcsICc3MjYwJ10sXG4gICAgICAgICdDb29scGFkIDgwMTMnOiBbJ0Nvb2xwYWQnLCAnODAxMyddLFxuICAgICAgICAnQ29vbHBhZCA4ODA5JzogWydDb29scGFkJywgJzg4MDknXSxcbiAgICAgICAgJ0Nvb2xwYWQgODgxMCc6IFsnQ29vbHBhZCcsICc4ODEwJ10sXG4gICAgICAgICc4ODEwJzogWydDb29scGFkJywgJzg4MTAnXSxcbiAgICAgICAgJzgxNTAnOiBbJ0Nvb2xwYWQnLCAnODE1MCddLFxuICAgICAgICAnQ29vbHBhZCA4MTUwRCc6IFsnQ29vbHBhZCcsICc4MTUwJ10sXG5cbiAgICAgICAgJ0Nvb2xwYWQgODgxMSc6IFsnQ29vbHBhZCcsICc4ODExJ10sXG4gICAgICAgICdDb29scGFkIDk5MDAnOiBbJ0Nvb2xwYWQnLCAnOTkwMCddLFxuICAgICAgICAnQ29vbHBhZCA4MDUwJzogWydDb29scGFkJywgJzgwNTAnXSxcbiAgICAgICAgJ1ppaU83JzogWydDcmVhdGl2ZScsICdaaWlPIDcnLCAndGFibGV0J10sXG4gICAgICAgICdaaWlMQUJTIFppaU83JzogWydDcmVhdGl2ZScsICdaaWlPIDcnLCAndGFibGV0J10sXG4gICAgICAgICdaaWlMQUJTIFppaU8xMCAnOiBbJ0NyZWF0aXZlJywgJ1ppaU8gMTAnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIEs4R1QgQSc6IFsnQ3ViZScsICdLOEdUIEEnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIEs4R1QgQic6IFsnQ3ViZScsICdLOEdUIEInLCAndGFibGV0J10sXG4gICAgICAgICdLOEdUIEMnOiBbJ0N1YmUnLCAnSzhHVCBDJywgJ3RhYmxldCddLFxuICAgICAgICAnSzhHVCBIJzogWydDdWJlJywgJ0s4R1QgSCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgSzhHVCBIJzogWydDdWJlJywgJ0s4R1QgSCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0s4R1QgVyc6IFsnQ3ViZScsICdLOEdUIFcnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIFU4R1QnOiBbJ0N1YmUnLCAnVThHVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgVTlHVCc6IFsnQ3ViZScsICdVOUdUJywgJ3RhYmxldCddLFxuICAgICAgICAnQ1VCRSBVOUdUIDInOiBbJ0N1YmUnLCAnVTlHVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQ3ViZSBVOUdUMic6IFsnQ3ViZScsICdVOUdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUJzogWydDdWJlJywgJ1U5R1QnLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUMiBGcm9tIG1vYWdlLmNvbSc6IFsnQ3ViZScsICdVOUdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdOOTAgRnJvbSBtb2FnZS5jb20nOiBbJ0N1YmUnLCAnVTlHVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnVTlHVCBTJzogWydDdWJlJywgJ1U5R1QgUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1U5R1QgUyBBJzogWydDdWJlJywgJ1U5R1QgU0EnLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUUyBBJzogWydDdWJlJywgJ1U5R1QgU0EnLCAndGFibGV0J10sXG4gICAgICAgICdVMTBHVCAyJzogWydDdWJlJywgJ1UxMEdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdVMTBHVCBTJzogWydDdWJlJywgJ1UxMEdUIFMnLCAndGFibGV0J10sXG4gICAgICAgICdVMzBHVC1IJzogWydDdWJlJywgJ1UzMEdUIEgnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIFE3UFJPJzogWydDdWJlJywgJ1E3IFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgUTdQUk8gSic6IFsnQ3ViZScsICdRNyBQcm8nLCAndGFibGV0J10sXG4gICAgICAgICdDeWRsZSBNNyAodjAwMDUuMDQuMDMuMTIua28pJzogWydDeWRsZScsICdNNyBNdWx0aVBBRCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgQWVybyc6IFsnRGVsbCcsICdBZXJvJ10sXG4gICAgICAgICdEZWxsIE0wMU0nOiBbJ0RlbGwnLCAnTWluaSA1JywgJ3RhYmxldCddLFxuICAgICAgICAnRGVsbCBTdHJlYWsnOiBbJ0RlbGwnLCAnU3RyZWFrJywgJ3RhYmxldCddLFxuICAgICAgICAnMDAxREwnOiBbJ0RlbGwnLCAnU3RyZWFrJywgJ3RhYmxldCddLFxuICAgICAgICAnMTAxREwnOiBbJ0RlbGwnLCAnU3RyZWFrIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dTMDEnOiBbJ0RlbGwnLCAnU3RyZWFrIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgU3RyZWFrIFBybyc6IFsnRGVsbCcsICdTdHJlYWsgUHJvJywgJ3RhYmxldCddLFxuICAgICAgICAnc3RyZWFrNyc6IFsnRGVsbCcsICdTdHJlYWsgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgU3RyZWFrIDcnOiBbJ0RlbGwnLCAnU3RyZWFrIDcnLCAndGFibGV0J10sXG4gICAgICAgICdEZWxsIFN0cmVhayAxMCBQcm8nOiBbJ0RlbGwnLCAnU3RyZWFrIDEwIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgVjA0Qic6IFsnRGVsbCcsICdTdHJlYWsgVjA0QicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgVmVudWUnOiBbJ0RlbGwnLCAnVmVudWUnXSxcbiAgICAgICAgJ0RlbGwgWENEMzUnOiBbJ0RlbGwnLCAnWENEMzUnXSxcbiAgICAgICAgJ1hDRDM1JzogWydEZWxsJywgJ1hDRDM1J10sXG4gICAgICAgICdpRHg3JzogWydEaWdtYScsICdpRHg3JywgJ3RhYmxldCddLFxuICAgICAgICAnaUR4MTAnOiBbJ0RpZ21hJywgJ2lEeDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnaUR4MTAgM0cnOiBbJ0RpZ21hJywgJ2lEeDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnRE0wMDlTSCc6IFsnRGlzbmV5IE1vYmlsZScsICdETTAwOVNIJ10sXG4gICAgICAgICdETTAxMFNIJzogWydEaXNuZXkgTW9iaWxlJywgJ0RNMDEwU0gnXSxcbiAgICAgICAgJ0RNMDEyU0gnOiBbJ0Rpc25leSBNb2JpbGUnLCAnRE0wMTJTSCddLFxuICAgICAgICAnRi0wOEQnOiBbJ0Rpc25leSBNb2JpbGUnLCAnRi0wOEQnXSxcbiAgICAgICAgJ1AtMDVEJzogWydEaXNuZXkgTW9iaWxlJywgJ1AtMDVEJ10sXG4gICAgICAgICdUYWJsZXQtUDI3JzogWydEcmFjb1RlaycsICdQMjcgVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnZWRnZWpyJzogWydFblRvdXJhZ2UnLCAnUG9ja2V0IGVER2UnLCAndGFibGV0J10sXG4gICAgICAgICdsOTdEJzogWydFUGFkJywgJ2w5N0QnLCAndGFibGV0J10sXG4gICAgICAgICdNNDMwMSc6IFsnRXN0b24nLCAnTUlEIE00MzAxJywgJ21lZGlhJ10sXG4gICAgICAgICdQMTBBTic6IFsnRXhwZXInLCAnRWFzeXBhZCBQMTBBTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ZJSC1GMFgnOiBbJ0ZJSCcsICdGMFgnXSxcbiAgICAgICAgJ0ZseSBJUTI2MCc6IFsnRmx5JywgJ0lRMjYwIEJsYWNrQmlyZCddLFxuICAgICAgICAnSVNXMTFGJzogWydGdWppdHN1JywgJ0Fycm93cyBaJ10sXG4gICAgICAgICdJU1cxM0YnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFonXSxcbiAgICAgICAgJ0lTMTJGJzogWydGdWppdHN1JywgJ0Fycm93cyBFUyddLFxuICAgICAgICAnRi0wMUQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFRhYiBMVEUnLCAndGFibGV0J10sXG4gICAgICAgICdGLTAzRCc6IFsnRnVqaXRzdScsICdBcnJvd3MgS2lzcyddLFxuICAgICAgICAnRi0wNUQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFggTFRFJ10sXG4gICAgICAgICdGLTA3RCc6IFsnRnVqaXRzdScsICdBcnJvd3MgXFx1MDBjM1xcdWZmZmRcXHUwMGMyXFx1MDBiYyddLFxuICAgICAgICAnRi0xMEQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFggRi0xMEQnXSxcbiAgICAgICAgJ0YtMTJDJzogWydGdWppdHN1JywgJ0dsb2JldHJvdHRlciddLFxuICAgICAgICAnZjEyYXJjJzogWydGdWppdHN1JywgJ0YxMmFyYyddLFxuICAgICAgICAnTTUzMic6IFsnRnVqaXRzdScsICdTdHlsaXN0aWMgTTUzMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dhcm1pbmZvbmUnOiBbJ0dhcm1pbi1Bc3VzJywgJ0dhcm1pbmZvbmUnXSxcbiAgICAgICAgJ0dhcm1pbi1Bc3VzIEExMCc6IFsnR2FybWluLUFzdXMnLCAnTnV2aWZvbmUgQTEwJ10sXG4gICAgICAgICdHYXJtaW4tQXN1cyBBNTAnOiBbJ0dhcm1pbi1Bc3VzJywgJ051dmlmb25lIEE1MCddLFxuICAgICAgICAnVFBBNjBXJzogWydHYXRld2F5JywgJ1RQQTYwVycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dlZWtzcGhvbmUgWkVSTyc6IFsnR2Vla3NwaG9uZScsICdaRVJPJ10sXG4gICAgICAgICdnZW1laSBHMic6IFsnR2VtZWknLCAnRzInLCAndGFibGV0J10sXG4gICAgICAgICdHZW1laSBHMic6IFsnR2VtZWknLCAnRzInLCAndGFibGV0J10sXG4gICAgICAgICdnZW1laSBHMyc6IFsnR2VtZWknLCAnRzMnLCAndGFibGV0J10sXG4gICAgICAgICdHZW1laSBHOSc6IFsnR2VtZWknLCAnRzknLCAndGFibGV0J10sXG4gICAgICAgICdHU21hcnQgRzEzMTdEJzogWydHaWdhYnl0ZScsICdHU21hcnQgRzEzMTdEJ10sXG4gICAgICAgICdHaWdhYnl0ZSBUQjEwMCc6IFsnR2lnYWJ5dGUnLCAnVEIxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdHTjEwMCc6IFsnR2lvbmVlJywgJ0dOMTAwJ10sXG4gICAgICAgICdHTjEwNSc6IFsnR2lvbmVlJywgJ0dOMTA1J10sXG4gICAgICAgICdHTjEwNic6IFsnR2lvbmVlJywgJ0dOMTA2J10sXG4gICAgICAgICdHTjIwMCc6IFsnR2lvbmVlJywgJ0dOMjAwJ10sXG4gICAgICAgICdHTjIwNSc6IFsnR2lvbmVlJywgJ0dOMjA1J10sXG4gICAgICAgICdHTjcwMFcnOiBbJ0dpb25lZScsICdHTjcwMFcnXSxcbiAgICAgICAgJ0dONzA4Vyc6IFsnR2lvbmVlJywgJ0dONzA4VyddLFxuICAgICAgICAnR29vZ2xlIElvbic6IFsnR29vZ2xlJywgJ0lvbiddLFxuICAgICAgICAnTmV4dXMgT25lJzogWydHb29nbGUnLCAnTmV4dXMgT25lJ10sXG4gICAgICAgICdOZXh1c09uZSc6IFsnR29vZ2xlJywgJ05leHVzIE9uZSddLFxuICAgICAgICAnSFRDIE5leHVzIE9uZSc6IFsnR29vZ2xlJywgJ05leHVzIE9uZSddLFxuICAgICAgICAnTmV4dXMgUyc6IFsnR29vZ2xlJywgJ05leHVzIFMnXSxcbiAgICAgICAgJ0dvb2dsZSBOZXh1cyBTJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnTmV4dXMgUyA0Ryc6IFsnR29vZ2xlJywgJ05leHVzIFMgNEcnXSxcbiAgICAgICAgJ0Rvb2RlcmJ1dHQtNC4wLjMtdjEnOiBbJ0dvb2dsZScsICdOZXh1cyBTIDRHJ10sXG4gICAgICAgICdOZXh1cyA3JzogWydHb29nbGUnLCAnTmV4dXMgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hhaWVyIEhXLVc5MTAnOiBbJ0hhaWVyJywgJ0hXLVc5MTAnXSxcbiAgICAgICAgJ1NOMTBUMSc6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkIFNOMTBUMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NOMTBUMic6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkIFNOMTBUMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hhbm5zQ29tYic6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnWDEnOiBbJ0hDTCcsICdNRSBYMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRCBTZXJhaWxzJzogWydIZXJvdGFiJywgJ0M4JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEIFNlcmlhbHMnOiBbJ0hlcm90YWInLCAnQzgnLCAndGFibGV0J10sXG4gICAgICAgICdDT1NNTyBEVU8nOiBbJ0hpc2NyZWVuJywgJ0Nvc21vIERVTycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hTLVU4JzogWydIaXNlbnNlJywgJ1U4J10sXG4gICAgICAgICdIUy1UOTInOiBbJ0hpc2Vuc2UnLCAnVDkyJ10sXG4gICAgICAgICdIUy1FODYwJzogWydIaXNlbnNlJywgJ0U4NjAnXSxcbiAgICAgICAgJ0hTLUU5MTAnOiBbJ0hpc2Vuc2UnLCAnRTkxMCddLFxuICAgICAgICAnSFMtRTkyNic6IFsnSGlzZW5zZScsICdFOTI2J10sXG5cbiAgICAgICAgJ0hTLUVHOTAwJzogWydIaXNlbnNlJywgJ0VHOTAwJ10sXG4gICAgICAgICdIUy1FVDkxOSc6IFsnSGlzZW5zZScsICdFVDkxOSddLFxuICAgICAgICAnRUc5NjhCJzogWydIaXNlbnNlJywgJ0VHOTY4QiddLFxuICAgICAgICAnSEtQSE9ORSBIOC0zRyc6IFsnSEtQaG9uZScsICdIOCAzRyddLFxuICAgICAgICAnSE9TSU4gVTInOiBbJ0hvc2luJywgJ1UyJ10sXG4gICAgICAgICdUb3VjaHBhZCc6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIUCBUb3VjaHBhZCc6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdjbSB0ZW5kZXJsb2luJzogWydIUCcsICdUb3VjaFBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ2Fva3AgdGVuZGVybG9pbic6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgQW1hemUgNEcnOiBbJ0hUQycsICdBbWF6ZSA0RyddLFxuICAgICAgICAnSFRDIFJ1YnknOiBbJ0hUQycsICdBbWF6ZSA0RyddLFxuICAgICAgICAnSFRDIEFtYXplIDRHKFJ1YnkpJzogWydIVEMnLCAnQW1hemUgNEcnXSxcbiAgICAgICAgJ0FtYXplIDRHJzogWydIVEMnLCAnQW1hemUgNEcnXSxcbiAgICAgICAgJ0hUQyBBcmlhJzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEFyaWEgQTYzODAnOiBbJ0hUQycsICdBcmlhJ10sXG4gICAgICAgICdIVEMgTGliZXJ0eSBBNjM4MCc6IFsnSFRDJywgJ0FyaWEnXSxcbiAgICAgICAgJ0hUQyBMaWJlcnR5JzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEE2MzY2JzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEJlZSc6IFsnSFRDJywgJ0JlZSddLFxuICAgICAgICAnSFRDIENoYUNoYSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIENoYUNoYSBBODEwZSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIENoYUNoYUNoYSBBODEwZSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIEE4MTBlJzogWydIVEMnLCAnQ2hhQ2hhJ10sXG4gICAgICAgICdIVEMgQTkxODgnOiBbJ0hUQycsICdUaWFueGknXSxcbiAgICAgICAgJ0hUQyBCcmF2byc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBBODE4Myc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBCZWF0cyBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBDRE1BJzogWydIVEMnLCAnRGVzaXJlJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFNNUyc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBTLk0uUyc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBDJzogWydIVEMnLCAnRGVzaXJlIEMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVIRCc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIERlc2lyZUhEIEE5MTkxJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdIVEMgRGVzaXJlSEQgQTkxOTInOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQgQTkxOTEnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBBOTE5MSc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIEE5MTkxIGZvciBBVCZUJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdIVEMgQTkxOTInOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIERlc2lyZSBTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVzUyc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlUyBTNTEwZSc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlUyBTNTEwYic6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFMgUzUxMGUnOiBbJ0hUQycsICdEZXNpcmUgUyddLFxuICAgICAgICAnSFRDIFM1MTBlJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgU2FnYSc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFYnOiBbJ0hUQycsICdEZXNpcmUgViddLFxuICAgICAgICAnSFRDIFQzMjh3JzogWydIVEMnLCAnRGVzaXJlIFYnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgVkMnOiBbJ0hUQycsICdEZXNpcmUgVkMnXSxcbiAgICAgICAgJ0hUQyBUMzI4ZCc6IFsnSFRDJywgJ0Rlc2lyZSBWQyddLFxuICAgICAgICAnSFRDIFQzMjh0JzogWydIVEMnLCAnRGVzaXJlIFZUJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFonOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZVonOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZVogQTcyNzInOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZSBaIEE3MjcyJzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0hUQyBWaXNpb24nOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIEE3Mjc1JzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0hUQyBEcmVhbSc6IFsnSFRDJywgJ0RyZWFtJ10sXG4gICAgICAgICdIVEMgUzcxMGQnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0hUQyBJbmNyZWRpYmxlIDInOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0hUQyBYNTE1ZCc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIFg1MTVtJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgWDUxNUMnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0QnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFVk8gM0QnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFVk8gM0QgR1NNJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPIDNEIFg1MTVhJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPIDNEIEdTTSBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTyAzRCBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTyAzRCBYNTE1TSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTzNEIFg1MTVhJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPM0QgWDUxNW0nOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0QgWDUxNW0nOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0Qgd2l0aCBCZWF0cyBBdWRpbyBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEV2byA0Ryc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnSFRDIEVWTyA0Ryc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnSFRDIFg1MTVFJzogWydIVEMnLCAnRVZPIDRHKyddLFxuICAgICAgICAnSFRDIEVWTyA0RysgRm9yIFNwcmludCc6IFsnSFRDJywgJ0VWTyA0RysnXSxcbiAgICAgICAgJ0hUQyBFVk8gNEcrKyBGb3IgU3ByaW50JzogWydIVEMnLCAnRVZPIDRHKyddLFxuICAgICAgICAnSFRDIEM3MTVjJzogWydIVEMnLCAnRVZPIERlc2lnbiA0RyddLFxuICAgICAgICAnSFRDIERlc2lnbiA0Ryc6IFsnSFRDJywgJ0VWTyBEZXNpZ24gNEcnXSxcbiAgICAgICAgJ0hUQyBFVk8gZGVzaWduIDRHJzogWydIVEMnLCAnRVZPIERlc2lnbiA0RyddLFxuICAgICAgICAnSFRDIEVWTyBEZXNpZ24gNEcnOiBbJ0hUQycsICdFVk8gRGVzaWduIDRHJ10sXG4gICAgICAgICdIVEMgRXZvIFNoaWZ0JzogWydIVEMnLCAnRVZPIFNoaWZ0J10sXG4gICAgICAgICdIVEMgRVZPIFNoaWZ0IDRHJzogWydIVEMnLCAnRVZPIFNoaWZ0J10sXG4gICAgICAgICdIVEMgQTMxMGUnOiBbJ0hUQycsICdFeHBsb3JlciddLFxuICAgICAgICAnSFRDIEV4cGxvcmVyJzogWydIVEMnLCAnRXhwbG9yZXInXSxcbiAgICAgICAgJ0hUQyBFeHBsb3JlciBBMzEwYic6IFsnSFRDJywgJ0V4cGxvcmVyJ10sXG4gICAgICAgICdIVEMgRXhwbG9yZXIgQTMxMGUnOiBbJ0hUQycsICdFeHBsb3JlciddLFxuICAgICAgICAnSFRDIFA1MTBlJzogWydIVEMnLCAnRmx5ZXInLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgRmx5ZXInOiBbJ0hUQycsICdGbHllcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBGbHllciBQNTEwZSc6IFsnSFRDJywgJ0ZseWVyJywgJ3RhYmxldCddLFxuICAgICAgICAnSFRDIEZseWVyIFA1MTInOiBbJ0hUQycsICdGbHllcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBGbHllciBQNTEyIE5BJzogWydIVEMnLCAnRmx5ZXInLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgUDUxNUUnOiBbJ0hUQycsICdGbHllciA0RycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBHcmF0aWEgQTYzODAnOiBbJ0hUQycsICdHcmF0aWEnXSxcbiAgICAgICAgJ0hUQyBIRCc6IFsnSFRDJywgJ0hEJ10sXG4gICAgICAgICdIVEMgSEQyJzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIVEMgSEQyIFQ4NTg1JzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIVEMgSEQyKExlbyknOiBbJ0hUQycsICdIRDInXSxcbiAgICAgICAgJ0hUQyBIRDcnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBUOTI5OSsnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBIRDcgZm9yIFNwcmludCc6IFsnSFRDJywgJ0hENyddLFxuICAgICAgICAnSFRDIEhENyA0RyBUOTI5OSBGb3IgQVQmVCc6IFsnSFRDJywgJ0hENyddLFxuICAgICAgICAnSFRDIEhENyA0RyBUOTI5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBUOTI5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBIRDdTIFQ5Mzk5Kyc6IFsnSFRDJywgJ0hEN3MnXSxcbiAgICAgICAgJ0hUQyBIRDdTIFQ5ODk5Kyc6IFsnSFRDJywgJ0hEN3MnXSxcbiAgICAgICAgJ0hUQyBUOTg5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDdzJ10sXG4gICAgICAgICdWaXRNb2QgRXh0cmFMaXRlIDEuNi41LmZ1bGxvZGV4IGZvciBIVEMgSEQ3IFBybyc6IFsnSFRDJywgJ0hENyBQcm8nXSxcbiAgICAgICAgJ0hUQyBIZXJvJzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnSFRDIEhFUk8nOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIVEMgSGVybyBDRE1BJzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnSFRDIEhFUk8gQ0RNQSc6IFsnSFRDJywgJ0hlcm8nXSxcbiAgICAgICAgJ0hUQyBIRVJPMjAwJzogWydIVEMnLCAnSGVybyAyMDAnXSxcbiAgICAgICAgJ0hUQyBIZXJvIFMnOiBbJ0hUQycsICdIZXJvIFMnXSxcbiAgICAgICAgJ0hUQyBJTUFHSU8nOiBbJ0hUQycsICdJbWFnaW8nXSxcbiAgICAgICAgJ0hUQyBJbmNyZWRpYmxlJzogWydIVEMnLCAnSW5jcmVkaWJsZSddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUzcxMEUnOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0hUQyBTNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyBTNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyBzNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGVTIFM3MTBlJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdIVEMgSW5jcmVkaWJsZSBTIHdpdGggQmVhdHMgQXVkaW8nOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0hUQyBWaXZvJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdIVEMgSW5ub3ZhdGlvbic6IFsnSFRDJywgJ0lubm92YXRpb24nXSxcbiAgICAgICAgJ0hUQyBJbnNwaXJlIDRHJzogWydIVEMnLCAnSW5zcGlyZSA0RyddLFxuICAgICAgICAnSFRDIEhENyBJbnNwaXJlIDRHIEZvciBWb2RhZm9uZSc6IFsnSFRDJywgJ0luc3BpcmUgNEcnXSxcbiAgICAgICAgJ0hUQyBQNzE1YSc6IFsnSFRDJywgJ0pldHN0cmVhbScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBMZWdlbmQnOiBbJ0hUQycsICdMZWdlbmQnXSxcbiAgICAgICAgJ0hUQyBNYWdpYyc6IFsnSFRDJywgJ01hZ2ljJ10sXG4gICAgICAgICdIVEMgU2FwcGhpcmUnOiBbJ0hUQycsICdNYWdpYyddLFxuICAgICAgICAnSFRDIExleGlrb24nOiBbJ0hUQycsICdNZXJnZSddLFxuICAgICAgICAnSFRDIE9uZSBTJzogWydIVEMnLCAnT25lIFMnXSxcbiAgICAgICAgJ0hUQyBaNTIwZSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdIVEMgT25lIFYnOiBbJ0hUQycsICdPbmUgViddLFxuICAgICAgICAnSFRDIFQzMjBlJzogWydIVEMnLCAnT25lIFYnXSxcbiAgICAgICAgJ0hUQyBPbmUgWCc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdIVEMgUzcyMGUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnSFRDIEVuZGVhdm91ci1MUyc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdIVEMgT25lIFhMJzogWydIVEMnLCAnT25lIFhMJ10sXG4gICAgICAgICdIVEMgWDcxMGEnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXInOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgWDcxMGUnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgWDcxMHMnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgNEcgWDcxMGUnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBQSDM5MTAwJzogWydIVEMnLCAnUmFpZGVyIDRHJ10sXG4gICAgICAgICdIVEMgSG9saWRheSc6IFsnSFRDJywgJ1JhaWRlciA0RyddLFxuICAgICAgICAnSFRDIFZlbG9jaXR5IDRHIFg3MTBzJzogWydIVEMnLCAnUmFpZGVyIDRHJ10sXG4gICAgICAgICdIVEMgUmV6b3VuZCc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ0hUQyBSaHltZSBTNTEwYic6IFsnSFRDJywgJ1JoeW1lJ10sXG4gICAgICAgICdIVEMgUzUxMGInOiBbJ0hUQycsICdSaHltZSddLFxuICAgICAgICAnSFRDIEJsaXNzJzogWydIVEMnLCAnUmh5bWUnXSxcbiAgICAgICAgJ0hUQyBCbGlzcyBTNTEwYic6IFsnSFRDJywgJ1JoeW1lJ10sXG4gICAgICAgICdIVEMgU2Fsc2EgQzUxMGUnOiBbJ0hUQycsICdTYWxzYSddLFxuICAgICAgICAnSFRDIEM1MTBlJzogWydIVEMnLCAnU2Fsc2EnXSxcbiAgICAgICAgJ0hUQyBaNzEwYSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFo3MTBlJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgWjcxMHQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24nOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWjcxMCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwYSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwRSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSBGb3IgQVQmVCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSB3aXRoIEJlYXRzIEF1ZGlvJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIHdpdGggQmVhdHMgQXVkaW8gWjcxMGUnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBUYXN0ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFB5cmFtaWQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBQeXJhbWlkIFo3MTBhJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgUHlyYW1pZCBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiA0Ryc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiA0RyB3aXRoIEJlYXRzIEF1ZGlvJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIEcxNCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBHMTQgZm9yIEFUJlQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBHMTQgc2Vuc2F0aW9uJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YRSBCZWF0cyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhFIEJlYXRzIFo3MTVhJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uWEUgQmVhdHMgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YRSBaNzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSBCZWF0cyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhFIHdpdGggQmVhdHMgQXVkaW8nOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVhJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIEp1cmVkcm9pZCBYRSBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIFhFIFdpdGggQmVhdHMgQXVkaW8gWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gNEcgWEUgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgWDMxNUUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEwnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YTCBCZWF0cyBYMzE1Yic6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhMIEJlYXRzIFgzMTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhMJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIFhMIHdpdGggQmVhdHMgQXVkaW8gWDMxNWInOiBbJ0hUQycsICdTZW5zYXRpb24gWEwnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEwgd2l0aCBCZWF0cyBBdWRpbyBYMzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFJ1bm55bWVkZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIEcyMSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFBIMDYxMzAnOiBbJ0hUQycsICdTdGF0dXMnXSxcbiAgICAgICAgJ0hUQyBTdGF0dXMnOiBbJ0hUQycsICdTdGF0dXMnXSxcbiAgICAgICAgJ0hUQyBUYXR0b28nOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ0hUQyBUQVRUT08gQTMyODgnOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ0hUQyBjbGljayc6IFsnSFRDJywgJ1RhdHRvbyddLFxuICAgICAgICAnSFRDIFgzMTBlJzogWydIVEMnLCAnVGl0YW4nXSxcbiAgICAgICAgJ0hUQyBUNzM3Myc6IFsnSFRDJywgJ1RvdWNoIFBybyBJSSddLFxuICAgICAgICAnSFRDIFRodW5kZXJCb2x0JzogWydIVEMnLCAnVGh1bmRlckJvbHQnXSxcbiAgICAgICAgJ0hUQyBNZWNoYSc6IFsnSFRDJywgJ1RodW5kZXJCb2x0J10sXG4gICAgICAgICdIVEMgVmVsb2NpdHkgNEcnOiBbJ0hUQycsICdWZWxvY2l0eSA0RyddLFxuICAgICAgICAnSFRDIFdpbGRmaXJlJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZSBBMzMzMyc6IFsnSFRDJywgJ1dpbGRmaXJlJ10sXG4gICAgICAgICdIVEMgQTMzNjYnOiBbJ0hUQycsICdXaWxkZmlyZSddLFxuICAgICAgICAnSFRDIEEzMzgwJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZVMnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0h0YyBXaWxkZmlyZSBzJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnSFRDIFdpbGRmaXJlIFMgQTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyBBNTEwYic6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZVMgQTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmVTIEE1MTBiJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnaHRjIHdpbGRmaXJlIHMgYTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyBBNTE1Yyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwYSc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwZSc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwYyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQ1gwNkhUJzogWydIVEMnLCAnRGVzaXJlJ10sXG4gICAgICAgICdIVEMgQTYzOTAnOiBbJ0hUQycsICdBNjM5MCddLFxuICAgICAgICAnSFRDIEE4MTgwJzogWydIVEMnLCAnQTgxODAnXSxcbiAgICAgICAgJ0hUQyBQRzc2Mic6IFsnSFRDJywgJ1BHNzYyJ10sXG4gICAgICAgICdIVEMgUzcxNWUnOiBbJ0hUQycsICdTNzE1ZSddLFxuICAgICAgICAnSFRDIFM3MjB0JzogWydIVEMnLCAnUzcyMHQnXSxcbiAgICAgICAgJ0hUQyBaNTEwZCc6IFsnSFRDJywgJ1o1MTBkJ10sXG4gICAgICAgICdIVEMgWjU2MGUnOiBbJ0hUQycsICdaNTYwZSddLFxuICAgICAgICAnSFRDIFZMRSBVJzogWydIVEMnLCAnT25lIFMnXSxcbiAgICAgICAgJ0hUQyBWTEUjVSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdIVEMgVklFIFUnOiBbJ0hUQycsICdPbmUgUyddLFxuICAgICAgICAnSFRDIEVWQSBVTCc6IFsnSFRDJywgJ09uZSBWJ10sXG4gICAgICAgICdIVEMgRU5SIFUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnRU5SIFUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnRW5kZWF2b3JVJzogWydIVEMnLCAnT25lIFgnXSxcbiAgICAgICAgJ0xpYmVydHknOiBbJ0hUQycsICdBcmlhJ10sXG4gICAgICAgICdEZXNpcmUnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJ0Rlc2lyZSBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnZGVzaXJlIGhkJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdEZXNpcmUgSEQnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0RlZGlyZSBIRCc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnRGVzaXJlIEhkIChhY2UpJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdEZXNpcmUgUyc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdEZXNpcmVTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0Rlc2lyZSBTYWdhJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0Rlc2lyZSBaJzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0RyZWFtJzogWydIVEMnLCAnRHJlYW0nXSxcbiAgICAgICAgJ0Ryb2lkIEluY3JlZGlibGUnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdFVk8nOiBbJ0hUQycsICdFVk8nXSxcbiAgICAgICAgJ0V2byBIRDInOiBbJ0hUQycsICdFVk8gSEQnXSxcbiAgICAgICAgJ0V2byAzRCBCZWF0cyBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRXZvIDNEIEdTTSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRVZPIDNEIFg1MTVtJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdFVk8zRCBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRXZvIDRHJzogWydIVEMnLCAnRVZPIDRHJ10sXG4gICAgICAgICdFVk8gNEcnOiBbJ0hUQycsICdFVk8gNEcnXSxcbiAgICAgICAgJ3Bob3Rvbic6IFsnSFRDJywgJ0hEIG1pbmknXSxcbiAgICAgICAgJ0dpbkRyZWFtXFwvR2luTWFnaWMnOiBbJ0hUQycsICdEcmVhbSddLFxuICAgICAgICAnSEQyJzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIRDcgIFBybyc6IFsnSFRDJywgJ0hENyBQcm8nXSxcbiAgICAgICAgJ0hlcm8nOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIRVJPIENETUEnOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIRVJPMjAwJzogWydIVEMnLCAnSGVybyAyMDAnXSxcbiAgICAgICAgJ0luY3JlZGlibGUnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdJbmNyZWRpYmxlIDInOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0luY3JlZGlibGUgUyc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSW5jcmVkaWJsZVMgUzcxMGUnOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0luY3JlZGlibGVTJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdJbnNwaXJlIEhEJzogWydIVEMnLCAnSW5zcGlyZSA0RyddLFxuICAgICAgICAnSW5zcGlyZSA0Ryc6IFsnSFRDJywgJ0luc3BpcmUgNEcnXSxcbiAgICAgICAgJ0xlZ2VuZCc6IFsnSFRDJywgJ0xlZ2VuZCddLFxuICAgICAgICAnTmV4dXNIRDInOiBbJ0hUQycsICdIRDInXSxcbiAgICAgICAgJ05leHVzIEhEMic6IFsnSFRDJywgJ0hEMiddLFxuICAgICAgICAnRG9jb21vIEhULTAzQSc6IFsnSFRDJywgJ01hZ2ljJ10sXG4gICAgICAgICdNSVVJLnVzIFNlbnNhdGlvbiA0Ryc6IFsnSFRDJywgJ1NlbnNhdGlvbiA0RyddLFxuICAgICAgICAnU2lSRiBEcmVhbSc6IFsnSFRDJywgJ0RyZWFtJ10sXG4gICAgICAgICdQeXJhbWlkJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdTZW5zYXRpb24nOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1NlbnNhdGlvbiBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnU2Vuc2F0aW9uIDRHJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdTZW5zYXRpb24gNGcnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1RyaXBOaUNFIFB5cmFtaWQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1NlbnNhdGlvblhFIEJlYXRzIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdTZW5zYXRpb25YTCBCZWF0cyBYMzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnQ2xpY2snOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ1dpbGRmaXJlJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ1dpbGRmaXJlIFMnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdXaWxkZmlyZSBTIEE1MTBlJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnU3ByaW50IEFQWDUxNUNLVCc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnU3ByaW50IEFQQTkyOTJLVCc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnU3ByaW50IEFQQTczNzNLVCc6IFsnSFRDJywgJ0VWTyBTaGlmdCA0RyddLFxuICAgICAgICAnU3ByaW50IEFQQzcxNUNLVCc6IFsnSFRDJywgJ0VWTyBEZXNpZ24gNEcnXSxcbiAgICAgICAgJ0EzMzgwJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0E2Mjc3JzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnYTcyNzInOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnQTcyNzIrKEhUQyBEZXNpcmVaKSc6IFsnSFRDJywgJ0Rlc2lyZSBaJ10sXG4gICAgICAgICdTMzFIVCc6IFsnSFRDJywgJ0FyaWEnXSxcbiAgICAgICAgJ1M3MTBkJzogWydIVEMnLCAnRHJvaWQgSW5jcmVkaWJsZSAyJ10sXG4gICAgICAgICdTNzEwRCc6IFsnSFRDJywgJ0Ryb2lkIEluY3JlZGlibGUgMiddLFxuICAgICAgICAnWDA2SFQnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJzAwMUhUJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdYMzI1YSc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdaNTIwbSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdaNzEwJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnVDkxOTloJzogWydIVEMnLCAnVDkxOTloJ10sXG4gICAgICAgICdIVEMgUzYxMGQnOiBbJ0hUQycsICdTNjEwZCddLFxuICAgICAgICAnQURSNjIwMCc6IFsnSFRDJywgJ0Ryb2lkIEVyaXMnXSxcbiAgICAgICAgJ0FEUjYzMDAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdBRFI2MzI1VlcnOiBbJ0hUQycsICdNZXJnZSddLFxuICAgICAgICAnQURSNjMzMFZXJzogWydIVEMnLCAnUmh5bWUnXSxcbiAgICAgICAgJ0FEUjYzNTAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0FEUjY0MDBMJzogWydIVEMnLCAnVGh1bmRlcmJvbHQgNEcnXSxcbiAgICAgICAgJ0FEUjY0MDBMIDRHJzogWydIVEMnLCAnVGh1bmRlcmJvbHQgNEcnXSxcbiAgICAgICAgJ0FEUjY0MTBMVlcgNEcnOiBbJ0hUQycsICdGaXJlYmFsbCddLFxuICAgICAgICAnQURSNjQyNUxWVyc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ0FEUjY0MjVMVlcgNEcnOiBbJ0hUQycsICdSZXpvdW5kJ10sXG4gICAgICAgICdDb3F1ZXR0aXNoIFJlZCc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ1BCOTk0MDAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdwY2RhZHI2MzUwJzogWydIVEMnLCAnRHJvaWQgSW5jcmVkaWJsZSAyJ10sXG4gICAgICAgICdQQzM2MTAwJzogWydIVEMnLCAnRVZPIDRHJ10sXG4gICAgICAgICdQRzA2MTAwJzogWydIVEMnLCAnRVZPIFNoaWZ0IDRHJ10sXG4gICAgICAgICdQRzQxMjAwJzogWydIVEMnLCAnRVZPIFZpZXcgNEcnLCAndGFibGV0J10sXG4gICAgICAgICdQRzg2MTAwJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdQRzg2MTAwMDAnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ1BINDQxMDAnOiBbJ0hUQycsICdFVk8gRGVzaWduIDRHJ10sXG4gICAgICAgICdQSjgzMTAwJzogWydIVEMnLCAnT25lIFgnXSxcbiAgICAgICAgJ0lTVzExSFQnOiBbJ0hUQycsICdFVk8gNEcnXSxcbiAgICAgICAgJ0lTVzEySFQnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0lTVzEzSFQnOiBbJ0hUQycsICdKJ10sXG4gICAgICAgICdVU0NDQURSNjI3NVVTIENhcnJpZXIgSUQgNDUnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJ1VTQ0NBRFI2Mjg1VVMnOiBbJ0hUQycsICdIZXJvIFMnXSxcbiAgICAgICAgJ1VTQ0NBRFI2MzI1VVMgQ2FycmllciBJRCA0NSc6IFsnSFRDJywgJ01lcmdlJ10sXG4gICAgICAgICdNZWRpYVBhZCc6IFsnSHVhd2VpJywgJ01lZGlhUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnSHVhd2VpIE1lZGlhUGFkJzogWydIdWF3ZWknLCAnTWVkaWFQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIVUFXRUkgTWVkaWFQYWQnOiBbJ0h1YXdlaScsICdNZWRpYVBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBTNy0zMTJ1JzogWydIdWF3ZWknLCAnTWVkaWFQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdNZWRpYVBhZCAxMCBGSEQnOiBbJ0h1YXdlaScsICdNZWRpYVBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBDODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg1MDBTJzogWydIdWF3ZWknLCAnQzg1MDAnXSxcbiAgICAgICAgJ0h1YXdlaSBDODYwMCc6IFsnSHVhd2VpJywgJ0M4NjAwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnSHVhd2VpIEM4NjUwKyc6IFsnSHVhd2VpJywgJ0M4NjUwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIEM4ODEwJzogWydIdWF3ZWknLCAnQXNjZW5kIEczMDAnXSxcbiAgICAgICAgJ0h1YXdlaSBDODgxMic6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgxMiddLFxuICAgICAgICAnSHVhd2VpIEM4ODEyRSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgxMiddLFxuICAgICAgICAnSHVhd2VpIEM4ODI1RCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgyNUQnXSxcbiAgICAgICAgJ0h1YXdlaSBDODg2MEUnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnSHVhd2VpIE04MzUnOiBbJ0h1YXdlaScsICdNODM1J10sXG4gICAgICAgICdIdWF3ZWkgTTg2MCc6IFsnSHVhd2VpJywgJ0FzY2VuZCddLFxuICAgICAgICAnSHVhd2VpIE05MjEnOiBbJ0h1YXdlaScsICdNOTIxJ10sXG4gICAgICAgICdIdWF3ZWkgUzg1MjAnOiBbJ0h1YXdlaScsICdTODUyMCddLFxuICAgICAgICAnSHVhd2VpIFM4NjAwJzogWydIdWF3ZWknLCAnUzg2MDAnXSxcbiAgICAgICAgJ0h1YXdlaSBUODMwMCc6IFsnSHVhd2VpJywgJ1Q4MzAwJ10sXG4gICAgICAgICdIdWF3ZWkgVDg2MDAnOiBbJ0h1YXdlaScsICdUODYwMCddLFxuICAgICAgICAnSHVhd2VpIFQ4ODMwJzogWydIdWF3ZWknLCAnVDg4MzAnXSxcbiAgICAgICAgJ1Q4ODMwJzogWydIdWF3ZWknLCAnVDg4MzAnXSxcbiAgICAgICAgJ1Q4NjIwJzogWydIdWF3ZWknLCAnVDg2MjAnXSxcbiAgICAgICAgJ0h1YXdlaSBUODgyOCc6IFsnSHVhd2VpJywgJ1Q4ODI4J10sXG4gICAgICAgICdIdWF3ZWkgVTgyMjAnOiBbJ0h1YXdlaScsICdVODIyMCddLFxuICAgICAgICAnSHVhd2VpIHU4NTAwJzogWydIdWF3ZWknLCAnSURFT1MgWDInXSxcbiAgICAgICAgJ0h1YXdlaSBVODgxNSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBHMzAwJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4MjVEJzogWydIdWF3ZWknLCAnQXNjZW5kIEczMzBEJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4NTAnOiBbJ0h1YXdlaScsICdWaXNpb24nXSxcbiAgICAgICAgJ0h1YXdlaSBVODY1Mic6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4MDAtNTEnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIFU4ODE4JzogWydIdWF3ZWknLCAnQXNjZW5kIEczMDAnXSxcbiAgICAgICAgJ0h1YXdlaSBVOTAwMCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBYJ10sXG4gICAgICAgICdIdWF3ZWkgSURFT1MgVTg1MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYMiddLFxuICAgICAgICAnSHVhd2VpIElERU9TIFU4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ0h1YXdlaSBJREVPUyBYMyc6IFsnSHVhd2VpJywgJ0lERU9TIFgzJ10sXG4gICAgICAgICdIdWF3ZWkgSWRlb3MgWDUnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIElkZW9zIFg1IDEuMTIuOShyZXQ0cnQpJzogWydIdWF3ZWknLCAnSURFT1MgWDUnXSxcbiAgICAgICAgJ0h1YXdlaSBTT05JQyc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdIdWF3ZWkgODEwMC05JzogWydIdWF3ZWknLCAnVTgxMDAnXSxcbiAgICAgICAgJ0ZVU0lPTmlkZW9zJzogWydIdWF3ZWknLCAnSURFT1MnXSxcbiAgICAgICAgJ0duYXBwbyBJZGVvcyc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdJZGVvcyc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdJREVPUyBYNSc6IFsnSHVhd2VpJywgJ0lERU9TIFg1J10sXG4gICAgICAgICdJZGVvcyBTNyc6IFsnSHVhd2VpJywgJ0lERU9TIFM3JywgJ3RhYmxldCddLFxuICAgICAgICAnSURFT1MgUzcnOiBbJ0h1YXdlaScsICdJREVPUyBTNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lERU9TIFM3IFNsaW0nOiBbJ0h1YXdlaScsICdJREVPUyBTNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBTNyc6IFsnSHVhd2VpJywgJ0lERU9TIFM3JywgJ3RhYmxldCddLFxuICAgICAgICAnU09OSUMnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnS3lpdnN0YXIgQXF1YSc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdMdWNreSBVbHRyYSBTb25pYyBVODY1MCc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdUdXJrY2VsbCBUMjAnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnTVRDIDk1MCc6IFsnSHVhd2VpJywgJ1U4MTYwJ10sXG4gICAgICAgICdNVEMgOTU1JzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ01UQyBFdm8nOiBbJ0h1YXdlaScsICdDODUwMCddLFxuICAgICAgICAnTVRDIEFuZHJvaWQnOiBbJ0h1YXdlaScsICdVODExMCddLFxuICAgICAgICAnUzMxSFcnOiBbJ0h1YXdlaScsICdQb2NrZXQgV2lGaSBTJ10sXG4gICAgICAgICdTNDFIVyc6IFsnSHVhd2VpJywgJ1BvY2tldCBXaUZpIFMgSUknXSxcbiAgICAgICAgJzAwN0hXJzogWydIdWF3ZWknLCAnVmlzaW9uJ10sXG4gICAgICAgICdVTTg0MCc6IFsnSHVhd2VpJywgJ0V2b2x1dGlvbiddLFxuICAgICAgICAnTTg2MCc6IFsnSHVhd2VpJywgJ0FzY2VuZCddLFxuICAgICAgICAnTTg2NSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBJSSddLFxuICAgICAgICAnTTg4Nic6IFsnSHVhd2VpJywgJ0dsb3J5J10sXG4gICAgICAgICdDODE1MCc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdjODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdDODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdDODUwMFMnOiBbJ0h1YXdlaScsICdDODUwMCddLFxuICAgICAgICAnQzg2MDAnOiBbJ0h1YXdlaScsICdDODYwMCddLFxuICAgICAgICAnYzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnQzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnYzg4MDAnOiBbJ0h1YXdlaScsICdDODgwMCddLFxuICAgICAgICAnQzg4MDAnOiBbJ0h1YXdlaScsICdDODgwMCddLFxuICAgICAgICAnYzg4MTAnOiBbJ0h1YXdlaScsICdBc2NlbmQgRzMwMEMnXSxcbiAgICAgICAgJ0M4ODEyJzogWydIdWF3ZWknLCAnQXNjZW5kIEM4ODEyJ10sXG4gICAgICAgICdTODYwMCc6IFsnSHVhd2VpJywgJ1M4NjAwJ10sXG4gICAgICAgICdVODEwMCc6IFsnSHVhd2VpJywgJ1U4MTAwJ10sXG4gICAgICAgICdVODExMCc6IFsnSHVhd2VpJywgJ1U4MTEwJ10sXG4gICAgICAgICd1ODEyMCc6IFsnSHVhd2VpJywgJ1U4MTIwJ10sXG4gICAgICAgICdVODEyMCc6IFsnSHVhd2VpJywgJ1U4MTIwJ10sXG4gICAgICAgICdVODE4MCc6IFsnSHVhd2VpJywgJ0lERU9TIFgxJ10sXG4gICAgICAgICdVODIyMCc6IFsnSHVhd2VpJywgJ1B1bHNlJ10sXG4gICAgICAgICdVODMwMCc6IFsnSHVhd2VpJywgJ1U4MzAwJ10sXG4gICAgICAgICdVODM1MCc6IFsnSHVhd2VpJywgJ0JvdWxkZXInXSxcbiAgICAgICAgJ1U4MTUwJzogWydIdWF3ZWknLCAnSURFT1MnXSxcbiAgICAgICAgJ1U4MTYwJzogWydIdWF3ZWknLCAnVTgxNjAnXSxcbiAgICAgICAgJ1U4NTAwJzogWydIdWF3ZWknLCAnSURFT1MgWDInXSxcbiAgICAgICAgJ1U4NTAwIEhpUVEnOiBbJ0h1YXdlaScsICdVODUwMCBIaVFRIEVkaXRpb24nXSxcbiAgICAgICAgJ1U4NTEwJzogWydIdWF3ZWknLCAnSURFT1MgWDMnXSxcbiAgICAgICAgJ3U4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ1U4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ1U4NjUwLTEnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnVTg2NjAnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAndTg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnVTg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnVTg4MDArJzogWydIdWF3ZWknLCAnSURFT1MgWDUnXSxcbiAgICAgICAgJ1U4ODAwWCc6IFsnSHVhd2VpJywgJ0lERU9TIFg1J10sXG4gICAgICAgICdVODgwMHBybyc6IFsnSHVhd2VpJywgJ0lERU9TIFg1IFBybyddLFxuICAgICAgICAnVTg4MDBQUk8nOiBbJ0h1YXdlaScsICdJREVPUyBYNSBQcm8nXSxcbiAgICAgICAgJ1U4ODAwUHJvJzogWydIdWF3ZWknLCAnSURFT1MgWDUgUHJvJ10sXG4gICAgICAgICd1ODgwMHBybyc6IFsnSHVhd2VpJywgJ0lERU9TIFg1IFBybyddLFxuICAgICAgICAnVTg4MDAgUHJvJzogWydIdWF3ZWknLCAnSURFT1MgWDUgUHJvJ10sXG4gICAgICAgICdVODgxOCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBHMzAwJ10sXG4gICAgICAgICdVODg1MCc6IFsnSHVhd2VpJywgJ1Zpc2lvbiddLFxuICAgICAgICAndTg4NjAnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnVTg4NjAnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnVTkwMDAnOiBbJ0h1YXdlaScsICdBc2NlbmQgWCddLFxuICAgICAgICAnVTkyMDAnOiBbJ0h1YXdlaScsICdBc2NlbmQgUDEnXSxcbiAgICAgICAgJ1U5MjAwLTEnOiBbJ0h1YXdlaScsICdBc2NlbmQgUDEnXSxcbiAgICAgICAgJ1U5NTAwJzogWydIdWF3ZWknLCAnQXNjZW5kIEQxJ10sXG4gICAgICAgICdVOTUwMUwnOiBbJ0h1YXdlaScsICdBc2NlbmQgRCBMVEUnXSxcbiAgICAgICAgJ1U5NTEwJzogWydIdWF3ZWknLCAnQXNjZW5kIEQgcXVhZCddLFxuICAgICAgICAnVTk1MTBFJzogWydIdWF3ZWknLCAnQXNjZW5kIEQgcXVhZCddLFxuICAgICAgICAnQ29tZXQnOiBbJ0h1YXdlaScsICdDb21ldCddLFxuICAgICAgICAnR1MwMic6IFsnSHVhd2VpJywgJ0hvbm9yJ10sXG4gICAgICAgICdHUzAzJzogWydIdWF3ZWknLCAnQXNjZW5kIFAxJ10sXG4gICAgICAgICdEcm9uaVgtMC41JzogWydIdWF3ZWknLCAnVTgxODAnXSxcbiAgICAgICAgJ01UUy1TUDEwMSc6IFsnSHVhd2VpJywgJ0M4NTExJ10sXG4gICAgICAgICdUU1AyMSc6IFsnSHVhd2VpJywgJ1U4MTEwJ10sXG4gICAgICAgICdIWVVOREFJIEg2JzogWydIeXVuZGFpJywgJ1N0b3JtIEg2J10sXG4gICAgICAgICdpQmFsbCBTbGlkZSBpNzAxMSc6IFsnaUJhbGwnLCAnU2xpZGUgaTcwMTEnXSxcbiAgICAgICAgJ05ldFRBQiBSVU5FJzogWydJY29uQml0JywgJ05ldFRhYiBSdW5lJywgJ3RhYmxldCddLFxuICAgICAgICAnRDcwVyc6IFsnSWNvbycsICdENzBXJywgJ3RhYmxldCddLFxuICAgICAgICAnRDgwJzogWydJY29vJywgJ0Q4MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lORk9CQVIgQTAxJzogWydpaWRhJywgJ0lORk9CQVIgQTAxJ10sXG4gICAgICAgICdNMDA5Ric6IFsnSW5mb3RtaWMnLCAnTTAwOUYnXSxcbiAgICAgICAgJ0FaMjEwQSc6IFsnSW50ZWwnLCAnQVoyMTBBJ10sXG4gICAgICAgICdBWjIxMEInOiBbJ0ludGVsJywgJ0FaMjEwQiddLFxuICAgICAgICAnQVo1MTAnOiBbJ0ludGVsJywgJ0FaNTEwJ10sXG4gICAgICAgICdncmVlbnJpZGdlJzogWydJbnRlbCcsICdHcmVlbiBSaWRnZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lOUSBDbG91ZCBUb3VjaCc6IFsnSU5RJywgJ0Nsb3VkIFRvdWNoJ10sXG4gICAgICAgICdJTFQtTVgxMDAnOiBbJ2lSaXZlcicsICdUYWInLCAndGFibGV0J10sXG4gICAgICAgICdJVklPX0RFMzgnOiBbJ0l2aW8nLCAnREUzOCddLFxuICAgICAgICAnSlktRzInOiBbJ0ppYXl1JywgJ0cyJ10sXG4gICAgICAgICdKWEQgUzYwMVdJRkknOiBbJ0pYRCcsICdTNjAxIFdJRkknLCAnbWVkaWEnXSxcbiAgICAgICAgJ0EyJzogWydLYWthVGVjaCcsICdBMiddLFxuICAgICAgICAnRDkxJzogWydLSycsICdEOTEnLCAndGFibGV0J10sXG4gICAgICAgICdLMDgwJzogWydLb2JvJywgJ0swODAnLCAnZXJlYWRlciddLFxuICAgICAgICAnQTEwNic6IFsna29vYmVlJywgJ0ExNjAnXSxcbiAgICAgICAgJ0tQVCBBOSc6IFsnS1BUJywgJ0E5J10sXG4gICAgICAgICdFVi1TMTAwJzogWydLdHRlY2gnLCAnVGFrZSBFVi1TMTAwJ10sXG4gICAgICAgICdLTS1TMTIwJzogWydLdHRlY2gnLCAnVGFrZSAyIEtNLVMxMjAnXSxcbiAgICAgICAgJ0tNLVMyMDAnOiBbJ1RBS0UnLCAnSmFudXMgS00tUzIwMCddLFxuICAgICAgICAnS00tUzIyMCc6IFsnS3R0ZWNoJywgJ1Rha2UgVGFjaHkgS00tUzIyMCddLFxuICAgICAgICAnS3lvYm8gbWlyYXNvbCBlUmVhZGVyJzogWydLeW9ibycsICdlUmVhZGVyJywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ0lTVzExSyc6IFsnS3lvY2VyYScsICdEaWdubyddLFxuICAgICAgICAnSkMtS1NQODAwMCc6IFsnS3lvY2VyYScsICdFY2hvJ10sXG4gICAgICAgICdLU1A4MDAwJzogWydLeW9jZXJhJywgJ0VjaG8nXSxcbiAgICAgICAgJ1ppbyc6IFsnS3lvY2VyYScsICdaaW8nXSxcbiAgICAgICAgJ0M1MTU1JzogWydLeW9jZXJhJywgJ0M1MTU1J10sXG4gICAgICAgICdDNTE3MCc6IFsnS3lvY2VyYScsICdDNTE3MCddLFxuICAgICAgICAnTTkzMDAnOiBbJ0t5b2NlcmEnLCAnTTkzMDAnXSxcbiAgICAgICAgJ0U4MDAnOiBbJ0stVG91Y2gnLCAnRTgwMCddLFxuICAgICAgICAnVzYwNic6IFsnSy1Ub3VjaCcsICdXNjA2J10sXG4gICAgICAgICdLLVRvdWNoIFQ2MTknOiBbJ0stVG91Y2gnLCAnVDYxOSddLFxuICAgICAgICAnSy1Ub3VjaCBXNjE5JzogWydLLVRvdWNoJywgJ1c2MTknXSxcbiAgICAgICAgJ0stVG91Y2ggVzY1MCc6IFsnSy1Ub3VjaCcsICdXNjUwJ10sXG4gICAgICAgICdXNzAwJzogWydLLVRvdWNoJywgJ1c3MDAnXSxcbiAgICAgICAgJ1c4MDAnOiBbJ0stVG91Y2gnLCAnVzgwMCddLFxuICAgICAgICAnVzgwNic6IFsnSy1Ub3VjaCcsICdXODA2J10sXG4gICAgICAgICdXODA4JzogWydLLVRvdWNoJywgJ1c4MDgnXSxcbiAgICAgICAgJ1c4MTAnOiBbJ0stVG91Y2gnLCAnVzgxMCddLFxuICAgICAgICAnWDkwMCc6IFsnTGF2YScsICdYT0xPIFg5MDAnXSxcbiAgICAgICAgJ0xlbm92byBBNzk4dCc6IFsnTGVub3ZvJywgJ0E3OTh0J10sXG4gICAgICAgICdMRU5PVk8tTGVub3ZvLUEyODh0JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMjg4J10sXG4gICAgICAgICdUaGlua1BhZCBUYWJsZXQnOiBbJ0xlbm92bycsICdUaGlua1BhZCBUYWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdLMSc6IFsnTGVub3ZvJywgJ0lkZWFQYWQgSzEnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhcGFkIFMxMC0zVCc6IFsnTGVub3ZvJywgJ0lkZWFQYWQgUzEwLTNUJywgJ3RhYmxldCddLFxuICAgICAgICAnUzIwMDVBLUgnOiBbJ0xlbm92bycsICdTMjAwNUEnXSxcbiAgICAgICAgJ0lkZWFUYWIgUzIwMDdBLUQnOiBbJ0xlbm92bycsICdJZGVhVGFiIFMyMDA3QScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lkZWFUYWJWMjAwN0EnOiBbJ0xlbm92bycsICdJZGVhVGFiIFYyMDA3QScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lkZWFUYWJWMjAwN0EtRC1JJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjAwN0EnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhVGFiVjIwMTBBJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjAxMEEnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhVGFiIEEyMTA3QS1IJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjEwN0EnLCAndGFibGV0J10sXG4gICAgICAgICdBMSAwNyc6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnbGVwYWQgMDAxYic6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnbGVwYWQgMDAxbic6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnM0dDMTAxJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR0MxMDEnXSxcbiAgICAgICAgJ0xlbm92byAzR0MxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHQzEwMSddLFxuICAgICAgICAnM0dXMTAwJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR1cxMDAnXSxcbiAgICAgICAgJ0xlbm92byAzR1cxMDAnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMCddLFxuICAgICAgICAnM0dXMTAxJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR1cxMDEnXSxcbiAgICAgICAgJ0xlbm92byAzR1cxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMSddLFxuICAgICAgICAnTGVwaG9uZSAzR1cxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMSddLFxuICAgICAgICAnTGVub3ZvIEExLTMyQUIwJzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMS0zMkFCMCddLFxuICAgICAgICAnTGVub3ZvIFMxLTM3QUgwJzogWydMZW5vdm8nLCAnTGVQaG9uZSBTMS0zN0FIMCddLFxuICAgICAgICAnUzEgMzdBSE8nOiBbJ0xlbm92bycsICdMZVBob25lIFMxLTM3QUgwJ10sXG4gICAgICAgICdMZW5vdm8gUzItMzhBSDAnOiBbJ0xlbm92bycsICdMZVBob25lIFMyLTM4QUgwJ10sXG4gICAgICAgICdMZW5vdm8gUzItMzhBVDAnOiBbJ0xlbm92bycsICdMZVBob25lIFMyLTM4QVQwJ10sXG4gICAgICAgICdMZW5vdm8gQTI4OHQnOiBbJ0xlbm92bycsICdMZVBob25lIEEyODgnXSxcbiAgICAgICAgJ0xlbm92byBBMzY2dCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTM2NiddLFxuICAgICAgICAnTGVub3ZvIEEzOTBlJzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMzkwJ10sXG4gICAgICAgICdMZW5vdm8gQTUwMCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTUwMCddLFxuICAgICAgICAnTGVub3ZvIEE1MjAnOiBbJ0xlbm92bycsICdMZVBob25lIEE1MjAnXSxcbiAgICAgICAgJ0xlbm92byBBNTYwZSc6IFsnTGVub3ZvJywgJ0E1NjAnXSxcbiAgICAgICAgJ0xlbm92byBBNjY4dCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTY2OCddLFxuICAgICAgICAnTGVub3ZvIEE2OTh0JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBNjk4J10sXG4gICAgICAgICdMZW5vdm8gQTc1MCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTc1MCddLFxuICAgICAgICAnTGVub3ZvIEE3ODAnOiBbJ0xlbm92bycsICdMZVBob25lIEE3ODAnXSxcbiAgICAgICAgJ0xlbm92byBBNzg5JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBNzg5J10sXG4gICAgICAgICdMZW5vdm8gQTc5MGUnOiBbJ0xlbm92bycsICdMZVBob25lIEE3OTAnXSxcbiAgICAgICAgJ0xlbm92byBQNzAnOiBbJ0xlbm92bycsICdMZVBob25lIFA3MCddLFxuICAgICAgICAnTGVub3ZvIFA3MDAnOiBbJ0xlbm92bycsICdMZVBob25lIFA3MDAnXSxcbiAgICAgICAgJ0xlbm92byBTODUwZSc6IFsnTGVub3ZvJywgJ1M4NTAnXSxcbiAgICAgICAgJ0xlbm92byBTODgwJzogWydMZW5vdm8nLCAnUzg4MCddLFxuICAgICAgICAnTGVub3ZvIEs4NjAnOiBbJ0xlbm92bycsICdLODYwJ10sXG4gICAgICAgICdBMzB0JzogWydMZW5vdm8nLCAnQTMwdCddLFxuICAgICAgICAnTGVub3ZvIEE2MCc6IFsnTGVub3ZvJywgJ0E2MCddLFxuICAgICAgICAnTGVub3ZvIEE2NSc6IFsnTGVub3ZvJywgJ0E2NSddLFxuICAgICAgICAnTGVub3ZvIEE2NnQnOiBbJ0xlbm92bycsICdBNjZ0J10sXG4gICAgICAgICdMZW5vdm8gQTY4ZSc6IFsnTGVub3ZvJywgJ0E2OGUnXSxcbiAgICAgICAgJ0xlbm92byBLODAwJzogWydMZW5vdm8nLCAnSzgwMCddLFxuICAgICAgICAnSURFQSBUViBUMTAwJzogWydMZW5vdm8nLCAnSURFQSBUVicsICd0ZWxldmlzaW9uJ10sXG4gICAgICAgICdJREVBIFRWIEs5MSc6IFsnTGVub3ZvJywgJ0lERUEgVFYnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVEM5NzAnOiBbJ0xlIFBhbicsICdUQzk3MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xlUGFuSUknOiBbJ0xlIFBhbicsICdJSScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xHLUM1NTUnOiBbJ0xHJywgJ09wdGltdXMgQ2hhdCddLFxuICAgICAgICAnTEctQzU1NS1wYXJyb3QnOiBbJ0xHJywgJ09wdGltdXMgQ2hhdCddLFxuICAgICAgICAnTEctQzY2MGgnOiBbJ0xHJywgJ09wdGltdXMgUHJvJ10sXG4gICAgICAgICdMRy1DNzI5JzogWydMRycsICdEb3VibGVQbGF5J10sXG4gICAgICAgICdMRy1DODAwRyc6IFsnTEcnLCAnRWNseXBzZSddLFxuICAgICAgICAnTEctQ1g2NzAnOiBbJ0xHJywgJ09wdGltdXMgM0cnXSxcbiAgICAgICAgJ0xHLUU0MDAnOiBbJ0xHJywgJ09wdGltdXMgTDMnXSxcbiAgICAgICAgJ0xHLUU0MDBmJzogWydMRycsICdPcHRpbXVzIEwzJ10sXG4gICAgICAgICdMRy1FNTEwJzogWydMRycsICdPcHRpbXVzIEh1YiddLFxuICAgICAgICAnTEctRTUxMGYnOiBbJ0xHJywgJ09wdGltdXMgSHViJ10sXG4gICAgICAgICdMRy1FNTEwZyc6IFsnTEcnLCAnT3B0aW11cyBIdWInXSxcbiAgICAgICAgJ0xHLUU2MTAnOiBbJ0xHJywgJ09wdGltdXMgTDUnXSxcbiAgICAgICAgJ0xHLUU2MTInOiBbJ0xHJywgJ09wdGltdXMgTDUnXSxcbiAgICAgICAgJ0xHLUU2MTJnJzogWydMRycsICdPcHRpbXVzIEw1J10sXG4gICAgICAgICdMRy1FNjE1Ric6IFsnTEcnLCAnRTYxNSddLFxuICAgICAgICAnTEctRTYxN0cnOiBbJ0xHJywgJ0U2MTcnXSxcbiAgICAgICAgJ0xHLUU3MjAnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctRTcyMGInOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctRTczMCc6IFsnTEcnLCAnT3B0aW11cyBTb2wnXSxcbiAgICAgICAgJ0xHLUU5NzAnOiBbJ0xHJywgJ1NoaW5lJ10sXG4gICAgICAgICdMRy1GMTAwTCc6IFsnTEcnLCAnT3B0aW11cyBWdSddLFxuICAgICAgICAnTEctRjEwMFMnOiBbJ0xHJywgJ09wdGltdXMgVnUnXSxcbiAgICAgICAgJ0xHLUYxMjBLJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxMjBMJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxMjBTJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxNjBLJzogWydMRycsICdPcHRpbXVzIExURSBJSSddLFxuICAgICAgICAnTEctRjE2MEwnOiBbJ0xHJywgJ09wdGltdXMgTFRFIElJJ10sXG4gICAgICAgICdMRy1GMTYwUyc6IFsnTEcnLCAnT3B0aW11cyBMVEUgSUknXSxcbiAgICAgICAgJ0xHLUYxODBMJzogWydMRycsICdGMTgwTCddLFxuICAgICAgICAnTEctR1Q1NDAnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLUdUNTQwZic6IFsnTEcnLCAnT3B0aW11cyddLFxuICAgICAgICAnTEctR1Q1NDAgU3dpZnQnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLUdXNjIwJzogWydMRycsICdHVzYyMCddLFxuICAgICAgICAnTEctS0g1MjAwJzogWydMRycsICdBbmRyby0xJ10sXG4gICAgICAgICdMRy1LVTM3MDAnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1LVTU0MDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctS1U1OTAwJzogWydMRycsICdPcHRpbXVzIEJsYWNrJ10sXG4gICAgICAgICdMRy1MNDBHJzogWydMRycsICdMNDBHJ10sXG4gICAgICAgICdMRy1MRzg1NSc6IFsnTEcnLCAnTWFycXVlZSddLFxuICAgICAgICAnTEctTFM2NzAnOiBbJ0xHJywgJ09wdGltdXMgUyddLFxuICAgICAgICAnTEctTFM2OTYnOiBbJ0xHJywgJ09wdGltdXMgRWxpdGUnXSxcbiAgICAgICAgJ0xHLUxTODQwJzogWydMRycsICdWaXBlciA0RyddLFxuICAgICAgICAnTEctTFM4NTUnOiBbJ0xHJywgJ01hcnF1ZWUnXSxcbiAgICAgICAgJ0xHLUxTODYwJzogWydMRycsICdcXCdDYXllbm5lXFwnJ10sXG4gICAgICAgICdMRy1MUzk3MCc6IFsnTEcnLCAnXFwnRWNsaXBzZVxcJyddLFxuICAgICAgICAnTEctTFUzMDAwJzogWydMRycsICdPcHRpbXVzIE1hY2gnXSxcbiAgICAgICAgJ0xHLUxVMzEwMCc6IFsnTEcnLCAnT3B0aW11cyBDaGljJ10sXG4gICAgICAgICdMRy1MVTM3MDAnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1MVTU0MDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctTFU2MjAwJzogWydMRycsICdPcHRpbXVzIFEyJ10sXG4gICAgICAgICdMRy1sdTYyMDAnOiBbJ0xHJywgJ09wdGltdXMgUTInXSxcbiAgICAgICAgJ0xHLUxVNjUwMCc6IFsnTEcnLCAnT3B0aW11cyBOb3RlJ10sXG4gICAgICAgICdMRy1MVTY4MDAnOiBbJ0xHJywgJ09wdGltdXMgQmlnJ10sXG4gICAgICAgICdMRy1MVTgzMDAnOiBbJ0xHJywgJ09wdGltdXMgUGFkIExURSddLFxuICAgICAgICAnTEctTFc2OTAnOiBbJ0xHJywgJ09wdGltdXMgQyddLFxuICAgICAgICAnTEctTFc3NzAnOiBbJ0xHJywgJ0xXNzcwJ10sXG4gICAgICAgICdMRy1NUzY5MCc6IFsnTEcnLCAnT3B0aW11cyBNJ10sXG4gICAgICAgICdMRy1NUzc3MCc6IFsnTEcnLCAnTVM3NzAnXSxcbiAgICAgICAgJ0xHLU1TODQwJzogWydMRycsICdDb25uZWN0IDRHJ10sXG4gICAgICAgICdMRy1NUzkxMCc6IFsnTEcnLCAnRXN0ZWVtJ10sXG4gICAgICAgICdMRy1NUzY5NSc6IFsnTEcnLCAnT3B0aW11cyBNKyddLFxuICAgICAgICAnTEcgUDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnTEctUDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnTEctUDM1MGYnOiBbJ0xHJywgJ09wdGltdXMgTWUnXSxcbiAgICAgICAgJ0xHLVAzNTBnJzogWydMRycsICdPcHRpbXVzIE1lJ10sXG4gICAgICAgICdMRy1QMzU1JzogWydMRycsICdQMzU1J10sXG4gICAgICAgICdMRy1QNTAwJzogWydMRycsICdPcHRpbXVzIE9uZSddLFxuICAgICAgICAnTEctUDUwMGgnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1QNTAwaC1wYXJyb3QnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1QNTAzJzogWydMRycsICdPcHRpbXVzIE9uZSddLFxuICAgICAgICAnTEctUDUwNCc6IFsnTEcnLCAnT3B0aW11cyBPbmUnXSxcbiAgICAgICAgJ0xHLVA1MDUnOiBbJ0xHJywgJ1Bob2VuaXgnXSxcbiAgICAgICAgJ0xHLVA1MDVSJzogWydMRycsICdQaG9lbml4J10sXG4gICAgICAgICdMRy1QNTA2JzogWydMRycsICdUaHJpdmUnXSxcbiAgICAgICAgJ0xHLVA1MDknOiBbJ0xHJywgJ09wdGltdXMgVCddLFxuICAgICAgICAnTEctUDY5MCc6IFsnTEcnLCAnT3B0aW11cyBOZXQnXSxcbiAgICAgICAgJ0xHLVA2OTMnOiBbJ0xHJywgJ1A2OTMnXSxcbiAgICAgICAgJ0xHLVA2OTgnOiBbJ0xHJywgJ09wdGltdXMgTmV0J10sXG4gICAgICAgICdMRy1QNjk4Zic6IFsnTEcnLCAnT3B0aW11cyBOZXQnXSxcbiAgICAgICAgJ0xHLVA3MDAnOiBbJ0xHJywgJ09wdGltdXMgTDcnXSxcbiAgICAgICAgJ0xHLVA3MDUnOiBbJ0xHJywgJ09wdGltdXMgTDcnXSxcbiAgICAgICAgJ0xHLVA3MDVmJzogWydMRycsICdPcHRpbXVzIEw3J10sXG4gICAgICAgICdMRy1QNzA1Zyc6IFsnTEcnLCAnT3B0aW11cyBMNyddLFxuICAgICAgICAnTEctUDcwOGcnOiBbJ0xHJywgJ1A3MDgnXSxcbiAgICAgICAgJ0xHLVA3MjAnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctUDcyMGgnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctUDcyNSc6IFsnTEcnLCAnT3B0aW11cyAzRCBNYXgnXSxcbiAgICAgICAgJ0xHLVA3NjAnOiBbJ0xHJywgJ1A3NjAnXSxcbiAgICAgICAgJ0xHLVA3NjknOiBbJ0xHJywgJ1A3NjknXSxcbiAgICAgICAgJ0xHLVA4NjAnOiBbJ0xHJywgJ1A4NjAnXSxcbiAgICAgICAgJ0xHLVA4NzAnOiBbJ0xHJywgJ1A4NzAnXSxcbiAgICAgICAgJ0xHLVA4NzBGJzogWydMRycsICdQODcwJ10sXG4gICAgICAgICdMRy1QODgwJzogWydMRycsICdYMyddLFxuICAgICAgICAnTEctUDg4MGcnOiBbJ0xHJywgJ1gzJ10sXG4gICAgICAgICdMRy1QODk1JzogWydMRycsICdQODk1J10sXG4gICAgICAgICdMRy1QOTIwJzogWydMRycsICdPcHRpbXVzIDNEJ10sXG4gICAgICAgICdMRy1QOTIwaCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctUDkyNSc6IFsnTEcnLCAnVGhyaWxsJ10sXG4gICAgICAgICdMRy1QOTI1Zyc6IFsnTEcnLCAnVGhyaWxsJ10sXG4gICAgICAgICdMRy1QOTMwJzogWydMRycsICdOaXRybyBIRCddLFxuICAgICAgICAnTEctUDkzNic6IFsnTEcnLCAnT3B0aW11cyBMVEUnXSxcbiAgICAgICAgJ0xHLVA5NDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctUDk3MCc6IFsnTEcnLCAnT3B0aW11cyBCbGFjayddLFxuICAgICAgICAnTEctUDk3MGgnOiBbJ0xHJywgJ09wdGltdXMgQmxhY2snXSxcbiAgICAgICAgJ0xHLVA5OTAnOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ0xHLVA5OTBoJzogWydMRycsICdPcHRpbXVzIDJYIFNwZWVkJ10sXG4gICAgICAgICdMRy1QOTkwaE4nOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ0xHLVA5OTBIJzogWydMRycsICdPcHRpbXVzIDJYIFNwZWVkJ10sXG4gICAgICAgICdMRy1QOTkzJzogWydMRycsICdPcHRpbXVzIDJYJ10sXG4gICAgICAgICdMRy1TVTU0MCc6IFsnTEcnLCAnUFJBREEgMy4wJ10sXG4gICAgICAgICdMRy1TVTY0MCc6IFsnTEcnLCAnT3B0aW11cyBMVEUnXSxcbiAgICAgICAgJ0xHLVNVNjYwJzogWydMRycsICdPcHRpbXVzIDJYJ10sXG4gICAgICAgICdMRy1TVTc2MCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctU1U3NjAtS3VzdCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctU1U4NzAnOiBbJ0xHJywgJ09wdGltdXMgM0QgQ3ViZSddLFxuICAgICAgICAnTEctU1U4ODAnOiBbJ0xHJywgJ09wdGltdXMgRVgnXSxcbiAgICAgICAgJ0xHLVVTNjcwJzogWydMRycsICdPcHRpbXVzIFUnXSxcbiAgICAgICAgJ0xHLVVTNzMwJzogWydMRycsICdVUzczMCddLFxuICAgICAgICAnTEctVjkwMCc6IFsnTEcnLCAnT3B0aW11cyBQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdMRy1WOTA1Uic6IFsnTEcnLCAnT3B0aW11cyBHLVNsYXRlJywgJ3RhYmxldCddLFxuICAgICAgICAnTEctVjkwOSc6IFsnTEcnLCAnT3B0aW11cyBHLVNsYXRlJywgJ3RhYmxldCddLFxuICAgICAgICAnTEctVk02NzAnOiBbJ0xHJywgJ09wdGltdXMgViddLFxuICAgICAgICAnTEctVk02OTYnOiBbJ0xHJywgJ09wdGltdXMgRWxpdGUnXSxcbiAgICAgICAgJ0xHLVZNNzAxJzogWydMRycsICdPcHRpbXVzIFNsaWRlciddLFxuICAgICAgICAnTEctVlM2NjAnOiBbJ0xHJywgJ1ZvcnRleCddLFxuICAgICAgICAnTEctVlM3MDAnOiBbJ0xHJywgJ0VubGlnaHRlbiddLFxuICAgICAgICAnTEctVlM3NDAnOiBbJ0xHJywgJ0FsbHknXSxcbiAgICAgICAgJ0xHLVZTODQwJzogWydMRycsICdDb25uZWN0IDRHJ10sXG4gICAgICAgICdMRy1WUzkxMCc6IFsnTEcnLCAnUmV2b2x1dGlvbiddLFxuICAgICAgICAnbGdwLTk3MCc6IFsnTEcnLCAnT3B0aW11cyBCbGFjayddLFxuICAgICAgICAnRTkwMCc6IFsnTEcnLCAnT3B0aW11cyA3J10sXG4gICAgICAgICdHVDU0MCc6IFsnTEcnLCAnT3B0aW11cyBHVDU0MCddLFxuICAgICAgICAnR1c2MjAnOiBbJ0xHJywgJ0dXNjIwJ10sXG4gICAgICAgICdLVTk1MDAnOiBbJ0xHJywgJ09wdGltdXMgWiddLFxuICAgICAgICAnTEdDNjYwJzogWydMRycsICdPcHRpbXVzIFBybyddLFxuICAgICAgICAnTEdMNDVDJzogWydMRycsICdPcHRpbXVzIE5ldCddLFxuICAgICAgICAnTEdMNTVDJzogWydMRycsICdPcHRpbXVzIFEnXSxcbiAgICAgICAgJ0xVMjMwMCc6IFsnTEcnLCAnT3B0aW11cyBRJ10sXG4gICAgICAgICdMUzY3MCc6IFsnTEcnLCAnT3B0aW11cyBTJ10sXG4gICAgICAgICdQOTQwJzogWydMRycsICdQUkFEQSAzLjAnXSxcbiAgICAgICAgJ1A5OTAnOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ1VTQ0MtVVM3MzAnOiBbJ0xHJywgJ1VTNzMwJ10sXG4gICAgICAgICdVU0NDLVVTNzYwJzogWydMRycsICdHZW5lc2lzJ10sXG4gICAgICAgICdWTTY3MCc6IFsnTEcnLCAnT3B0aW11cyBWJ10sXG4gICAgICAgICdWUzg0MCA0Ryc6IFsnTEcnLCAnQ29ubmVjdCA0RyddLFxuICAgICAgICAnVlM5MDAtNEcnOiBbJ0xHJywgJ1ZTOTAwJ10sXG4gICAgICAgICdWUzkxMCA0Ryc6IFsnTEcnLCAnUmV2b2x1dGlvbiA0RyddLFxuICAgICAgICAnVlM5MjAgNEcnOiBbJ0xHJywgJ1NwZWN0cnVtIDRHJ10sXG4gICAgICAgICdWUzkzMCA0Ryc6IFsnTEcnLCAnVlM5MzAnXSxcbiAgICAgICAgJ1ZTOTUwIDRHJzogWydMRycsICdWUzk1MCddLFxuICAgICAgICAnTC0wMUQnOiBbJ0xHJywgJ09wdGltdXMgTFRFJ10sXG4gICAgICAgICdMLTAyRCc6IFsnTEcnLCAnUFJBREEgcGhvbmUnXSxcbiAgICAgICAgJ0wtMDRDJzogWydMRycsICdPcHRpbXVzIENoYXQnXSxcbiAgICAgICAgJ0wtMDVEJzogWydMRycsICdPcHRpbXVzIGl0J10sXG4gICAgICAgICdMLTA2Qyc6IFsnTEcnLCAnT3B0aW11cyBQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdMLTA2RCc6IFsnTEcnLCAnT3B0aW11cyBWdSddLFxuICAgICAgICAnTC0wN0MnOiBbJ0xHJywgJ09wdGltdXMgQnJpZ2h0J10sXG4gICAgICAgICdMRy1FdmUnOiBbJ0xHJywgJ0V2ZSddLFxuICAgICAgICAnTEctT3B0aW11cyBPbmUgUDUwMCc6IFsnTEcnLCAnT3B0aW11cyBPbmUnXSxcbiAgICAgICAgJ0xHLU9wdGltdXMgMlgnOiBbJ0xHJywgJ09wdGltdXMgMlgnXSxcbiAgICAgICAgJ0xHLUdUNTQwIE9wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLU9wdGltdXMgQmxhY2snOiBbJ0xHJywgJ09wdGltdXMgQmxhY2snXSxcbiAgICAgICAgJ0FsbHknOiBbJ0xHJywgJ0FsbHknXSxcbiAgICAgICAgJ09wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ09wdGltdXMgTWUnOiBbJ0xHJywgJ09wdGltdXMgTWUnXSxcbiAgICAgICAgJ29wdGltdXMgbWUgcDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnT3B0aW11cyAyWCc6IFsnTEcnLCAnT3B0aW11cyAyWCddLFxuICAgICAgICAnT3B0aW11cyAyeCc6IFsnTEcnLCAnT3B0aW11cyAyWCddLFxuICAgICAgICAnSVMxMUxHJzogWydMRycsICdPcHRpbXVzIFgnXSxcbiAgICAgICAgJ1ZvcnRleCc6IFsnTEcnLCAnVm9ydGV4J10sXG4gICAgICAgICdMREstSUNLIHYxLjQnOiBbJ0xHJywgJ0VzdGVlbSddLFxuICAgICAgICAnVDYnOiBbJ01hbGF0YScsICdacGFkIFQ2JywgJ3RhYmxldCddLFxuICAgICAgICAnTWFsYXRhIFNNQkExMDAyJzogWydNYWxhdGEnLCAnVGFibGV0IFNNQi1BMTAwMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NUTTcxMkhDWic6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgNzEyYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NUTTgwM0hDJzogWydNZWRpYWNvbScsICdTbWFydFBhZCA4MTBjJywgJ3RhYmxldCddLFxuICAgICAgICAnTWVkaWFjb20gODEwQyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NtYXJ0cGFkODEwYyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NtYXJ0UGFkODEwYyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01QODEwQyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01QOTA3Qyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgOTA3YycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01USzY1MTYnOiBbJ01lZGlhdGVrJywgJ01USzY1MTYnXSxcbiAgICAgICAgJ0xJRkVUQUIgUzk1MTInOiBbJ01lZGlvbicsICdMaWZldGFiIFM5NTEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTElGRVRBQiBQOTUxNCc6IFsnTWVkaW9uJywgJ0xpZmV0YWIgUDk1MTQnLCAndGFibGV0J10sXG4gICAgICAgICdNRCBMSUZFVEFCIFA5NTE2JzogWydNZWRpb24nLCAnTGlmZXRhYiBQOTUxNicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01FRElPTiBMSUZFIFA0MzEwJzogWydNZWRpb24nLCAnTGlmZSBQNDMxMCddLFxuICAgICAgICAnTTgnOiBbJ01laXp1JywgJ004J10sXG4gICAgICAgICdNOSc6IFsnTWVpenUnLCAnTTknXSxcbiAgICAgICAgJ00wNDAnOiBbJ01laXp1JywgJ00wNDAnXSxcbiAgICAgICAgJ005LXVubG9ja2VkJzogWydNZWl6dScsICdNOSddLFxuICAgICAgICAnbWVpenUgbTknOiBbJ01laXp1JywgJ005J10sXG4gICAgICAgICdNRUlaVSBNOSc6IFsnTWVpenUnLCAnTTknXSxcbiAgICAgICAgJ01FSVpVIE1YJzogWydNZWl6dScsICdNWCddLFxuICAgICAgICAnTTAzMCc6IFsnTWVpenUnLCAnTVggTTAzMCddLFxuICAgICAgICAnTTAzMSc6IFsnTWVpenUnLCAnTVggTTAzMSddLFxuICAgICAgICAnTTAzMic6IFsnTWVpenUnLCAnTVggTTAzMiddLFxuICAgICAgICAnU2xpZGVwYWQnOiBbJ01lbXVwJywgJ1NsaWRlcGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnQTQ1JzogWydNaWNyb21heCcsICdBNDUgUHVuayddLFxuICAgICAgICAnTWljcm9tYXggQTUwJzogWydNaWNyb21heCcsICdBNTAgTmluamEnXSxcbiAgICAgICAgJ01pY3JvbWF4IEE2MCc6IFsnTWljcm9tYXgnLCAnQW5kcm8gQTYwJ10sXG4gICAgICAgICdNaWNyb21heCBBNzAnOiBbJ01pY3JvbWF4JywgJ0FuZHJvIEE3MCddLFxuICAgICAgICAnUDMwMChGdW5ib29rKSc6IFsnTWljcm9tYXgnLCAnRnVuYm9vayBQMzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQ3MzUnOiBbJ01vaW5zdG9uZScsICdBVDczNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E4NTMnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnQTk1Myc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDInXSxcbiAgICAgICAgJ0ExNjgwJzogWydNb3Rvcm9sYScsICdNT1RPIEExNjgwJ10sXG4gICAgICAgICdFVDEnOiBbJ01vdG9yb2xhJywgJ0VUMSBFbnRlcnByaXNlIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01CMjAwJzogWydNb3Rvcm9sYScsICdDTElRJ10sXG4gICAgICAgICdNQjMwMCc6IFsnTW90b3JvbGEnLCAnQkFDS0ZMSVAnXSxcbiAgICAgICAgJ01CNTAxJzogWydNb3Rvcm9sYScsICdDTElRIFhUJ10sXG4gICAgICAgICdNQjUwMic6IFsnTW90b3JvbGEnLCAnQ0hBUk0nXSxcbiAgICAgICAgJ01CNTExJzogWydNb3Rvcm9sYScsICdGTElQT1VUJ10sXG4gICAgICAgICdNQjUyMCc6IFsnTW90b3JvbGEnLCAnQlJBVk8nXSxcbiAgICAgICAgJ01CNTI1JzogWydNb3Rvcm9sYScsICdERUZZJ10sXG4gICAgICAgICdNQjUyNSsnOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ01CNTI1IGZvciBtZSc6IFsnTW90b3JvbGEnLCAnREVGWSddLFxuICAgICAgICAnTUI1MjYnOiBbJ01vdG9yb2xhJywgJ0RFRlkrJ10sXG4gICAgICAgICdNQjYxMSc6IFsnTW90b3JvbGEnLCAnQ0xJUSAyJ10sXG4gICAgICAgICdNQjYxMic6IFsnTW90b3JvbGEnLCAnWFBSVCddLFxuICAgICAgICAnTUI2MzInOiBbJ01vdG9yb2xhJywgJ1BSTysnXSxcbiAgICAgICAgJ01CODU1JzogWydNb3Rvcm9sYScsICdQSE9UT04gNEcnXSxcbiAgICAgICAgJ01CODYwJzogWydNb3Rvcm9sYScsICdBVFJJWCddLFxuICAgICAgICAnTUI4NjEnOiBbJ01vdG9yb2xhJywgJ0FUUklYJ10sXG4gICAgICAgICdtYjg2MSc6IFsnTW90b3JvbGEnLCAnQVRSSVgnXSxcbiAgICAgICAgJ01CODY1JzogWydNb3Rvcm9sYScsICdBVFJJWCAyJ10sXG4gICAgICAgICdNQjg3MCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWDInXSxcbiAgICAgICAgJ01CODg2JzogWydNb3Rvcm9sYScsICdESU5BUkEnXSxcbiAgICAgICAgJ01FNTAxJzogWydNb3Rvcm9sYScsICdDTElRIFhUJ10sXG4gICAgICAgICdNRTUxMSc6IFsnTW90b3JvbGEnLCAnRkxJUE9VVCddLFxuICAgICAgICAnbWU1MjUnOiBbJ01vdG9yb2xhJywgJ01PVE8gTUU1MjUnXSxcbiAgICAgICAgJ01lNTI1JzogWydNb3Rvcm9sYScsICdNT1RPIE1FNTI1J10sXG4gICAgICAgICdNRTUyNSc6IFsnTW90b3JvbGEnLCAnTU9UTyBNRTUyNSddLFxuICAgICAgICAnTUU1MjUrJzogWydNb3Rvcm9sYScsICdNT1RPIE1FNTI1J10sXG4gICAgICAgICdNRTYwMCc6IFsnTW90b3JvbGEnLCAnQkFDS0ZMSVAnXSxcbiAgICAgICAgJ01FNjMyJzogWydNb3Rvcm9sYScsICdQUk8rJ10sXG4gICAgICAgICdNRTcyMic6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDInXSxcbiAgICAgICAgJ01FODExJzogWydNb3Rvcm9sYScsICdEcm9pZCBYJ10sXG4gICAgICAgICdNRTg2MCc6IFsnTW90b3JvbGEnLCAnQVRSSVgnXSxcbiAgICAgICAgJ01FODYzJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUgMyddLFxuICAgICAgICAnTUU4NjUnOiBbJ01vdG9yb2xhJywgJ0FUUklYIDInXSxcbiAgICAgICAgJ01UNjIwJzogWydNb3Rvcm9sYScsICdNT1RPIE1UNjIwJ10sXG4gICAgICAgICdNVDYyMHQnOiBbJ01vdG9yb2xhJywgJ01PVE8gTVQ2MjAnXSxcbiAgICAgICAgJ01UNzE2JzogWydNb3Rvcm9sYScsICdNT1RPIE1UNzE2J10sXG4gICAgICAgICdNVDgxMCc6IFsnTW90b3JvbGEnLCAnTU9UTyBNVDgxMCddLFxuICAgICAgICAnTVQ4NzAnOiBbJ01vdG9yb2xhJywgJ01PVE8gTVQ4NzAnXSxcbiAgICAgICAgJ01UOTE3JzogWydNb3Rvcm9sYScsICdNVDkxNyddLFxuICAgICAgICAnTVo1MDUnOiBbJ01vdG9yb2xhJywgJ1hPT00gRmFtaWx5IEVkaXRpb24nLCAndGFibGV0J10sXG4gICAgICAgICdNWjYwMCc6IFsnTW90b3JvbGEnLCAnWE9PTSA0RyBMVEUnLCAndGFibGV0J10sXG4gICAgICAgICdNWjYwMSc6IFsnTW90b3JvbGEnLCAnWE9PTSAzRycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjAyJzogWydNb3Rvcm9sYScsICdYT09NIDRHIExURScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjAzJzogWydNb3Rvcm9sYScsICdYT09NIDNHJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDQnOiBbJ01vdG9yb2xhJywgJ1hPT00gV2lGaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjA1JzogWydNb3Rvcm9sYScsICdYT09NIDNHJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDYnOiBbJ01vdG9yb2xhJywgJ1hPT00gV2lGaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjA3JzogWydNb3Rvcm9sYScsICdYT09NIDIgV2lGaSBNZWRpYSBFZGl0aW9uJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDknOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgOC4yJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDkgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgOC4yJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MTUnOiBbJ01vdG9yb2xhJywgJ1hPT00gMiBXaUZpJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MTcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjE3IDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBYWUJPQVJEIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdXWDQzNSc6IFsnTW90b3JvbGEnLCAnVFJJVU1QSCBXWDQzNSddLFxuICAgICAgICAnV1g0NDUnOiBbJ01vdG9yb2xhJywgJ0NJVFJVUyBXWDQ0NSddLFxuICAgICAgICAnWFQzMDAnOiBbJ01vdG9yb2xhJywgJ1NQSUNFJ10sXG4gICAgICAgICdYVDMwMSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDMwMSddLFxuICAgICAgICAnWFQzMTEnOiBbJ01vdG9yb2xhJywgJ0ZJUkUnXSxcbiAgICAgICAgJ1hUMzE2JzogWydNb3Rvcm9sYScsICdNT1RPIFhUMzE2J10sXG4gICAgICAgICdYVDMxOSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDMxOSddLFxuICAgICAgICAnWFQzOTAnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQzOTAnXSxcbiAgICAgICAgJ1hUMzIwJzogWydNb3Rvcm9sYScsICdERUZZIE1pbmknXSxcbiAgICAgICAgJ1hUMzIxJzogWydNb3Rvcm9sYScsICdERUZZIE1pbmknXSxcbiAgICAgICAgJ1hUNTAwJzogWydNb3Rvcm9sYScsICdNT1RPIFhUNTAwJ10sXG4gICAgICAgICd4dC01MDAnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ1MDAnXSxcbiAgICAgICAgJ1hUNTAyJzogWydNb3Rvcm9sYScsICdRVUVOQ0ggWFQ1J10sXG4gICAgICAgICdYVDUzMCc6IFsnTW90b3JvbGEnLCAnRklSRSBYVCddLFxuICAgICAgICAnWFQ1MzEnOiBbJ01vdG9yb2xhJywgJ0ZJUkUgWFQnXSxcbiAgICAgICAgJ1hUNTMyJzogWydNb3Rvcm9sYScsICdYVDUzMiddLFxuICAgICAgICAnWFQ1MzUnOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ1hUNTUwJzogWydNb3Rvcm9sYScsICdYVDU1MCddLFxuICAgICAgICAnWFQ1NTYnOiBbJ01vdG9yb2xhJywgJ1hUNTU2J10sXG4gICAgICAgICdYVDYwMyc6IFsnTW90b3JvbGEnLCAnQURNSVJBTCddLFxuICAgICAgICAnWFQ2MTAnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFBybyddLFxuICAgICAgICAnWFQ2MTUnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ2MTUnXSxcbiAgICAgICAgJ1hUNjI2JzogWydNb3Rvcm9sYScsICdNT1RPIFhUNjI2J10sXG4gICAgICAgICdYVDY4MSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDY4MSddLFxuICAgICAgICAnWFQ2ODInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDMnXSxcbiAgICAgICAgJ1hUNjg1JzogWydNb3Rvcm9sYScsICdNT1RPIFhUNjg1J10sXG4gICAgICAgICdYVDY4Nyc6IFsnTW90b3JvbGEnLCAnQVRSSVggVFYnXSxcbiAgICAgICAgJ1hUNzAxJzogWydNb3Rvcm9sYScsICdYVDcwMSddLFxuICAgICAgICAnWFQ3MDInOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ3MDInXSxcbiAgICAgICAgJ1hUNzExJzogWydNb3Rvcm9sYScsICdNT1RPIFhUNzExJ10sXG4gICAgICAgICdYVDcyMCc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdYVDg3NSc6IFsnTW90b3JvbGEnLCAnRHJvaWQgQmlvbmljJ10sXG4gICAgICAgICdYVDgwMCc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDgwMCddLFxuICAgICAgICAnWFQ4MDArJzogWydNb3Rvcm9sYScsICdNT1RPIFhUODAwJ10sXG4gICAgICAgICdYVDgwMFcnOiBbJ01vdG9yb2xhJywgJ01PVE8gR2xhbSddLFxuICAgICAgICAnWFQ4MDYnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ4MDYnXSxcbiAgICAgICAgJ1hUODYwJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUgMyddLFxuICAgICAgICAnWFQ4NjInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDMnXSxcbiAgICAgICAgJ1hUODgyJzogWydNb3Rvcm9sYScsICdNT1RPIFhUODgyJ10sXG4gICAgICAgICdYVDg4Myc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDMnXSxcbiAgICAgICAgJ1hUODg5JzogWydNb3Rvcm9sYScsICdYVDg4OSddLFxuICAgICAgICAnWFQ4OTcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDQnXSxcbiAgICAgICAgJ1hUOTAxJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMCc6IFsnTW90b3JvbGEnLCAnUkFaUiddLFxuICAgICAgICAnWFQ5MTBLJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMFMnOiBbJ01vdG9yb2xhJywgJ1JBWlInXSxcbiAgICAgICAgJ1hUOTEwIDRHJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnWFQ5MjMnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFJBWlIgSEQnXSxcbiAgICAgICAgJ1hUOTI1JzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdYVDkyNic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnWFQ5MjYgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFJBWlInXSxcbiAgICAgICAgJ1hUOTI4JzogWydNb3Rvcm9sYScsICdYVDkyOCddLFxuICAgICAgICAnQXRyaXggMic6IFsnTW90b3JvbGEnLCAnQVRSSVggMiddLFxuICAgICAgICAnQXRyaXggNGcnOiBbJ01vdG9yb2xhJywgJ0FUUklYIDRHJ10sXG4gICAgICAgICdBdHJpeCA0Ryc6IFsnTW90b3JvbGEnLCAnQVRSSVggNEcnXSxcbiAgICAgICAgJ0F0cml4IDRHIE1FODYwJzogWydNb3Rvcm9sYScsICdBVFJJWCA0RyddLFxuICAgICAgICAnQ0xJUSc6IFsnTW90b3JvbGEnLCAnQ0xJUSddLFxuICAgICAgICAnQ0xJUSBYVCc6IFsnTW90b3JvbGEnLCAnQ0xJUSBYVCddLFxuICAgICAgICAnQ0xJUTInOiBbJ01vdG9yb2xhJywgJ0NMSVEgMiddLFxuICAgICAgICAnQ29ydmFpcic6IFsnTW90b3JvbGEnLCAnQ29ydmFpcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RFRlknOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ0RlZnkrJzogWydNb3Rvcm9sYScsICdERUZZKyddLFxuICAgICAgICAnRGVmeSBQbHVzJzogWydNb3Rvcm9sYScsICdERUZZKyddLFxuICAgICAgICAnRGV2b3VyJzogWydNb3Rvcm9sYScsICdEZXZvdXInXSxcbiAgICAgICAgJ0RleHQnOiBbJ01vdG9yb2xhJywgJ0RleHQnXSxcbiAgICAgICAgJ0Ryb2lkJzogWydNb3Rvcm9sYScsICdEcm9pZCddLFxuICAgICAgICAnRFJPSUQnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkJ10sXG4gICAgICAgICdEUk9JRDInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0RST0lEMiBHTE9CQUwnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0RST0lEMiBHbG9iYWwnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0Ryb2lkMkdsb2JhbCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgMiddLFxuICAgICAgICAnRFJPSUQgMic6IFsnTW90b3JvbGEnLCAnRHJvaWQgMiddLFxuICAgICAgICAnRFJPSUQzJzogWydNb3Rvcm9sYScsICdEcm9pZCAzJ10sXG4gICAgICAgICdEUk9JRDQnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDQnXSxcbiAgICAgICAgJ0RST0lENCA0Ryc6IFsnTW90b3JvbGEnLCAnRHJvaWQgNCddLFxuICAgICAgICAnRFJPSUQgUHJvJzogWydNb3Rvcm9sYScsICdEcm9pZCBQcm8nXSxcbiAgICAgICAgJ0RST0lEIEJJT05JQyc6IFsnTW90b3JvbGEnLCAnRHJvaWQgQmlvbmljJ10sXG4gICAgICAgICdEUk9JRCBCSU9OSUMgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIEJpb25pYyddLFxuICAgICAgICAnRFJPSUQgQklPTklDIFhUODc1IDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBCaW9uaWMnXSxcbiAgICAgICAgJ0RST0lEUkFaUic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRHJvaWQgUmF6cic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgUkFaUic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgUkFaUiA0Ryc6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgU1BZREVSJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSJ10sXG4gICAgICAgICdEUk9JRCBSQVpSIEhEJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdEUk9JRCBSQVpSIEhEIDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdEcm9pZFgnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgnXSxcbiAgICAgICAgJ0RST0lEWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnZHJvaWQgeCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRHJvaWQgWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRFJPSUQgWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRFJPSUQgWDInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgyJ10sXG4gICAgICAgICdFbGVjdHJpZnknOiBbJ01vdG9yb2xhJywgJ0VsZWN0cmlmeSddLFxuICAgICAgICAnTWlsZXN0b25lIFhUNzIwJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUnXSxcbiAgICAgICAgJ01pbGVzdG9uZSBYdDcyMCc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdNaWxlc3RvbmUnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnQTg1MyBNaWxlc3RvbmUnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnTWlsZXN0b25lIFgnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSBYJ10sXG4gICAgICAgICdNaWxlc3RvbmUgWDInOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSBYMiddLFxuICAgICAgICAnTW90b3JvaVgnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgnXSxcbiAgICAgICAgJ01vdG8gQmFja2ZsaXAnOiBbJ01vdG9yb2xhJywgJ0JBQ0tGTElQJ10sXG4gICAgICAgICdSQVpSJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdUcml1bXBoJzogWydNb3Rvcm9sYScsICdUUklVTVBIJ10sXG4gICAgICAgICdPcHVzIE9uZSc6IFsnTW90b3JvbGEnLCAnaTEnXSxcbiAgICAgICAgJ1Bob3Rvbic6IFsnTW90b3JvbGEnLCAnUEhPVE9OJ10sXG4gICAgICAgICdQaG90b24gNEcnOiBbJ01vdG9yb2xhJywgJ1BIT1RPTiA0RyddLFxuICAgICAgICAnWE9PTSc6IFsnTW90b3JvbGEnLCAnWE9PTScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1hvb20nOiBbJ01vdG9yb2xhJywgJ1hPT00nLCAndGFibGV0J10sXG4gICAgICAgICdYT09NIDInOiBbJ01vdG9yb2xhJywgJ1hPT00gMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1hPT00gMiBNRSc6IFsnTW90b3JvbGEnLCAnWE9PTSAyJywgJ3RhYmxldCddLFxuICAgICAgICAnWE9PTSBNWjYwNic6IFsnTW90b3JvbGEnLCAnWE9PTSBXaUZpJywgJ3RhYmxldCddLFxuICAgICAgICAnSVNXMTFNJzogWydNb3Rvcm9sYScsICdQSE9UT04nXSxcbiAgICAgICAgJ0lTMTJNJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdNT1RXWDQzNUtUJzogWydNb3Rvcm9sYScsICdUUklVTVBIJ10sXG4gICAgICAgICdYMy1JY2UgTUlVSSBYVDcyMCBNZW1vcmlsYSBDbGFzc2ljcyc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdOQUJJLUEnOiBbJ05hYmknLCAnS2lkcyB0YWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdOZXdwYWQnOiBbJ05ld3NteScsICdOZXdwYWQnLCAndGFibGV0J10sXG4gICAgICAgICdOZXdwYWQtSzk3JzogWydOZXdzbXknLCAnTmV3cGFkIEs5NycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05ld3BhZCBQOSc6IFsnTmV3c215JywgJ05ld3BhZCBQOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ00tUEFEIE44JzogWydOZXdzbXknLCAnTS1wYWQgTjgnLCAndGFibGV0J10sXG4gICAgICAgICdMVC1OQTcnOiBbJ05FQycsICdMVC1OQTcnXSxcbiAgICAgICAgJ04tMDFEJzogWydORUMnLCAnTUVESUFTIFBQIE4tMDFEJ10sXG4gICAgICAgICdOLTA0Qyc6IFsnTkVDJywgJ01FRElBUyBOLTA0QyddLFxuICAgICAgICAnTi0wNEQnOiBbJ05FQycsICdNRURJQVMgTFRFIE4tMDREJ10sXG4gICAgICAgICdOLTA1RCc6IFsnTkVDJywgJ01FRElBUyBFUyBOLTA1RCddLFxuICAgICAgICAnTi0wNkMnOiBbJ05FQycsICdNRURJQVMgV1AgTi0wNkMnXSxcbiAgICAgICAgJ04tMDZEJzogWydORUMnLCAnTUVESUFTIFRhYiBOLTA2RCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ04tMDdEJzogWydORUMnLCAnTUVESUFTIFggTi0wN0QnXSxcbiAgICAgICAgJzEwMU4nOiBbJ05FQycsICdNRURJQVMgQ0ggU29mdGJhbmsgMTAxTiddLFxuICAgICAgICAnSVMxMU4nOiBbJ05FQycsICdNRURJQVMgQlIgSVMxMU4nXSxcbiAgICAgICAgJ05leGlhbiBOWC1BODkwJzogWydOZXhpYW4nLCAnSm91cm5leSddLFxuICAgICAgICAnTlgtQTg5MSc6IFsnTmV4aWFuJywgJ1VsdHJhIEpvdXJuZXknXSxcbiAgICAgICAgJ003MjZIQyc6IFsnTmV4dGJvb2snLCAnUHJlbWl1bSA3JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05YTTcyNkhOJzogWydOZXh0Ym9vaycsICdQcmVtaXVtIDcnLCAnZXJlYWRlciddLFxuICAgICAgICAnTlhNODAzSEQnOiBbJ05leHRib29rJywgJ1ByZW1pdW0gOCcsICdlcmVhZGVyJ10sXG4gICAgICAgICdEQVRBTTgwM0hDJzogWydOZXh0Ym9vaycsICdQcmVtaXVtIDgnLCAnZXJlYWRlciddLFxuICAgICAgICAnTlhNOTAxJzogWydOZXh0Ym9vaycsICdOZXh0IDMnLCAnZXJlYWRlciddLFxuICAgICAgICAnTkdNIFZhbml0eSBTbWFydCc6IFsnTkdNJywgJ1Zhbml0eSBTbWFydCddLFxuICAgICAgICAnTm9raWEgTjknOiBbJ05va2lhJywgJ045J10sXG4gICAgICAgICdOb2tpYSBOOTAwJzogWydOb2tpYScsICdOOTAwJ10sXG4gICAgICAgICdMdW1pYTgwMCc6IFsnTm9raWEnLCAnTHVtaWEgODAwJ10sXG4gICAgICAgICdMdW1pYSA5MDAnOiBbJ05va2lhJywgJ0x1bWlhIDkwMCddLFxuICAgICAgICAnTm90aW9uIEluayBBREFNJzogWydOb3Rpb24gSW5rJywgJ0FEQU0nLCAndGFibGV0J10sXG4gICAgICAgICdQNEQgU0lSSVVTJzogWydOdnNibCcsICdQNEQgU0lSSVVTJywgJ3RhYmxldCddLFxuICAgICAgICAnUDREIFNpcml1cyc6IFsnTnZzYmwnLCAnUDREIFNJUklVUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0VGTTcxMEEnOiBbJ09ibGlvJywgJ01pbnQgN3gnLCAndGFibGV0J10sXG4gICAgICAgICdPRFlTLVhwcmVzcyc6IFsnT2R5cycsICdYcHJlc3MnLCAndGFibGV0J10sXG4gICAgICAgICdPbGl2ZXR0aSBPbGlwYWQgMTAwJzogWydPbGl2ZXR0aScsICdPbGlwYWQgMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnT1AxMTAnOiBbJ09saXZldHRpJywgJ09saXBhZCAxMTAnLCAndGFibGV0J10sXG4gICAgICAgICdPTkRBIE1JRCc6IFsnT25kYScsICdNSUQnLCAndGFibGV0J10sXG4gICAgICAgICdWWDU4MEEnOiBbJ09uZGEnLCAnVlg1ODBBJywgJ3RhYmxldCddLFxuICAgICAgICAnVlg2MTBBJzogWydPbmRhJywgJ1ZYNjEwQScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RRMTUwJzogWydPbmRhJywgJ1RRMTUwJ10sXG4gICAgICAgICdOMlQnOiBbJ09OTicsICdOMlQnLCAndGFibGV0J10sXG4gICAgICAgICdSZW5lc2FzJzogWydPcGFkJywgJ1JlbmVzYXMnLCAndGFibGV0J10sXG4gICAgICAgICdyZW5lc2FzIGVtZXYnOiBbJ09wYWQnLCAnUmVuZXNhcycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1g5MDMnOiBbJ09wcG8nLCAnRmluZCBNZSBYOTAzJ10sXG4gICAgICAgICdYOTA1JzogWydPcHBvJywgJ0ZpbmQgMyBYOTA1J10sXG4gICAgICAgICdSODA1JzogWydPcHBvJywgJ1I4MDUnXSxcbiAgICAgICAgJ1I4MDEnOiBbJ09wcG8nLCAnUjgwMSddLFxuICAgICAgICAnUjgxMSc6IFsnT3BwbycsICdSODExJ10sXG4gICAgICAgICdYOTA5JzogWydPcHBvJywgJ1g5MDknXSxcbiAgICAgICAgJ09QUE9SODAxJzogWydPcHBvJywgJ1I4MDEnXSxcbiAgICAgICAgJ09QUE9YOTA1JzogWydPcHBvJywgJ0ZpbmQgMyBYOTA1J10sXG4gICAgICAgICdPUFBPWDkwNyc6IFsnT3BwbycsICdGaW5kIDMgWDkwNyddLFxuICAgICAgICAnWDkwNyc6IFsnT3BwbycsICdGaW5kIDMgWDkwNyddLFxuICAgICAgICAnWDkwMTUnOiBbJ09wcG8nLCAnRmluZCBYOTAxNSddLFxuICAgICAgICAnT1BQT1g5MDE3JzogWydPcHBvJywgJ0ZpbmRlciBYOTAxNyddLFxuICAgICAgICAnT1BQT1U3MDEnOiBbJ09wcG8nLCAnT1BQT1U3MDEnXSxcbiAgICAgICAgJ09QUE9SODA3JzogWydPcHBvJywgJ1JlYWwgUjgwNyddLFxuICAgICAgICAnT1BQT1I4MDUnOiBbJ09wcG8nLCAnUmVhbCBSODA1J10sXG4gICAgICAgICdSODA3JzogWydPcHBvJywgJ1JlYWwgUjgwNyddLFxuICAgICAgICAnT1BQT1Q3MDMnOiBbJ09wcG8nLCAnVDcwMyddLFxuICAgICAgICAnUC0wMUQnOiBbJ1BhbmFzb25pYycsICdQLTAxRCddLFxuICAgICAgICAnUC0wMkQnOiBbJ1BhbmFzb25pYycsICdMdW1peCBQaG9uZSddLFxuICAgICAgICAnUC0wNEQnOiBbJ1BhbmFzb25pYycsICdFbHVnYSddLFxuICAgICAgICAnUC0wN0MnOiBbJ1BhbmFzb25pYycsICdQLTA3QyddLFxuICAgICAgICAnZEwxJzogWydQYW5hc29uaWMnLCAnRWx1Z2EgZEwxJ10sXG4gICAgICAgICcxMDFQJzogWydQYW5hc29uaWMnLCAnTHVtaXggUGhvbmUnXSxcbiAgICAgICAgJ0pULUg1ODBWVCc6IFsnUGFuYXNvbmljJywgJ0JpelBhZCA3JywgJ3RhYmxldCddLFxuICAgICAgICAnSlQtSDU4MVZUJzogWydQYW5hc29uaWMnLCAnQml6UGFkIDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnRlotQTFBJzogWydQYW5hc29uaWMnLCAnVG91Z2hwYWQnLCAndGFibGV0J10sXG4gICAgICAgICdwYW5kaWdpdGFsOWhyJzogWydQYW5kaWdpdGFsJywgJzlIUicsICd0YWJsZXQnXSxcbiAgICAgICAgJ3BhbmRpZ2l0YWw5aHIyJzogWydQYW5kaWdpdGFsJywgJzlIUjInLCAndGFibGV0J10sXG4gICAgICAgICdwYW5kaWdpdGFsb3BjMSc6IFsnUGFuZGlnaXRhbCcsICdPUEMxJywgJ3RhYmxldCddLFxuICAgICAgICAncGFuZGlnaXRhbG9wcDEnOiBbJ1BhbmRpZ2l0YWwnLCAnT1BQMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ3BhbmRpZ2l0YWxwMWhyJzogWydQYW5kaWdpdGFsJywgJ3AxaHInLCAndGFibGV0J10sXG4gICAgICAgICdJTS1BNjAwUyc6IFsnUGFudGVjaCcsICdTSVJJVVMgXFx1MDBjM1xcdWZmZmRcXHUwMGMyXFx1MDBiMSddLFxuICAgICAgICAnSU0tQTYzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIEl6YXInXSxcbiAgICAgICAgJ0lNLUE2OTBMJzogWydQYW50ZWNoJywgJ1NLWSddLFxuICAgICAgICAnSU0tQTY5MFMnOiBbJ1BhbnRlY2gnLCAnU0tZJ10sXG4gICAgICAgICdJTS1BNzEwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBYcHJlc3MnXSxcbiAgICAgICAgJ0lNLUE3MjBMJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFhwcmVzcyddLFxuICAgICAgICAnSU0tQTcyNUwnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgWCsnXSxcbiAgICAgICAgJ0lNLUE3MzBzJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFMnXSxcbiAgICAgICAgJ0lNLUE3MzBTJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFMnXSxcbiAgICAgICAgJ0lNLUE3NTBLJzogWydQYW50ZWNoJywgJ1NLWSBNaXJhY2ggQSddLFxuICAgICAgICAnSU0tQTc2MFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXInXSxcbiAgICAgICAgJ0lNLUE3NzBLJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFJhY2VyJ10sXG4gICAgICAgICdJTS1BNzgwTCc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBSYWNlciddLFxuICAgICAgICAnSU0tQTgwMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgTFRFJ10sXG4gICAgICAgICdJTS1BODEwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBMVEUgTSddLFxuICAgICAgICAnSU0tQTgxMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgTFRFIE0nXSxcbiAgICAgICAgJ0lNLUE4MjBMJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIExURSBFWCddLFxuICAgICAgICAnSU0tQTgzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTgzMEwnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTgzMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTg0MFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUzUnXSxcbiAgICAgICAgJ0lNLUE4NTBLJzogWydQYW50ZWNoJywgJ0lNLUE4NTBLJ10sXG4gICAgICAgICdJTS1UMTAwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBOby4gNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lTMDYnOiBbJ1BhbnRlY2gnLCAnU0lSSVVTIFxcdTAwYzNcXHVmZmZkXFx1MDBjMlxcdTAwYjEnXSxcbiAgICAgICAgJ0FEUjg5OTUnOiBbJ1BhbnRlY2gnLCAnQnJlYWtvdXQnXSxcbiAgICAgICAgJ0FEUjg5OTUgNEcnOiBbJ1BhbnRlY2gnLCAnQnJlYWtvdXQnXSxcbiAgICAgICAgJ0FEUjkxMEwgNEcnOiBbJ1BhbnRlY2gnLCAnQURSOTEwTCddLFxuICAgICAgICAnUGFudGVjaFA0MTAwJzogWydQYW50ZWNoJywgJ0VsZW1lbnQnLCAndGFibGV0J10sXG4gICAgICAgICdQYW50ZWNoUDgwMDAnOiBbJ1BhbnRlY2gnLCAnQ3Jvc3NvdmVyJ10sXG4gICAgICAgICdQYW50ZWNoUDgwMTAnOiBbJ1BhbnRlY2gnLCAnUDgwMTAnXSxcbiAgICAgICAgJ1BhbnRlY2hQOTA2MCc6IFsnUGFudGVjaCcsICdQb2NrZXQnXSxcbiAgICAgICAgJ1BhbnRlY2hQOTA3MCc6IFsnUGFudGVjaCcsICdCdXJzdCddLFxuICAgICAgICAnU0tZIElNLUE2MDBTJzogWydQYW50ZWNoJywgJ1NJUklVUyBcXHUwMGMzXFx1ZmZmZFxcdTAwYzJcXHUwMGIxJ10sXG4gICAgICAgICdTS1kgSU0tQTYzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIEl6YXInXSxcbiAgICAgICAgJ1NLWSBJTS1BNjUwUyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSddLFxuICAgICAgICAnSVMxMVBUJzogWydQYW50ZWNoJywgJ01pcmFjaCBJUzExUFQnXSxcbiAgICAgICAgJ1BBVDcxMlcnOiBbJ1BlcmZlbycsICdQQVQ3MTJXJywgJ3RhYmxldCddLFxuICAgICAgICAnWDdHJzogWydQZWFybCcsICdUb3VjaGxldCBYN0cnLCAndGFibGV0J10sXG4gICAgICAgICdGV1M4MTAnOiBbJ1BISUNPTU0nLCAnRldTODEwJ10sXG4gICAgICAgICdQaGlsaXBzIFBJNTAwMCc6IFsnUGhpbGlwcycsICdQSTUwMDAnLCAndGFibGV0J10sXG4gICAgICAgICdQSTcwMDAnOiBbJ1BoaWxpcHMnLCAnUEk3MDAwJywgJ3RhYmxldCddLFxuICAgICAgICAnUGhpbGlwcyBXNjI2JzogWydQaGlsaXBzJywgJ1c2MjYnXSxcbiAgICAgICAgJ1BoaWxpcHMgVzYzMic6IFsnUGhpbGlwcycsICdXNjMyJ10sXG4gICAgICAgICdNT01PJzogWydQbG95ZXInLCAnTU9NTycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01PTU8xNSc6IFsnUGxveWVyJywgJ01PTU8xNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1BvY2tldEJvb2sgQTcnOiBbJ1BvY2tldEJvb2snLCAnQTcnLCAndGFibGV0J10sXG4gICAgICAgICdQb2NrZXRCb29rIEExMCc6IFsnUG9ja2V0Qm9vaycsICdBMTAnLCAndGFibGV0J10sXG4gICAgICAgICdNb2JpaSA3JzogWydQb2ludCBPZiBWaWV3JywgJ01vYmlpIDcnLCAndGFibGV0J10sXG4gICAgICAgICdQTVAzMzg0QlJVJzogWydQcmVzdGlnaW8nLCAnTXVsdGlwYWQgMzM4NCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RCMDdGVEEnOiBbJ1Bvc2l0aXZvJywgJ1RCMDdGVEEnLCAndGFibGV0J10sXG4gICAgICAgICdRVyBUQi0xMjA3JzogWydRd2FyZScsICdQcm8zJywgJ3RhYmxldCddLFxuICAgICAgICAnVzZIRCBJQ1MnOiBbJ1JhbW9zJywgJ1c2SEQnLCAndGFibGV0J10sXG4gICAgICAgICd3MTAnOiBbJ1JhbW9zJywgJ1cxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1cxMCc6IFsnUmFtb3MnLCAnVzEwJywgJ3RhYmxldCddLFxuICAgICAgICAndzEwIHYyLjAnOiBbJ1JhbW9zJywgJ1cxMCB2Mi4wJywgJ3RhYmxldCddLFxuICAgICAgICAnVzEwIFYyLjAnOiBbJ1JhbW9zJywgJ1cxMCB2Mi4wJywgJ3RhYmxldCddLFxuICAgICAgICAnVDExQUQnOiBbJ1JhbW9zJywgJ1QxMUFEJywgJ3RhYmxldCddLFxuICAgICAgICAnVDExQUQuRkUnOiBbJ1JhbW9zJywgJ1QxMUFEJywgJ3RhYmxldCddLFxuICAgICAgICAnUGxheUJvb2snOiBbJ1JJTScsICdCbGFja0JlcnJ5IFBsYXlCb29rJywgJ3RhYmxldCddLFxuICAgICAgICAnUkJLLTQ5MCc6IFsnUml0bWl4JywgJ1JCSy00OTAnLCAndGFibGV0J10sXG4gICAgICAgICdBOEhEJzogWydTYWF5aScsICdEcm9wYWQgQThIRCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVM3NTY4JzogWydTYW1zdW5nJywgJ1M3NTY4J10sXG4gICAgICAgICdHYWxheHkgTmV4dXMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5leHVzJ10sXG4gICAgICAgICdHVC1CNTMzMCc6IFsnU2Ftc3VuZycsICdHVC1CNTMzMCddLFxuICAgICAgICAnR1QtQjU1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSBQcm8gRHVvcyddLFxuICAgICAgICAnR1QtQjc1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBybyddLFxuICAgICAgICAnR1QtQjc1MTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcm8nXSxcbiAgICAgICAgJ0dULUk1NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDUnXSxcbiAgICAgICAgJ0dULUk1NTAwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgNSddLFxuICAgICAgICAnR1QtSTU1MDBNJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwMC1NUjMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDUnXSxcbiAgICAgICAgJ0dULUk1NTAzJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwOCc6IFsnU2Ftc3VuZycsICdHYWxheHkgNSddLFxuICAgICAgICAnR1QtSTU1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDU1MSddLFxuICAgICAgICAnR1QtSTU1MTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1NTEnXSxcbiAgICAgICAgJ0dULUk1NTEwTSc6IFsnU2Ftc3VuZycsICdHYWxheHkgNTUxJ10sXG4gICAgICAgICdHVC1JNTUxMFQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDU1MSddLFxuICAgICAgICAnR1QtSTU3MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFNwaWNhJ10sXG4gICAgICAgICdHVC1JNTcwMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFNwaWNhJ10sXG4gICAgICAgICdHVC1JNTgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQXBvbGxvJ10sXG4gICAgICAgICdHVC1JNTgwMEQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFwb2xsbyddLFxuICAgICAgICAnR1QtSTU4MDBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBcG9sbG8nXSxcbiAgICAgICAgJ0dULUk1ODAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBcG9sbG8nXSxcbiAgICAgICAgJ0dULUk2NTAwVSc6IFsnU2Ftc3VuZycsICdTYXR1cm4nXSxcbiAgICAgICAgJ0dULUk4MDAwJzogWydTYW1zdW5nJywgJ09tbmlhIDInXSxcbiAgICAgICAgJ0dULUk4MTUwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBXJ10sXG4gICAgICAgICdHVC1JODE1MEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFcnXSxcbiAgICAgICAgJ0dULUk4MTYwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgxNjBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgxNjBQJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgzMjAnOiBbJ1NhbXN1bmcnLCAnSDEnXSxcbiAgICAgICAgJ0dULUk4NTIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBCZWFtJ10sXG4gICAgICAgICdHVC1JODUzMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQmVhbSddLFxuICAgICAgICAnR1QtSTgyNTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEJlYW0nXSxcbiAgICAgICAgJ0dULWk5MDAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnR1QtSTkwMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgVmlicmFudCddLFxuICAgICAgICAnR1QtSTkwMDBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBQbHVzJ10sXG4gICAgICAgICdHVC1JOTAwMyc6IFsnU2Ftc3VuZycsICdHYWxheHkgU0wnXSxcbiAgICAgICAgJ0dULUk5MDAzTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgU0wnXSxcbiAgICAgICAgJ0dULUk5MDA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwOEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ0dULUk5MDEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEdpb3JnaW8gQXJtYW5pJ10sXG4gICAgICAgICdHVC1JOTAxOCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR1QtSTkwMTgnXSxcbiAgICAgICAgJ0dULUk5MDcwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEFkdmFuY2UnXSxcbiAgICAgICAgJ0dULUk5MDcwUCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBBZHZhbmNlJ10sXG4gICAgICAgICdHVC1JOTA4Mic6IFsnU2Ftc3VuZycsICdHYWxheHkgR3JhbmQgRFVPUyddLFxuICAgICAgICAnR1QtSTkwODgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ0dULWk5MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR1QtSTkxMDBHJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ0dULUk5MTAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR1QtSTkxMDBQJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwMyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUiddLFxuICAgICAgICAnR1QtSTkxMDgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ0dULUk5MjEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJIExURSddLFxuICAgICAgICAnR1QtSTkyMTBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJIExURSddLFxuICAgICAgICAnR1QtSTkyMjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ0dULUk5MjI4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHVC1JOTI1MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ0dULUk5MjUwIEVVUiBYWCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ0dULUk5MjYwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcmVtaWVyJ10sXG4gICAgICAgICdHVC1JOTMwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzAzVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnR1QtSTk1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdULUk5NTAwJ10sXG4gICAgICAgICdHVC1JOTgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR1QtSTk4MDAnXSxcbiAgICAgICAgJ0dULU43MDAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHVC1ONzAwMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ0dULU43MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdHVC1ONzEwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBJSSddLFxuICAgICAgICAnR1QtTjgwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUgMTAuMSddLFxuICAgICAgICAnR1QtTjgwMTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUgMTAuMSddLFxuICAgICAgICAnR1QtUDEwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAxMDAwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDEwMDBNJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QMTAwME4nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAxMDAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDEwMDAgVGFibGV0JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QMTAxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDMxMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAyICg3LjApJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDMxMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAzMTEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAzMTEzJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA1MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoMTAuMSknLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNTExMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDIgKDEwLjEpJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDUxMTMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAyICgxMC4xKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjIwMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjAgUGx1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMgTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjIxMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuMCBQbHVzIE4nLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2ODEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy43JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDcxMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xVicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3MzAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgOC45JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDczMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgOC45JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDczMTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA4LjknLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzMyMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3MzIwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAwRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUwMFInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDc1MDBWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMU4nLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUxMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjFOJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUzUzMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBvY2tldCddLFxuICAgICAgICAnR1QtUzUzNjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFknXSxcbiAgICAgICAgJ0dULVM1MzYwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzUzNjBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBZJ10sXG4gICAgICAgICdHVC1TNTM2Myc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzUzNjcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgVFYnXSxcbiAgICAgICAgJ0dULVM1MzY4JzogWydTYW1zdW5nJywgJ0dULVM1MzY4J10sXG4gICAgICAgICdHVC1TNTM2OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzU1NzAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ0dULVM1NTcwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgTWluaSddLFxuICAgICAgICAnR1QtUzU1NzBJJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdHVC1TNTU3MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ0dULVM1NTc4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdHVC1TNTY2MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR2lvJ10sXG4gICAgICAgICdHVC1TNTY2ME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdpbyddLFxuICAgICAgICAnR1QtUzU2NjBWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBHaW8nXSxcbiAgICAgICAgJ0dULVM1NjcwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBGaXQnXSxcbiAgICAgICAgJ0dULVM1NjcwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgRml0J10sXG4gICAgICAgICdHVC1TNTY3MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEZpdCddLFxuICAgICAgICAnR1QtUzU2OTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFhjb3ZlciddLFxuICAgICAgICAnR1QtUzU2OTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBYY292ZXInXSxcbiAgICAgICAgJ0dULVM1ODIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNTgzMEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwRC1wYXJyb3QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBpJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNTgzME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODM4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODM5aSc6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNjEwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSBEdW9zJ10sXG4gICAgICAgICdHVC1TNjEwMkInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgRHVvcyddLFxuICAgICAgICAnR1QtUzY1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmkgMiddLFxuICAgICAgICAnR1QtUzY1MDBEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pIDInXSxcbiAgICAgICAgJ0dULVM2NzAyJzogWydTYW1zdW5nJywgJ0dULVM2NzAyJ10sXG4gICAgICAgICdHVC1TNjgwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlIER1b3MnXSxcbiAgICAgICAgJ0dULVM3NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtUzc1MDBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtUzc1MDBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtVDk1OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBWaWJyYW50J10sXG4gICAgICAgICdTQ0gtaTUwOSc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnU0NILWk1NTknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBvcCddLFxuICAgICAgICAnU0NILWk1NjknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdpbyddLFxuICAgICAgICAnU0NILWk1NzknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnU0NILWk1ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSBEdW9zJ10sXG4gICAgICAgICdTQ0gtaTcwNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDIgKDcuMCknLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtaTgwOSc6IFsnU2Ftc3VuZycsICdTQ0gtaTgwOSddLFxuICAgICAgICAnU0NILWk4ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NDSC1pOTA5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTQ0gtaTkxOSc6IFsnU2Ftc3VuZycsICdTQ0gtaTkxOSddLFxuICAgICAgICAnU0NILWk5MjknOiBbJ1NhbXN1bmcnLCAnU0NILWk5MjknXSxcbiAgICAgICAgJ1NDSC1JMTAwJzogWydTYW1zdW5nJywgJ0dlbSddLFxuICAgICAgICAnU0NILUkxMTAnOiBbJ1NhbXN1bmcnLCAnSWxsdXNpb24nXSxcbiAgICAgICAgJ1NDSC1JNDAwJzogWydTYW1zdW5nJywgJ0NvbnRpbnV1bSddLFxuICAgICAgICAnU0NILUk0MDUnOiBbJ1NhbXN1bmcnLCAnU3RyYXRvc3BoZXJlJ10sXG4gICAgICAgICdTQ0gtSTQwNSA0Ryc6IFsnU2Ftc3VuZycsICdTdHJhdG9zcGhlcmUnXSxcbiAgICAgICAgJ1NDSC1JNTAwJzogWydTYW1zdW5nJywgJ0Zhc2NpbmF0ZSddLFxuICAgICAgICAnU0NILUk1MTAnOiBbJ1NhbXN1bmcnLCAnU3RlYWx0aCBWJ10sXG4gICAgICAgICdTQ0gtSTUxMCA0Ryc6IFsnU2Ftc3VuZycsICdEcm9pZCBDaGFyZ2UnXSxcbiAgICAgICAgJ1NDSC1JNTE1JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOZXh1cyddLFxuICAgICAgICAnU0NILUk1MzUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUlJJ10sXG4gICAgICAgICdTQ0gtSTUzNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NDSC1JNjE5JzogWydTYW1zdW5nJywgJ1NDSC1JNjE5J10sXG4gICAgICAgICdTQ0gtSTY5OSc6IFsnU2Ftc3VuZycsICdTQ0gtSTY5OSddLFxuICAgICAgICAnU0NILUk3NzknOiBbJ1NhbXN1bmcnLCAnU0NILUk3NzknXSxcbiAgICAgICAgJ1NDSC1JODAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wJywgJ3RhYmxldCddLFxuICAgICAgICAnU0NILUk4MTUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjcnLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtSTgxNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA1JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA1IDRHJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTQ0gtSTkxNSc6IFsnU2Ftc3VuZycsICdTQ0gtSTkxNSddLFxuICAgICAgICAnU0NILUk5MzknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUlJJ10sXG4gICAgICAgICdTQ0gtTTgyOEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZWNlZGVudCddLFxuICAgICAgICAnU0NILU04MjhDYXJyYXkoOTA5NjQ4MzQ0OSknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZWNlZGVudCddLFxuICAgICAgICAnU0NILVI1MzBVJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU0NILVI2ODAnOiBbJ1NhbXN1bmcnLCAnUmVwcCddLFxuICAgICAgICAnU0NILVI3MjAnOiBbJ1NhbXN1bmcnLCAnQWRtaXJlJ10sXG4gICAgICAgICdTQ0gtUjczMCc6IFsnU2Ftc3VuZycsICdUcmFuc2ZpeCddLFxuICAgICAgICAnU0NILVI3NjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NDSC1SODIwJzogWydTYW1zdW5nJywgJ1NDSC1SODIwJ10sXG4gICAgICAgICdTQ0gtUjg4MCc6IFsnU2Ftc3VuZycsICdBY2NsYWltJ10sXG4gICAgICAgICdTQ0gtUjkxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgSW5kdWxnZSA0RyddLFxuICAgICAgICAnU0NILVI5MTUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEluZHVsZ2UnXSxcbiAgICAgICAgJ1NDSC1SOTIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBdHRhaW4gNEcnXSxcbiAgICAgICAgJ1NDSC1SOTMwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEF2aWF0b3InXSxcbiAgICAgICAgJ1NDSC1SOTQwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIExpZ2h0cmF5J10sXG4gICAgICAgICdTQ0gtUzcyMEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByb2NsYWltJ10sXG4gICAgICAgICdTQ0gtUzczNUMnOiBbJ1NhbXN1bmcnLCAnU0NILVM3MzUnXSxcbiAgICAgICAgJ1NDSC1XODk5JzogWydTYW1zdW5nJywgJ1NDSC1XODk5J10sXG4gICAgICAgICdTQ0gtVzk5OSc6IFsnU2Ftc3VuZycsICdTQ0gtVzk5OSddLFxuICAgICAgICAnU0dILUk1NDcnOiBbJ1NhbXN1bmcnLCAnU0dILUk1NDcnXSxcbiAgICAgICAgJ1NHSC1JNzE3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdTR0gtSTcxN0QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NHSC1JNzE3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnU0dILUk3MTdSJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdTR0gtSTcyNyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBTa3lyb2NrZXQnXSxcbiAgICAgICAgJ1NHSC1pNzI3Uic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0dILUk3MjdSJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTR0gtSTc0Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NHSC1JNzQ3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NHSC1JNzQ4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU0dILUk3NTcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgU2t5cm9ja2V0IEhEJ10sXG4gICAgICAgICdTR0gtSTc3Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0dILUk5Nzc3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTR0gtSTg5Nic6IFsnU2Ftc3VuZycsICdDYXB0aXZhdGUnXSxcbiAgICAgICAgJ1NHSC1JODk3JzogWydTYW1zdW5nJywgJ0NhcHRpdmF0ZSddLFxuICAgICAgICAnU0dILUk5MjcnOiBbJ1NhbXN1bmcnLCAnQ2FwdGl2YXRlIEdsaWRlJ10sXG4gICAgICAgICdTR0gtSTkyN1InOiBbJ1NhbXN1bmcnLCAnQ2FwdGl2YXRlIEdsaWRlJ10sXG4gICAgICAgICdTR0gtSTk1Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3Uic6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTg3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wJywgJ3RhYmxldCddLFxuICAgICAgICAnU0dILUk5OTcnOiBbJ1NhbXN1bmcnLCAnSW5mdXNlIDRHJ10sXG4gICAgICAgICdTR0gtSTk5N1InOiBbJ1NhbXN1bmcnLCAnSW5mdXNlIDRHJ10sXG4gICAgICAgICdTR0gtSTkwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ1NHSC1TNzMwRyc6IFsnU2Ftc3VuZycsICdTR0gtUzczMCddLFxuICAgICAgICAnU0dILVQ0OTknOiBbJ1NhbXN1bmcnLCAnRGFydCddLFxuICAgICAgICAnU0dILVQ0OTlWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdTR0gtVDQ5OVknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ1NHSC1UNTg5JzogWydTYW1zdW5nJywgJ0dyYXZpdHkgU21hcnQnXSxcbiAgICAgICAgJ1NHSC1UNTg5Uic6IFsnU2Ftc3VuZycsICdHcmF2aXR5IFNtYXJ0J10sXG4gICAgICAgICdTR0gtVDY3OSc6IFsnU2Ftc3VuZycsICdFeGhpYml0IElJIDRHJ10sXG4gICAgICAgICdTR0gtVDY3OU0nOiBbJ1NhbXN1bmcnLCAnRXhoaWJpdCBJSSA0RyddLFxuICAgICAgICAnU0dILVQ3NTknOiBbJ1NhbXN1bmcnLCAnRXhoaWJpdCA0RyddLFxuICAgICAgICAnU0dILVQ3NjknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgQmxhemUgNEcnXSxcbiAgICAgICAgJ1NHSC1UODM5JzogWydTYW1zdW5nJywgJ1QtTW9iaWxlIFNpZGVraWNrJ10sXG4gICAgICAgICdTR0gtVDg0OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1UODU5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1UODY5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdTR0gtVDg3OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnU0dILVQ5NTknOiBbJ1NhbXN1bmcnLCAnVmlicmFudCddLFxuICAgICAgICAnU0dILVQ5NTlEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEZhc2NpbmF0ZSAzRysnXSxcbiAgICAgICAgJ1NHSC1UOTU5UCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBGYXNjaW5hdGUgNEcnXSxcbiAgICAgICAgJ1NHSC1UOTU5Vic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyA0RyddLFxuICAgICAgICAnU0dILVQ5ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NHSC1UOTg5RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBYJ10sXG4gICAgICAgICdTR0gtVDk5OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBCbGF6ZSA0RyddLFxuICAgICAgICAnU0dILVQ5OTlWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEJsYXplIDRHJ10sXG4gICAgICAgICdTSFYtRTEyMEsnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTEyMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTEyMFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTExMFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgTFRFJ10sXG4gICAgICAgICdTSFYtRTE0MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA4LjknLCAndGFibGV0J10sXG4gICAgICAgICdTSFYtRTE1MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjcnLCAndGFibGV0J10sXG4gICAgICAgICdTSFYtRTE2MEsnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NIVi1FMTYwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NIVi1FMTYwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NIVi1FMTcwSyc6IFsnU2Ftc3VuZycsICdTSFYtRTE3MEsnXSxcbiAgICAgICAgJ1NIVi1FMTcwTCc6IFsnU2Ftc3VuZycsICdTSFYtRTE3MEwnXSxcbiAgICAgICAgJ1NIVi1FMjEwSyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVi1FMjEwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVi1FMjEwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVy1NMTAwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgQSddLFxuICAgICAgICAnU0hXLU0xMTBTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTSFctTTEzMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFUnXSxcbiAgICAgICAgJ1NIVy1NMTMwSyc6IFsnU2Ftc3VuZycsICdHYWxheHkgSyddLFxuICAgICAgICAnU0hXLU0xODBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTE4MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMTgwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnU0hXLU0xODBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTE4NVMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMTkwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBIb3BwaW4nXSxcbiAgICAgICAgJ1NIVy1NMjIwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmVvJ10sXG4gICAgICAgICdTSFctTTI0MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnU0hXLU0yNTBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTSFctTTI1MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NIVy1NMjUwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0hXLU0zMDBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzA1Vyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzQwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTSBTdHlsZSddLFxuICAgICAgICAnU0hXLU0zODBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzgwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTM4MFcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xJywgJ3RhYmxldCddLFxuICAgICAgICAnU0hXLU00NDBTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU01ULWk5MTAwJzogWydTYW1zdW5nJywgJ1NNVC1JOTEwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NQSC1ENjAwJzogWydTYW1zdW5nJywgJ0NvbnF1ZXIgNEcnXSxcbiAgICAgICAgJ1NQSC1ENzAwJzogWydTYW1zdW5nJywgJ0VwaWMgNEcnXSxcbiAgICAgICAgJ1NQSC1ENzA1JzogWydTYW1zdW5nJywgJ0VwaWMgNEcgMiddLFxuICAgICAgICAnU1BILUQ3MTAnOiBbJ1NhbXN1bmcnLCAnRXBpYyA0RyBUb3VjaCddLFxuICAgICAgICAnU1BILUw3MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5leHVzJ10sXG4gICAgICAgICdTUEgtTDcxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NQSC1NODIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcmV2YWlsJ10sXG4gICAgICAgICdTUEgtTTgyMC1CU1QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZXZhaWwnXSxcbiAgICAgICAgJ1NQSC1NNTgwJzogWydTYW1zdW5nJywgJ1JlcGxlbmlzaCddLFxuICAgICAgICAnU1BILU05MDAnOiBbJ1NhbXN1bmcnLCAnTW9tZW50J10sXG4gICAgICAgICdTUEgtTTkxMCc6IFsnU2Ftc3VuZycsICdJbnRlcmNlcHQnXSxcbiAgICAgICAgJ1NQSC1NOTIwJzogWydTYW1zdW5nJywgJ1RyYW5zZm9ybSddLFxuICAgICAgICAnU1BILU05MzAnOiBbJ1NhbXN1bmcnLCAnVHJhbnNmb3JtIFVsdHJhJ10sXG4gICAgICAgICdTUEgtTTkzMEJTVCc6IFsnU2Ftc3VuZycsICdUcmFuc2Zvcm0gVWx0cmEnXSxcbiAgICAgICAgJ1NQSC1QMTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdZUC1HQjEnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBsYXllcicsICdtZWRpYSddLFxuICAgICAgICAnWVAtR0I3MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUGxheWVyIDcwJywgJ21lZGlhJ10sXG4gICAgICAgICdZUC1HQjcwRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUGxheWVyIDcwIFBsdXMnLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUdTMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDMuNicsICdtZWRpYSddLFxuICAgICAgICAnWVAtRzEnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgV2lGaSA0LjAnLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUdJMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDQuMicsICdtZWRpYSddLFxuICAgICAgICAnWVAtRzUwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQbGF5ZXInLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUc3MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDUuMCcsICdtZWRpYSddLFxuICAgICAgICAnR1Q5MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdJODk3JzogWydTYW1zdW5nJywgJ0NhcHRpdmF0ZSddLFxuICAgICAgICAnSTc1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5J10sXG4gICAgICAgICdJOTAwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnVDk1OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBWaWJyYW50J10sXG4gICAgICAgICdDYXB0aXZhdGUtSTg5Nyc6IFsnU2Ftc3VuZycsICdDYXB0aXZhdGUnXSxcbiAgICAgICAgJ0dhbGF4eSc6IFsnU2Ftc3VuZycsICdHYWxheHknXSxcbiAgICAgICAgJ0dhbGF4eSBOb3RlJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHYWxheHlTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHYWxheHkgUyBJSSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR2FsYXh5IFgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFgnXSxcbiAgICAgICAgJ0dhbGF4eSBTcGljYSc6IFsnU2Ftc3VuZycsICdHYWxheHkgU3BpY2EnXSxcbiAgICAgICAgJ0dBTEFYWSBUYWInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dBTEFYWSBORVhVUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1ZpYnJhbnRtdGQnOiBbJ1NhbXN1bmcnLCAnVmlicmFudCddLFxuICAgICAgICAnU0MtMDFDJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTQy0wMUQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xIExURScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDLTAyQic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnU0MtMDJDJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTQy0wMkQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjAgUGx1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDLTAzRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBMVEUnXSxcbiAgICAgICAgJ1NDLTA0RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1NDLTA1RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NDLTA2RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0lTVzExU0MnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgV2lNQVgnXSxcbiAgICAgICAgJ0dULVM3NTYyJzogWydTYW1zdW5nJywgJ0dULVM3NTYyJ10sXG4gICAgICAgICdHVC1TNzU2MmknOiBbJ1NhbXN1bmcnLCAnR1QtUzc1NjJpJ10sXG4gICAgICAgICdBMDFTSCc6IFsnU2hhcnAnLCAnQTAxU0gnXSxcbiAgICAgICAgJ0lTMDEnOiBbJ1NoYXJwJywgJ0lTMDEnXSxcbiAgICAgICAgJ0lTMDMnOiBbJ1NoYXJwJywgJ0lTMDMnXSxcbiAgICAgICAgJ0lTMDUnOiBbJ1NoYXJwJywgJ0lTMDUnXSxcbiAgICAgICAgJ0lTMTFTSCc6IFsnU2hhcnAnLCAnQXF1b3MgSVMxMVNIJ10sXG4gICAgICAgICdJUzEyU0gnOiBbJ1NoYXJwJywgJ0FxdW9zIElTMTJTSCddLFxuICAgICAgICAnSVMxM1NIJzogWydTaGFycCcsICdBcXVvcyBJUzEzU0gnXSxcbiAgICAgICAgJ0lTMTRTSCc6IFsnU2hhcnAnLCAnQXF1b3MgSVMxNFNIJ10sXG4gICAgICAgICdJU1cxNlNIJzogWydTaGFycCcsICdBcXVvcyBJU1cxNlNIJ10sXG4gICAgICAgICdFQi1XNTFHSic6IFsnU2hhcnAnLCAnRUItVzUxR0onXSxcbiAgICAgICAgJ1NCTTAwM1NIJzogWydTaGFycCcsICdHYWxhcGFnb3MnXSxcbiAgICAgICAgJ1NCTTAwNVNIJzogWydTaGFycCcsICdHYWxhcGFnb3MnXSxcbiAgICAgICAgJ1NCTTAwNlNIJzogWydTaGFycCcsICdBcXVvcyddLFxuICAgICAgICAnU0JNMDA3U0gnOiBbJ1NoYXJwJywgJ0FxdW9zIDAwN1NIJ10sXG4gICAgICAgICdTQk0wMDlTSCc6IFsnU2hhcnAnLCAnQXF1b3MgMDA5U0gnXSxcbiAgICAgICAgJ1NCTTEwMlNIJzogWydTaGFycCcsICdBcXVvcyAxMDJTSCddLFxuICAgICAgICAnU0JNMTAzU0gnOiBbJ1NoYXJwJywgJ0FxdW9zIDEwM1NIJ10sXG4gICAgICAgICdTQk0xMDRTSCc6IFsnU2hhcnAnLCAnQXF1b3MgMTA0U0gnXSxcbiAgICAgICAgJ1NCTTEwN1NIJzogWydTaGFycCcsICdBcXVvcyAxMDdTSCddLFxuICAgICAgICAnU0JNMTA3U0hCJzogWydTaGFycCcsICdBcXVvcyAxMDdTSCddLFxuICAgICAgICAnU0gtMDFEJzogWydTaGFycCcsICdBcXVvcyBTSC0wMUQnXSxcbiAgICAgICAgJ1NILTAyRCc6IFsnU2hhcnAnLCAnQXF1b3Mgc2xpZGVyIFNILTAyRCddLFxuICAgICAgICAnU0gtMDNDJzogWydTaGFycCcsICdMeW54IDNEJ10sXG4gICAgICAgICdTSC0wNkQnOiBbJ1NoYXJwJywgJ0FxdW9zIFNILTA2RCddLFxuICAgICAgICAnU0gtMDlEJzogWydTaGFycCcsICdBcXVvcyBaZXRhIFNILTA5RCddLFxuICAgICAgICAnU0gtMTBCJzogWydTaGFycCcsICdMeW54J10sXG4gICAgICAgICdTSC0xMkMnOiBbJ1NoYXJwJywgJ0FxdW9zJ10sXG4gICAgICAgICdTSC0xM0MnOiBbJ1NoYXJwJywgJ0FxdW9zIGYgU0gtMTNDJ10sXG4gICAgICAgICdTSDgwRic6IFsnU2hhcnAnLCAnQXF1b3MgU0g4MEYnXSxcbiAgICAgICAgJ1NINzJ4OFUnOiBbJ1NoYXJwJywgJ1NINzJ4OFUnXSxcbiAgICAgICAgJ1NIODExOFUnOiBbJ1NoYXJwJywgJ1NIODExOFUnXSxcbiAgICAgICAgJ1NIODEyOFUnOiBbJ1NoYXJwJywgJ1NIODEyOFUnXSxcbiAgICAgICAgJ1NIODE1OFUnOiBbJ1NoYXJwJywgJ1NIODE1OFUnXSxcbiAgICAgICAgJ1NIODE4OFUnOiBbJ1NoYXJwJywgJ1NIODE4OFUnXSxcbiAgICAgICAgJ1NIODI2OFUnOiBbJ1NoYXJwJywgJ1NIODI2OFUnXSxcbiAgICAgICAgJ0lORk9CQVIgQzAxJzogWydTaGFycCcsICdJTkZPQkFSIEMwMSddLFxuICAgICAgICAnU1BYLTUnOiBbJ1NpbXZhbGxleScsICdTUFgtNSddLFxuICAgICAgICAnU1BYLTUgM0cnOiBbJ1NpbXZhbGxleScsICdTUFgtNSAzRyddLFxuICAgICAgICAnU21hcnRRIEc3JzogWydTbWFydFEnLCAnRzcnLCAndGFibGV0J10sXG4gICAgICAgICdTbWFydFFUNyc6IFsnU21hcnRRJywgJ1Q3JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDEwJzogWydTbWFydFEnLCAnVDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDE1JzogWydTbWFydFEnLCAnVDE1JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDE5JzogWydTbWFydFEnLCAnVDE5JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDIwJzogWydTbWFydFEnLCAnVDIwJywgJ3RhYmxldCddLFxuICAgICAgICAnT01TMSA2JzogWydTb255IEVyaWNzc29uJywgJ0E4aSddLFxuICAgICAgICAnRTEwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ0UxMGknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCBNaW5pJ10sXG4gICAgICAgICdFMTBpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ0UxNSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDgnXSxcbiAgICAgICAgJ0UxNWEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTVpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnRTE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTVpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTZpJzogWydTb255IEVyaWNzc29uJywgJ1c4IFdhbGttYW4nXSxcbiAgICAgICAgJ0xUMTFpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOZW8gViddLFxuICAgICAgICAnTFQxNSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIEFyYyddLFxuICAgICAgICAnTFQxNWktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE4YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjIFMnXSxcbiAgICAgICAgJ0xUMThpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBcmMgUyddLFxuICAgICAgICAnTFQxOGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBcmMgUyddLFxuICAgICAgICAnTFQxOGktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjIFMnXSxcbiAgICAgICAgJ0xUMjJpJzogWydTb255JywgJ1hwZXJpYSBQJ10sXG4gICAgICAgICdMVDI2aSc6IFsnU29ueScsICdYcGVyaWEgUyddLFxuICAgICAgICAnTFQyNmlpJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdMVDI2aS1vJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdMVDI4YXQnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOGgnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOGknOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOWknOiBbJ1NvbnknLCAnWHBlcmlhIEdYJ10sXG4gICAgICAgICdTb255TFQyOWknOiBbJ1NvbnknLCAnWHBlcmlhIEdYJ10sXG4gICAgICAgICdTb255TFQzMGEnOiBbJ1NvbnknLCAnWHBlcmlhIE1pbnQnXSxcbiAgICAgICAgJ1NvbnlMVDMwcCc6IFsnU29ueScsICdYcGVyaWEgTWludCddLFxuICAgICAgICAnTUsxNmEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBybyddLFxuICAgICAgICAnTUsxNmknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBybyddLFxuICAgICAgICAnTVQxMWEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdNVDExaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvIFYnXSxcbiAgICAgICAgJ01UMTFpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvIFYnXSxcbiAgICAgICAgJ01UMTFpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdNVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDE1aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyddLFxuICAgICAgICAnTVQxNWktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDI1aSc6IFsnU29ueScsICdYcGVyaWEgTmVvIEwnXSxcbiAgICAgICAgJ01UMjdpJzogWydTb255JywgJ1hwZXJpYSBTb2xhJ10sXG4gICAgICAgICdSODAwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUjgwMGknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBsYXknXSxcbiAgICAgICAgJ1I4MDBpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUjgwMGF0JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBQbGF5J10sXG4gICAgICAgICdSODAweCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnU0sxN2EnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmkgUHJvJ10sXG4gICAgICAgICdTSzE3aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSBQcm8nXSxcbiAgICAgICAgJ1NLMTdpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSBQcm8nXSxcbiAgICAgICAgJ1NLMTdpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmkgUHJvJ10sXG4gICAgICAgICdTVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSddLFxuICAgICAgICAnU1QxNWknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmknXSxcbiAgICAgICAgJ1NUMTdhJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3RpdmUnXSxcbiAgICAgICAgJ1NUMTdpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3RpdmUnXSxcbiAgICAgICAgJ1NUMThhJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NUMThpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NUMThpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUmF5J10sXG4gICAgICAgICdTVDE4YXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFJheSddLFxuICAgICAgICAnU29ueVNUMjEnOiBbJ1NvbnknLCAnXFwnVGFwaW9jYVxcJyddLFxuICAgICAgICAnU29ueVNUMjFpJzogWydTb255JywgJ1xcJ1RhcGlvY2FcXCcnXSxcbiAgICAgICAgJ1NvbnlTVDIxYTInOiBbJ1NvbnknLCAnXFwnVGFwaW9jYVxcJyddLFxuICAgICAgICAnU1QyMSc6IFsnU29ueScsICdcXCdUYXBpb2NhXFwnJ10sXG4gICAgICAgICdTVDIxaSc6IFsnU29ueScsICdcXCdUYXBpb2NhXFwnJ10sXG4gICAgICAgICdTb255U1QyM2knOiBbJ1NvbnknLCAnXFwnVGFwaW9jYSBEU1xcJyddLFxuICAgICAgICAnU1QyNWknOiBbJ1NvbnknLCAnWHBlcmlhIFUnXSxcbiAgICAgICAgJ1NUMjdpJzogWydTb255JywgJ1hwZXJpYSBHbyddLFxuICAgICAgICAnVTIwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmkgUHJvJ10sXG4gICAgICAgICdVMjBpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1UyMGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1dUMTNpJzogWydTb255IEVyaWNzc29uJywgJ01peCBXYWxrbWFuJ10sXG4gICAgICAgICdXVDE4aSc6IFsnU29ueSBFcmljc3NvbicsICdXYWxrbWFuJ10sXG4gICAgICAgICdXVDE5YSc6IFsnU29ueSBFcmljc3NvbicsICdMaXZlIHdpdGggV2Fsa21hbiddLFxuICAgICAgICAnV1QxOWknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnTGl2ZSB3aXRoIFdhbGttYW4nXSxcbiAgICAgICAgJ1dUMTlpdic6IFsnU29ueSBFcmljc3NvbicsICdMaXZlIHdpdGggV2Fsa21hbiddLFxuICAgICAgICAnWDgnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdYMTAnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCddLFxuICAgICAgICAnWDEwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwJ10sXG4gICAgICAgICdYMTBpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1gxMGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1gxMFMnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCddLFxuICAgICAgICAnWDEwbWluaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ1gxMCBNaW5pJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSddLFxuICAgICAgICAnWDEwIE1pbmkgUHJvJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1oxaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUzUxU0UnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmknXSxcbiAgICAgICAgJ0lTMTFTJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3JvJ10sXG4gICAgICAgICdJUzEyUyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyBIRCddLFxuICAgICAgICAnU08tMDFCJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1NPLTAxQyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdTTy0wMUQnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBsYXknXSxcbiAgICAgICAgJ1NPLTAyQyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyddLFxuICAgICAgICAnU08tMDJEJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOWCddLFxuICAgICAgICAnU08tMDNDJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NPLTAzRCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyBIRCddLFxuICAgICAgICAnU08tMDREJzogWydTb255JywgJ1hwZXJpYSBHWCddLFxuICAgICAgICAnU08tMDVEJzogWydTb255JywgJ1hwZXJpYSBTWCddLFxuICAgICAgICAnWFBFUklBIFg4JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnWHBlcmlhIFg4JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnWHBlcmlhIFgxMCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwJ10sXG4gICAgICAgICdYcGVyaWEgcmF5JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1hwZXJpYSBSYXknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFJheSddLFxuICAgICAgICAnWHBlcmlhIEFyYyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdYcGVyaWEgTWluaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSddLFxuICAgICAgICAnWHBlcmlhIG5lbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdYcGVyaWEgTmVvJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOZW8nXSxcbiAgICAgICAgJ1hQRVJJQSBORU8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyddLFxuICAgICAgICAnWHBlcmlhIE5lb1YnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdYcGVyaWEgTmVvIFYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdYcGVyaWEgUGxheSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnU29ueSBFcmljc3NvbiBYcGVyaWEgWDEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxJ10sXG4gICAgICAgICdTb255SGF5YWJ1c2EnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnSGF5YWJ1c2EnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnbm96b21pJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdTb255IFRhYmxldCBQJzogWydTb255JywgJ1RhYmxldCBQJywgJ3RhYmxldCddLFxuICAgICAgICAnU29ueSBUYWJsZXQgUyc6IFsnU29ueScsICdUYWJsZXQgUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05XWi1aMTAwMFNlcmllcyc6IFsnU29ueScsICdXYWxrbWFuIFonLCAnbWVkaWEnXSxcbiAgICAgICAgJ05XLVoxMDAwU2VyaWVzJzogWydTb255JywgJ1dhbGttYW4gWicsICdtZWRpYSddLFxuICAgICAgICAnU3BpY2UgTWkyODAnOiBbJ1NwaWNlJywgJ01pLTI4MCddLFxuICAgICAgICAnU3BpY2UgTWkzMDAnOiBbJ1NwaWNlJywgJ01pLTMwMCddLFxuICAgICAgICAnU3BpY2UgTWktMzEwJzogWydTcGljZScsICdNaS0zMTAnXSxcbiAgICAgICAgJ1NwaWNlIE1pLTQyNSc6IFsnU3BpY2UnLCAnTWktNDI1J10sXG4gICAgICAgICdTUElDRSBNaS03MjAnOiBbJ1NwaWNlJywgJ01pLTcyMCddLFxuICAgICAgICAnQTcyNzIrJzogWydTdGFyJywgJ0E3MjcyKyddLFxuICAgICAgICAnZTExMDkgdjczIGdxMTAwMiBjdHAnOiBbJ1N0YXInLCAnWDE4aSddLFxuICAgICAgICAnVFMxMDA0VCc6IFsnU3VyZiAzUScsICdUUzEwMDRUJywgJ3RhYmxldCddLFxuICAgICAgICAnU1lUQUJFWDctMic6IFsnU3lsdmFuaWEnLCAnU1lUQUJFWDcnLCAndGFibGV0J10sXG4gICAgICAgICdUQ0wgQTg2MCc6IFsnVENMJywgJ0E4NjAnXSxcbiAgICAgICAgJ1RDTCBBOTA2JzogWydUQ0wnLCAnQTkwNiddLFxuICAgICAgICAnVENMIEE5MDknOiBbJ1RDTCcsICdBOTA5J10sXG4gICAgICAgICdUQ0wgQTkxOSc6IFsnVENMJywgJ0E5MTknXSxcbiAgICAgICAgJ1RDTCBBOTkwJzogWydUQ0wnLCAnQTk5MCddLFxuICAgICAgICAnVENMIEE5OTYnOiBbJ1RDTCcsICdBOTk2J10sXG4gICAgICAgICdUQ0wgQTk5OCc6IFsnVENMJywgJ0E5OTgnXSxcbiAgICAgICAgJ1RDTCBHRU5FU0VFIEU3MDgnOiBbJ1RDTCcsICdHZW5lc2VlIEU3MDgnXSxcbiAgICAgICAgJ0ExMHQoNURNMyknOiBbJ1RlY2xhc3QnLCAnQTEwVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1A3Mic6IFsnVGVjbGFzdCcsICdQNzInLCAndGFibGV0J10sXG4gICAgICAgICdQNzZUSSc6IFsnVGVjbGFzdCcsICdQNzZUaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1A4MUhEJzogWydUZWNsYXN0JywgJ1A4MUhEJywgJ3RhYmxldCddLFxuICAgICAgICAnUDg1KFI4QTEpJzogWydUZWNsYXN0JywgJ1A4NScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Q3MjAgU0UnOiBbJ1RlY2xhc3QnLCAnVDcyMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Q3NjAgZnJvbSBtb2FnZS5jb20nOiBbJ1RlY2xhc3QnLCAnVDc2MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ3RlZ2F2Mic6IFsnVGVnYXRlY2gnLCAnVEVHQSB2MicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RNLTcwMjUnOiBbJ3RlWGV0JywgJ1RNLTcwMjUnLCAndGFibGV0J10sXG4gICAgICAgICdNb0ZpbmcnOiBbJ1Rob21zb24nLCAnTW9GaW5nJywgJ3RhYmxldCddLFxuICAgICAgICAnVWx0aW1hdGUxMCc6IFsnVG9tdGVjJywgJ1VsdGltYXRlMTAnLCAndGFibGV0J10sXG4gICAgICAgICdUaGwgVjcnOiBbJ1RITCcsICdWNyddLFxuICAgICAgICAnVGhMIFY3JzogWydUSEwnLCAnVjcnXSxcbiAgICAgICAgJ1RoTCBWOCc6IFsnVEhMJywgJ1Y4J10sXG4gICAgICAgICdUaEwgVjknOiBbJ1RITCcsICdWOSddLFxuICAgICAgICAnVGhMIFYxMSc6IFsnVEhMJywgJ1YxMSddLFxuICAgICAgICAnVFNCIENMT1VEIENPTVBBTklPTjtUT1NISUJBIEFDIEFORCBBWic6IFsnVG9zaGliYScsICdEeW5hYm9vayBBWicsICdkZXNrdG9wJ10sXG4gICAgICAgICdUT1NISUJBIEFDIEFORCBBWic6IFsnVG9zaGliYScsICdEeW5hYm9vayBBWicsICdkZXNrdG9wJ10sXG4gICAgICAgICdUT1NISUJBIEZPTElPIEFORCBBJzogWydUb3NoaWJhJywgJ0ZvbGlvIDEwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1QtMDFDJzogWydUb3NoaWJhJywgJ1JlZ3phIFQtMDFDJ10sXG4gICAgICAgICdULTAxRCc6IFsnVG9zaGliYScsICdSZWd6YSBULTAxRCddLFxuICAgICAgICAnSVMwNCc6IFsnVG9zaGliYScsICdSZWd6YSBJUzA0J10sXG4gICAgICAgICdJUzExVCc6IFsnVG9zaGliYScsICdSZWd6YSBJUzExVCddLFxuICAgICAgICAnQVQxUzAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQxUzAnXSxcbiAgICAgICAgJ1Rvc3RhYjAzJzogWydUb3NoaWJhJywgJ1JlZ3phIEFUMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQxMDAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdBVDIwMCc6IFsnVG9zaGliYScsICdSZWd6YSBBVDIwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FUNDcwJzogWydUb3NoaWJhJywgJ1JlZ3phIEFUNDcwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQ1NzAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQ1NzAnLCAndGFibGV0J10sXG4gICAgICAgICdBVDgzMCc6IFsnVG9zaGliYScsICdSZWd6YSBBVDgzMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ZvbGlvIDEwMCc6IFsnVG9zaGliYScsICdGb2xpbyAxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdmb2xpbzEwMCc6IFsnVG9zaGliYScsICdGb2xpbyAxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdUSFJpVkUnOiBbJ1Rvc2hpYmEnLCAnVEhSaVZFJywgJ3RhYmxldCddLFxuICAgICAgICAnRmFudGFzdGljIFQzJzogWydUV00nLCAnRmFudGFzdGljIFQzJ10sXG4gICAgICAgICdNNzAwMTQnOiBbJ1VuaXRlZCBTdGFyIFRlY2hub2xvZ3knLCAnTTcwMDE0JywgJ3RhYmxldCddLFxuICAgICAgICAnUFM0Nyc6IFsnVmVsb2NpdHkgTWljcm8nLCAnQ3J1eiBQUzQ3JywgJ3RhYmxldCddLFxuICAgICAgICAnVDMwMSc6IFsnVmVsb2NpdHkgTWljcm8nLCAnQ3J1eiBUMzAxJywgJ3RhYmxldCddLFxuICAgICAgICAnVmliby1BNjg4JzogWydGSUgnLCAnVmlibyBBNjg4J10sXG4gICAgICAgICdWaWRlb2Nvbi1WNzUwMCc6IFsnVmlkZW9jb24nLCAnVjc1MDAnXSxcbiAgICAgICAgJ0dUYWJsZXQnOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnR3RhYkNvbWInOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnVGVhbURSSCBJQ1MgZm9yIEdUYWJsZXQnOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnVmlld1BhZDcnOiBbJ1ZpZXdTb25pYycsICdWaWV3UGFkIDcnLCAndGFibGV0J10sXG4gICAgICAgICdWaWV3UGFkIDEwZSc6IFsnVmlld1NvbmljJywgJ1ZpZXdQYWQgMTBlJywgJ3RhYmxldCddLFxuICAgICAgICAnVlRBQjEwMDgnOiBbJ1ZpemlvJywgJ1ZUQUIxMDA4JywgJ3RhYmxldCddLFxuICAgICAgICAnVlRBQjMwMTAnOiBbJ1ZpemlvJywgJ1ZUQUIzMDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnVk9UTyBXNTMwMCc6IFsnVk9UTycsICdXNTMwMCddLFxuICAgICAgICAneFBBRC03MCc6IFsnV2F5dGVRJywgJ3hQQUQtNzAnLCAndGFibGV0J10sXG4gICAgICAgICd4VEFCLTcwJzogWydXYXl0ZVEnLCAneFRBQi03MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1dlbGxjb00tQTk5JzogWydXZWxsY29NJywgJ0E5OSddLFxuICAgICAgICAnTjEyJzogWydXaW5kb3cnLCAnTjEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTjEyUic6IFsnV2luZG93JywgJ04xMlInLCAndGFibGV0J10sXG4gICAgICAgICdONTAnOiBbJ1dpbmRvdycsICdONTAnLCAndGFibGV0J10sXG4gICAgICAgICdONTBEVCc6IFsnV2luZG93JywgJ041MERUJywgJ3RhYmxldCddLFxuICAgICAgICAnTjUwR1QnOiBbJ1dpbmRvdycsICdONTBHVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ041MEdUIEEnOiBbJ1dpbmRvdycsICdONTBHVC1BJywgJ3RhYmxldCddLFxuICAgICAgICAnTjcwJzogWydXaW5kb3cnLCAnTjcwJywgJ3RhYmxldCddLFxuICAgICAgICAnTjcwIERVQUwgQ09SRSc6IFsnV2luZG93JywgJ043MCBEdWFsIENvcmUnLCAndGFibGV0J10sXG4gICAgICAgICdOODAnOiBbJ1dpbmRvdycsICdOODAnLCAndGFibGV0J10sXG4gICAgICAgICdOOTAnOiBbJ1dpbmRvdycsICdOOTAnLCAndGFibGV0J10sXG4gICAgICAgICdOOTAgRFVBTCBDT1JFMiBWMTInOiBbJ1dpbmRvdycsICdOOTAgRHVhbCBDb3JlJywgJ3RhYmxldCddLFxuICAgICAgICAnTjYxMic6IFsnV2lzaHdheScsICdONjEyJ10sXG4gICAgICAgICdBVC1BUzQzRCc6IFsnV29sZmdhbmcnLCAnQVQtQVM0M0QnXSxcbiAgICAgICAgJ00xMic6IFsnV29wYWQnLCAnTTEyJywgJ3RhYmxldCddLFxuICAgICAgICAnV004NjUwJzogWydXb25kZXJNZWRpYScsICdXTTg2NTAnLCAndGFibGV0J10sXG4gICAgICAgICdNSS1PTkUnOiBbJ1hpYW9taScsICdNSS1PTkUnXSxcbiAgICAgICAgJ01JLU9ORSBDMSc6IFsnWGlhb21pJywgJ01JLU9ORSBDMSddLFxuICAgICAgICAnTUktT05FIFBsdXMnOiBbJ1hpYW9taScsICdNSS1PTkUgUGx1cyddLFxuICAgICAgICAnTUkgMVMnOiBbJ1hpYW9taScsICdNSS1PTkUgUGx1cyddLFxuICAgICAgICAnTUkgMVNDJzogWydYaWFvbWknLCAnTUktT05FIDFTQyddLFxuICAgICAgICAnbWlvbmUgcGx1cyc6IFsnWGlhb21pJywgJ01JLU9ORSBQbHVzJ10sXG4gICAgICAgICdNSS1UV08nOiBbJ1hpYW9taScsICdNSS1UV08nXSxcbiAgICAgICAgJ01JIDInOiBbJ1hpYW9taScsICdNSS1UV08nXSxcbiAgICAgICAgJ01JIDJTJzogWydYaWFvbWknLCAnTUktVFdPIFBsdXMnXSxcbiAgICAgICAgJ01JIDJTQyc6IFsnWGlhb21pJywgJ01JLVRXTyBQbHVzJ10sXG4gICAgICAgICdRMDdDTDAxJzogWydYVmlzaW9uJywgJ1EwNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ042JzogWydZYXJ2aWsnLCAnMjEwIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0VNUjE4NzknOiBbJ1lpZG9uZycsICdFTVIxODc5JywgJ3RhYmxldCddLFxuICAgICAgICAneXVzdW4gVzcwMic6IFsnWXVzdW4nLCAnVzcwMiddLFxuICAgICAgICAnWVgtWVVTVU4gRTgwJzogWydZdXN1bicsICdFODAnXSxcbiAgICAgICAgJ3p0MTgwJzogWydaZW5pdGhpbmsnLCAnWlQtMTgwJywgJ3RhYmxldCddLFxuICAgICAgICAnSmFndWFyNyc6IFsnWmlpTGFicycsICdKYWd1YXIgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1ppc3MgUmFuZ2VyIEhEJzogWydaaXNzJywgJ1JhbmdlciBIRCddLFxuICAgICAgICAnWlRFIExpYnJhJzogWydaVEUnLCAnTGlicmEnXSxcbiAgICAgICAgJ1pURS1UIFQ5JzogWydaVEUnLCAnTGlnaHQgVGFiIFQ5JywgJ3RhYmxldCddLFxuICAgICAgICAnVjknOiBbJ1pURScsICdMaWdodCBUYWIgVjknLCAndGFibGV0J10sXG4gICAgICAgICdWOWUrJzogWydaVEUnLCAnTGlnaHQgVGFiIDInLCAndGFibGV0J10sXG4gICAgICAgICdWOUEnOiBbJ1pURScsICdMaWdodCBUYWIgMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xpZ2h0IFRhYiAyVyc6IFsnWlRFJywgJ0xpZ2h0IFRhYiAyJywgJ3RhYmxldCddLFxuICAgICAgICAnTGlnaHQgVGFiIDInOiBbJ1pURScsICdMaWdodCBUYWIgMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Y5Qyc6IFsnWlRFJywgJ0xpZ2h0IFRhYiAzJywgJ3RhYmxldCddLFxuICAgICAgICAnVjU1JzogWydaVEUnLCAnT3B0aWsnLCAndGFibGV0J10sXG4gICAgICAgICdBY3F1YSc6IFsnWlRFJywgJ0FjcXVhJ10sXG4gICAgICAgICdCbGFkZSc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdCbGFkZS1WODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURS1VIFY4ODAnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnQmxhZGUtb3BkYSc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdaVEUtQkxBREUnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnWlRFIEJsYWRlJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURSBWODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURS1VKFYpODgwKyc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdWODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ2E1JzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ0JsYWRlMic6IFsnWlRFJywgJ0JsYWRlIDInXSxcbiAgICAgICAgJ0JsYWRlIFMnOiBbJ1pURScsICdCbGFkZSBTJ10sXG4gICAgICAgICdYNTAwJzogWydaVEUnLCAnU2NvcmUnXSxcbiAgICAgICAgJ1pURS1YNTAwJzogWydaVEUnLCAnU2NvcmUnXSxcbiAgICAgICAgJ1NrYXRlJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURSBTa2F0ZSc6IFsnWlRFJywgJ1NrYXRlJ10sXG4gICAgICAgICdaVEUtU2thdGUnOiBbJ1pURScsICdTa2F0ZSddLFxuICAgICAgICAnWlRFLVNLQVRFJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURS1WOTYwJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURS1VIFY5NjAnOiBbJ1pURScsICdTa2F0ZSddLFxuICAgICAgICAnWlRFIFJhY2VyJzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1pURS1SQUNFUic6IFsnWlRFJywgJ1JhY2VyJ10sXG4gICAgICAgICdNVEMgOTE2JzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1JhY2VyJzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1JhY2VySUknOiBbJ1pURScsICdSYWNlciAyJ10sXG4gICAgICAgICdSQUNFUklJJzogWydaVEUnLCAnUmFjZXIgMiddLFxuICAgICAgICAnWlRFIFJvYW1lcic6IFsnWlRFJywgJ1JvYW1lciddLFxuICAgICAgICAnTjg2MCc6IFsnWlRFJywgJ1dhcnAnXSxcbiAgICAgICAgJ044ODAnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnWlRFLVQgVTgwMic6IFsnWlRFJywgJ1QtVTgwMiddLFxuICAgICAgICAnWlRFLVQgVTgwNic6IFsnWlRFJywgJ1QtVTgwNiddLFxuICAgICAgICAnWlRFLVQgVTgxMic6IFsnWlRFJywgJ1QtVTgxMiddLFxuICAgICAgICAnWlRFLVQgVTgzMCc6IFsnWlRFJywgJ1QtVTgzMCddLFxuICAgICAgICAnWlRFLVQgVTg4MCc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnWlRFIFQgVTg4MCc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnWlRFLVRVODgwJzogWydaVEUnLCAnVC1VODgwJ10sXG4gICAgICAgICdaVEUtVFU5MDAnOiBbJ1pURScsICdULVU5MDAnXSxcbiAgICAgICAgJ1pURS1UIFU5NjAnOiBbJ1pURScsICdULVU5NjAnXSxcbiAgICAgICAgJ1pURS1UVTk2MHMnOiBbJ1pURScsICdULVU5NjAnXSxcbiAgICAgICAgJ1pURS1UIFU5NjBzJzogWydaVEUnLCAnVC1VOTYwJ10sXG4gICAgICAgICdaVEUgVSBONzIwJzogWydaVEUnLCAnVS1ONzIwJ10sXG4gICAgICAgICdaVEUtVSBWODU2JzogWydaVEUnLCAnVS1WODU2J10sXG4gICAgICAgICdaVEUtVSBWODU3JzogWydaVEUnLCAnVS1WODU3J10sXG4gICAgICAgICdaVEUtVSBWODgxJzogWydaVEUnLCAnVS1WODgxJ10sXG4gICAgICAgICdaVEUtVSBYODUwJzogWydaVEUnLCAnVS1YODUwJ10sXG4gICAgICAgICdaVEUtVSBYODc2JzogWydaVEUnLCAnVS1YODc2J10sXG4gICAgICAgICdaVEUtWDg3Nic6IFsnWlRFJywgJ1UtWDg3NiddLFxuICAgICAgICAnWlRFLUMgUjc1MCc6IFsnWlRFJywgJ0MtUjc1MCddLFxuICAgICAgICAnWlRFLUMgTjYwMCc6IFsnWlRFJywgJ0MtTjYwMCddLFxuICAgICAgICAnWlRFLUMgTjYwMCsnOiBbJ1pURScsICdDLU42MDAnXSxcbiAgICAgICAgJ1pURS1DIE42MDYnOiBbJ1pURScsICdDLU42MDYnXSxcbiAgICAgICAgJ1pURS1DIE43MDAnOiBbJ1pURScsICdDLU43MDAnXSxcbiAgICAgICAgJ1pURS1DIE43NjAnOiBbJ1pURScsICdDLU43NjAnXSxcbiAgICAgICAgJ1pURS1DIE44ODAnOiBbJ1pURScsICdDLU44ODAnXSxcbiAgICAgICAgJ1pURS1DIE44ODBTJzogWydaVEUnLCAnQy1OODgwJ10sXG4gICAgICAgICdaVEUtQyBOODgwcyc6IFsnWlRFJywgJ0MtTjg4MCddLFxuICAgICAgICAnWlRFLUMgWDUwMCc6IFsnWlRFJywgJ0MtWDUwMCddLFxuICAgICAgICAnWlRFLUMgWDkyMCc6IFsnWlRFJywgJ0MtWDkyMCddLFxuICAgICAgICAnWlhZLVpURS1DIFg5MjAnOiBbJ1pURScsICdDLVg5MjAnXSxcbiAgICAgICAgJ1pURSBHVjgyMSc6IFsnWlRFJywgJ0ctVjgyMSddLFxuICAgICAgICAnWlRFIE44ODBFJzogWydaVEUnLCAnTjg4MEUnXSxcbiAgICAgICAgJ1pURS1OODgwRSc6IFsnWlRFJywgJ044ODBFJ10sXG4gICAgICAgICdNSVVJIE44ODBTJzogWydaVEUnLCAnTjg4MFMnXSxcbiAgICAgICAgJ1pURSBOODgyRSc6IFsnWlRFJywgJ044ODJFJ10sXG4gICAgICAgICdaVEUgTjg1NUQnOiBbJ1pURScsICdOODU1RCddLFxuICAgICAgICAnWlRFLU45MTAnOiBbJ1pURScsICdOOTEwJ10sXG4gICAgICAgICdFODEwJzogWydaVEUnLCAnRTgxMCddLFxuICAgICAgICAndTg4MCc6IFsnWlRFJywgJ1U4ODAnXSxcbiAgICAgICAgJ1pURSBVODgwRSc6IFsnWlRFJywgJ1U4ODBFJ10sXG4gICAgICAgICdVODgwJzogWydaVEUnLCAnVTg4MCddLFxuICAgICAgICAnWlRFIFU5NzAnOiBbJ1pURScsICdVOTcwJ10sXG4gICAgICAgICdaVEUgVjc2OCc6IFsnWlRFJywgJ1Y3NjgnXSxcbiAgICAgICAgJ1pURS1WODU2JzogWydaVEUnLCAnVjg1NiddLFxuICAgICAgICAnWlRFIFY4NzdiJzogWydaVEUnLCAnVjg3NyddLFxuICAgICAgICAnWlRFIFY4ODlEJzogWydaVEUnLCAnVjg4OSddLFxuICAgICAgICAnWlRFLVo5OTAnOiBbJ1pURScsICdaOTkwJ10sXG4gICAgICAgICdaVEVVNzkwJzogWydaVEUnLCAnVTc5MCddLFxuICAgICAgICAnMDAzWic6IFsnWlRFJywgJ1NvZnRiYW5rIDAwM1onXSxcbiAgICAgICAgJzAwOFonOiBbJ1pURScsICdTb2Z0YmFuayAwMDhaJ10sXG4gICAgICAgICcwMDlaJzogWydaVEUnLCAnU29mdGJhbmsgU3RhcjcnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk2OTEnOiBbJ2ktTW9iaWxlJywgJ2k2OTEnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk2OTUnOiBbJ2ktTW9iaWxlJywgJ2k2OTUnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk4NTgnOiBbJ2ktTW9iaWxlJywgJ2k4NTgnXSxcbiAgICAgICAgJ2ktbW9iaWxlIDNHIDg1MDAnOiBbJ2ktTW9iaWxlJywgJzNHIDg1MDAnXSxcbiAgICAgICAgJ2ktbW9iaWxlIEktTm90ZSc6IFsnaS1Nb2JpbGUnLCAnaS1Ob3RlJywgJ3RhYmxldCddLFxuICAgICAgICAnT3B0aW11cyBCb3N0b24nOiBbJ09wdGltdXMnLCAnQm9zdG9uJ10sXG4gICAgICAgICdPcHRpbXVzIFNhbiBGcmFuY2lzY28nOiBbJ09wdGltdXMnLCAnU2FuIEZyYW5jaXNjbyddLFxuICAgICAgICAnT3B0aW11cyBNb250ZSBDYXJsbyc6IFsnT3B0aW11cycsICdNb250ZSBDYXJsbyddLFxuICAgICAgICAnT3JhbmdlIEJvc3Rvbic6IFsnT3JhbmdlJywgJ0Jvc3RvbiddLFxuICAgICAgICAnT3JhbmdlIE1vbnRlIENhcmxvJzogWydPcmFuZ2UnLCAnTW9udGUgQ2FybG8nXSxcbiAgICAgICAgJ1NhbiBGcmFuY2lzY28nOiBbJ09yYW5nZScsICdTYW4gRnJhbmNpc2NvJ10sXG4gICAgICAgICdTYW4gRnJhbmNpc2NvIGZvciBPcmFuZ2UnOiBbJ09yYW5nZScsICdTYW4gRnJhbmNpc2NvJ10sXG4gICAgICAgICdPcmFuZ2UgU2FuIEZyYW5jaXNjbyc6IFsnT3JhbmdlJywgJ1NhbiBGcmFuY2lzY28nXSxcbiAgICAgICAgJ01PVkUnOiBbJ1QtTW9iaWxlJywgJ01PVkUnXSxcbiAgICAgICAgJ1QtTW9iaWxlIEcxJzogWydULU1vYmlsZScsICdHMSddLFxuICAgICAgICAnVC1Nb2JpbGUgRzInOiBbJ1QtTW9iaWxlJywgJ0cyJ10sXG4gICAgICAgICdULU1vYmlsZSBHMiBUb3VjaCc6IFsnVC1Nb2JpbGUnLCAnRzInXSxcbiAgICAgICAgJ0xHLVA5OTknOiBbJ1QtTW9iaWxlJywgJ0cyeCddLFxuICAgICAgICAnTEctRTczOSc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCddLFxuICAgICAgICAnVC1Nb2JpbGUgbXlUb3VjaCAzRyc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCAzRyddLFxuICAgICAgICAnVC1Nb2JpbGUgbXlUb3VjaCAzRyBTbGlkZSc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCAzRyBTbGlkZSddLFxuICAgICAgICAnVC1Nb2JpbGUgRXNwcmVzc28nOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggM0cgU2xpZGUnXSxcbiAgICAgICAgJ0hUQyBteVRvdWNoIDNHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDNHIFNsaWRlJ10sXG4gICAgICAgICdULU1vYmlsZSBteVRvdWNoIDRHJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHJ10sXG4gICAgICAgICdIVEMgR2xhY2llcic6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCA0RyddLFxuICAgICAgICAnSFRDIFBhbmFjaGUnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ215VG91Y2g0Ryc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCA0RyddLFxuICAgICAgICAnTXkgVG91Y2ggNEcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBNeXRvdWNoIDRHJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHJ10sXG4gICAgICAgICdIVEMgTXkgVG91Y2ggNEcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBteXRvdWNoNGcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBteVRvdWNoIDRHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHIFNsaWRlJ10sXG4gICAgICAgICdteVRvdWNoIDRHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHIFNsaWRlJ10sXG4gICAgICAgICdULU1vYmlsZSBteVRvdWNoIFEnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggUSddLFxuICAgICAgICAnTEctQzgwMCc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCBRJ10sXG4gICAgICAgICdQdWxzZSBNaW5pJzogWydULU1vYmlsZScsICdQdWxzZSBNaW5pJ10sXG4gICAgICAgICdWb2RhZm9uZSA4NDUnOiBbJ1ZvZGFmb25lJywgJzg0NSBOb3ZhJ10sXG4gICAgICAgICdWb2RhZm9uZSA4NTgnOiBbJ1ZvZGFmb25lJywgJzg1OCBTbWFydCddLFxuICAgICAgICAnVm9kYWZvbmUgOTQ1JzogWydWb2RhZm9uZScsICc5NDUnXSxcbiAgICAgICAgJ1ZvZGFmb25lIFNtYXJ0IElJJzogWydWb2RhZm9uZScsICdTbWFydCBJSSddLFxuICAgICAgICAnU21hcnRUYWIxMCc6IFsnVm9kYWZvbmUnLCAnU21hcnRUYWIgMTAnLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtTjcxOSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBJSSddLFxuICAgICAgICAnQ29vbHBhZCA4MTkwJzogWydDb29scGFkJywgJzgxOTAnXSxcbiAgICAgICAgJ1U3MDVUJzogWydPcHBvJywgJ1VsaWtlMiddLFxuICAgICAgICAnQ29vbHBhZCA4MDIwKyc6IFsnQ29vbHBhZCcsICc4MDIwJ10sXG4gICAgICAgICdIdWF3ZWkgWTMxMC01MDAwJzogWydIdWF3ZWknLCAnWTMxMCddLFxuICAgICAgICAnR1QtUzc1NzInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRyZW5kIER1b3MgSUknXSxcbiAgICAgICAgJ0xlbm92byBBMjc4dCc6IFsnTGVub3ZvJywgJ0EyNzh0J10sXG4gICAgICAgICdMZW5vdm8gQTY5MCc6IFsnTGVub3ZvJywgJ0E2OTAnXSxcbiAgICAgICAgJ0dULUk4MjYyRCc6IFsnU2Ftc3VuZycsICdMZVBob25lIEk4MjYyRCddLFxuICAgICAgICAnTGVub3ZvIEEyNzh0JzogWydMZW5vdm8nLCAnQTI3OHQnXSxcbiAgICAgICAgJ01JIDJDJzogWydYaWFvbWknLCAnTUktVFdPJ10sXG4gICAgICAgICdDb29scGFkIDgwNzAnOiBbJ0Nvb2xwYWQnLCAnODA3MCddLFxuICAgICAgICAnUjgxM1QnOiBbJ09wcG8nLCAnUjgxM1QnXSxcbiAgICAgICAgJ1pURSBVOTMwJzogWydaVEUnLCAnVTkzMCddLFxuICAgICAgICAnTGVub3ZvIEEzNjAnOiBbJ0xlbm92bycsICdMZVBob25lIEEzNjAnXSxcbiAgICAgICAgJ1NDSC1ONzE5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdDb29scGFkIDgwMTAnOiBbJ0Nvb2xwYWQnLCAnODAxMCddLFxuICAgICAgICAnTEVOT1ZPLUxlbm92by1BMjg4dCc6IFsnTGVub3ZvJywgJ0EyODh0J10sXG4gICAgICAgICdVNzAxVCc6IFsnT3BwbycsICdVNzAxVCddLFxuICAgICAgICAnWlRFVTc5NSc6IFsnQ29vbHBhZCcsICdVNzk1J10sXG4gICAgICAgICdIYWllci1IVC1JNjE3JzogWydIYWllcicsICdJNjE3J10sXG4gICAgICAgICdaVEVVODgwcyc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnR1QtUzYzNTInOiBbJ1NhbXN1bmcnLCAnR1QtUzYzNTInXSxcbiAgICAgICAgJ0dULVM3NTY4JzogWydTYW1zdW5nJywgJ0dULVM3NTY4J10sXG4gICAgICAgICdLLVRvdWNoIFQ2MTkrJzogWydLLVRvdWNoJywgJ1Q2MTknXSxcbiAgICAgICAgJ01JIDJBJzogWydYaWFvbWknLCAnTUktVFdPIEEnXSxcbiAgICAgICAgJ0dULU43MTA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdLLVRvdWNoIFQ2MjEnOiBbJ0stVG91Y2gnLCAnVDYyMSddLFxuICAgICAgICAnTEVOT1ZPLUxlbm92by1BMjk4dCc6IFsnTGVub3ZvJywgJ0EyOTgnXSxcbiAgICAgICAgJ0Nvb2xwYWQgODE1MCc6IFsnQ29vbHBhZCcsICc4MTUwJ10sXG4gICAgICAgICc1ODYwUyc6IFsnQ29vbHBhZCcsICc1ODYwJ10sXG4gICAgICAgICdaVEVVODA3JzogWydaVEUnLCAnVTgwNyddLFxuICAgICAgICAnU0NILUk3MzknOiBbJ1NhbXN1bmcnLCAnU0NILUk3MzknXSxcbiAgICAgICAgJ1NDSC1JODI5JzogWydTYW1zdW5nJywgJ1NDSC1JODI5J10sXG4gICAgICAgICdIUy1FODMwJzogWydIaXNlbnNlJywgJ0U4MzAnXSxcbiAgICAgICAgJ0hTLUU5MjAnOiBbJ0hpc2Vuc2UnLCAnRTkyMCddLFxuICAgICAgICAnTGVub3ZvIFM3MjAnOiBbJ0xlbm92bycsICdTNzIwJ10sXG4gICAgICAgICdNSSAyQyc6IFsnWGlhb21pJywgJ01JLVRXTyddLFxuICAgICAgICAnT1BQTyBSODEzVCc6IFsnT3BwbycsICdSODEzJ10sXG4gICAgICAgICdTQ0gtSTg3OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnR1QtUzYxMDJFJzogWydTYW1zdW5nJywgJ0dhbGF4eSBZIER1b3MnXVxuICAgIH1cblxuICAgIHZhciBCTEFDS0JFUlJZX01PREVMUyA9IHtcbiAgICAgICAgJzk2MDAnOiAnQm9sZCcsXG4gICAgICAgICc5NjUwJzogJ0JvbGQnLFxuICAgICAgICAnOTcwMCc6ICdCb2xkJyxcbiAgICAgICAgJzk3ODAnOiAnQm9sZCcsXG4gICAgICAgICc5NzkwJzogJ0JvbGQnLFxuICAgICAgICAnOTkwMCc6ICdCb2xkJyxcbiAgICAgICAgJzk5MzAnOiAnQm9sZCcsXG4gICAgICAgICc4MzAwJzogJ0N1cnZlJyxcbiAgICAgICAgJzgzMTAnOiAnQ3VydmUnLFxuICAgICAgICAnODMyMCc6ICdDdXJ2ZScsXG4gICAgICAgICc4MzMwJzogJ0N1cnZlJyxcbiAgICAgICAgJzgzNTBpJzogJ0N1cnZlJyxcbiAgICAgICAgJzg1MjAnOiAnQ3VydmUnLFxuICAgICAgICAnODUzMCc6ICdDdXJ2ZScsXG4gICAgICAgICc4OTAwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkyMjAnOiAnQ3VydmUnLFxuICAgICAgICAnOTMwMCc6ICdDdXJ2ZScsXG4gICAgICAgICc5MzMwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkzNTAnOiAnQ3VydmUnLFxuICAgICAgICAnOTM2MCc6ICdDdXJ2ZScsXG4gICAgICAgICc5MzcwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkzODAnOiAnQ3VydmUnLFxuICAgICAgICAnODEwMCc6ICdQZWFybCcsXG4gICAgICAgICc4MTEwJzogJ1BlYXJsJyxcbiAgICAgICAgJzgxMjAnOiAnUGVhcmwnLFxuICAgICAgICAnODEzMCc6ICdQZWFybCcsXG4gICAgICAgICc4MjIwJzogJ1BlYXJsJyxcbiAgICAgICAgJzgyMzAnOiAnUGVhcmwnLFxuICAgICAgICAnOTEwMCc6ICdQZWFybCcsXG4gICAgICAgICc5MTA1JzogJ1BlYXJsJyxcbiAgICAgICAgJzk1MzAnOiAnU3Rvcm0nLFxuICAgICAgICAnOTU1MCc6ICdTdG9ybScsXG4gICAgICAgICc5NjcwJzogJ1N0eWxlJyxcbiAgICAgICAgJzk4MDAnOiAnVG9yY2gnLFxuICAgICAgICAnOTgxMCc6ICdUb3JjaCcsXG4gICAgICAgICc5ODUwJzogJ1RvcmNoJyxcbiAgICAgICAgJzk4NjAnOiAnVG9yY2gnLFxuICAgICAgICAnOTYzMCc6ICdUb3VyJyxcbiAgICAgICAgJzk5ODEnOiAnUG9yc2NoZSBQJ1xuICAgIH07XG5cblxuICAgIHZhciBWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICB9O1xuICAgIFZlcnNpb24ucHJvdG90eXBlID0ge1xuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbCA9IHYudmFsdWUgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSB2LmFsaWFzIHx8IG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBEZXRlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9O1xuICAgIERldGVjdGVkLnByb3RvdHlwZSA9IHtcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVhLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdXNlRmVhdHVyZXM6IG9wdGlvbnMgJiYgb3B0aW9ucy51c2VGZWF0dXJlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXRlY3RDYW1vdWZsYWdlOiBvcHRpb25zICYmIG9wdGlvbnMuZGV0ZWN0Q2Ftb3VmbGFnZSB8fCB0cnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYnJvd3NlciA9IHtcbiAgICAgICAgICAgICAgICAnc3RvY2snOiB0cnVlLFxuICAgICAgICAgICAgICAgICdoaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnY2hhbm5lbCc6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMub3MgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlID0ge1xuICAgICAgICAgICAgICAgICd0eXBlJzogJ2Rlc2t0b3AnLFxuICAgICAgICAgICAgICAgICdpZGVudGlmaWVkJzogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3QodWEpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRldGVjdDogZnVuY3Rpb24gKHVhKSB7XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFVuaXhcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1VuaXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdVbml4JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRnJlZUJTRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRnJlZUJTRCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0ZyZWVCU0QnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBPcGVuQlNEXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdPcGVuQlNEJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnT3BlbkJTRCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5ldEJTRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTmV0QlNEJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTmV0QlNEJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU3VuT1NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1N1bk9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU29sYXJpcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIExpbnV4XG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0xpbnV4JztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQ2VudE9TJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0NlbnRPUyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9DZW50T1NcXC9bMC05XFwuXFwtXStlbChbMC05X10rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0ucmVwbGFjZSgvXy9nLCAnLicpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRGViaWFuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0RlYmlhbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdGZWRvcmEnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnRmVkb3JhJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0ZlZG9yYVxcL1swLTlcXC5cXC1dK2ZjKFswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnR2VudG9vJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0dlbnRvbyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdLdWJ1bnR1JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0t1YnVudHUnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTWFuZHJpdmEgTGludXgnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWFuZHJpdmEnO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTWFuZHJpdmEgTGludXhcXC9bMC05XFwuXFwtXSttZHYoWzAtOV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNYWdlaWEnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWFnZWlhJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01hZ2VpYVxcL1swLTlcXC5cXC1dK21nYShbMC05XSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1JlZCBIYXQnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnUmVkIEhhdCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9SZWQgSGF0W15cXC9dKlxcL1swLTlcXC5cXC1dK2VsKFswLTlfXSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTbGFja3dhcmUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2xhY2t3YXJlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NVU0UnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU1VTRSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUdXJib2xpbnV4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1R1cmJvbGludXgnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnVWJ1bnR1JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1VidW50dSc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9VYnVudHVcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgaU9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdpUGhvbmUoIFNpbXVsYXRvcik/OycpIHx8IHVhLm1hdGNoKCdpUGFkOycpIHx8IHVhLm1hdGNoKCdpUG9kOycpIHx8IHVhLm1hdGNoKC9pUGhvbmVcXHMqXFxkKnM/W2NwXT87L2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ2lPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9PUyAoLiopIGxpa2UgTWFjIE9TIFgvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdpUGhvbmUgU2ltdWxhdG9yOycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodWEubWF0Y2goJ2lQb2Q7JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtZWRpYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBcHBsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ2lQb2QgVG91Y2gnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodWEubWF0Y2goJ2lQaG9uZTsnKSB8fCB1YS5tYXRjaCgvaVBob25lXFxzKlxcZCpzP1tjcF0/Oy9pKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBcHBsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ2lQaG9uZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQXBwbGUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTWFjT1MgWFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHVhLm1hdGNoKCdNYWMgT1MgWCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01hYyBPUyBYJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWCAoMTBbMC05XFwuX10qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLnJlcGxhY2UoL18vZywgJy4nKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdpbmRvd3NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dpbmRvd3MnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9XaW5kb3dzIE5UIChbMC05XVxcLlswLTldKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gcGFyc2VWZXJzaW9uKG1hdGNoWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJ1Zpc3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNS4yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6ICdTZXJ2ZXIgMjAwMydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUuMSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnWFAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1LjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzIwMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJ05UICcgKyB0aGlzLm9zLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyA5NScpIHx8IHVhLm1hdGNoKCdXaW45NScpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC4wMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnOTUnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyA5OCcpIHx8IHVhLm1hdGNoKCdXaW45OCcpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC4xMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnOTgnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBNRScpIHx8IHVhLm1hdGNoKCdXaW5NRScpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC45MCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC45JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnTUUnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBYUCcpIHx8IHVhLm1hdGNoKCdXaW5YUCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNS4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnWFAnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV1A3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgUGhvbmUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzcuMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5tb2RlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBDRScpIHx8IHVhLm1hdGNoKCdXaW5DRScpIHx8IHVhLm1hdGNoKCdXaW5kb3dzQ0UnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBNb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi41JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgQ0UnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93c0NFT1NcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1dpbmRvd3MgQ0UgKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdXaW5kb3dzIE1vYmlsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93c01vYmlsZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBQaG9uZSBbMC05XScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1YS5tYXRjaCgvV2luZG93cyBQaG9uZSAoWzAtOS5dKikvKVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dpbmRvd3MgUGhvbmUgT1MnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBQaG9uZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1YS5tYXRjaCgvV2luZG93cyBQaG9uZSBPUyAoWzAtOS5dKikvKVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbiA8IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSUVNb2JpbGVcXC9bXjtdKzsgKFteO10rKTsgKFteO10rKVs7fFxcKV0vLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hbnVmYWN0dXJlciA9IHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFdJTkRPV1NfUEhPTkVfTU9ERUxTW21hbnVmYWN0dXJlcl0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBXSU5ET1dTX1BIT05FX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFdJTkRPV1NfUEhPTkVfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBXSU5ET1dTX1BIT05FX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hbnVmYWN0dXJlciA9PT0gJ01pY3Jvc29mdCcgJiYgbW9kZWwgPT09ICdYRGV2aWNlRW11bGF0b3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlbXVsYXRvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQW5kcm9pZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0FuZHJvaWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdBbmRyb2lkJztcbiAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0FuZHJvaWQoPzogKT8oPzpBbGxQaG9uZV98Q3lhbm9nZW5Nb2RfKT8oPzpcXC8pP3Y/KFswLTkuXSspLy5leGVjKHVhLnJlcGxhY2UoJy11cGRhdGUnLCAnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdBbmRyb2lkIEVjbGFpcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMi4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24gPj0gMykgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24gPj0gNCAmJiB1YS5tYXRjaCgnTW9iaWxlJykpIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9FY2xhaXI7ICg/OlthLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/KSBCdWlsZFxcLyhbXlxcL10qKVxcLy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gLzsgKFteO10qW147XFxzXSlcXHMrQnVpbGQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC9bYS16QS1aXVthLXpBLVpdKD86Wy1fXVthLXpBLVpdW2EtekEtWl0pPzsgKFteO10qW147XFxzXSk7XFxzK0J1aWxkLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTtVO0FuZHJvaWRcXC9bXjtdKztbMC05XStcXCpbMC05XSs7Q1RDXFwvMi4wXFwpLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvO1xccz8oW147XSspO1xccz9bMC05XStcXCpbMC05XSs7XFxzP0NUQ1xcLzIuMC8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL3poLWNuO1xccyooLio/KShcXC98YnVpbGQpL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL0FuZHJvaWQgW147XSs7ICg/OlthLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/OyApPyhbXildKylcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdWEubWF0Y2goL1thLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/LykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL14oLis/KVxcL1xcUysvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLyogU29tZXRpbWVzIHdlIGdldCBhIG1vZGVsIG5hbWUgdGhhdCBzdGFydHMgd2l0aCBBbmRyb2lkLCBpbiB0aGF0IGNhc2UgaXQgaXMgYSBtaXNtYXRjaCBhbmQgd2Ugc2hvdWxkIGlnbm9yZSBpdCAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS5tb2RlbCAmJiB0aGlzLmRldmljZS5tb2RlbC5zdWJzdHJpbmcoMCwgNykgPT09ICdBbmRyb2lkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdICE9PSAndW5kZWZpbmVkJykgdGhpcy5kZXZpY2UudHlwZSA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsID09PSAnRW11bGF0b3InIHx8IG1vZGVsID09PSAneDg2IEVtdWxhdG9yJyB8fCBtb2RlbCA9PT0gJ3g4NiBWaXJ0dWFsQm94JyB8fCBtb2RlbCA9PT0gJ3ZtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0hQIGVTdGF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0hQJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnZVN0YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ByZVxcLzEuMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdQYWxtJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4xJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1BhbG0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQcmUgUGx1cyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ByZVxcLzEuMicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdQYWxtJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlIDInO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQcmVcXC8zLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnSFAnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQcmUgMyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1BpeGlcXC8xLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGFsbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1BpeGknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQaXhpXFwvMS4xJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1BhbG0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQaXhpIFBsdXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQMTYwVU4/QT9cXC8xLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnSFAnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdWZWVyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBHb29nbGUgVFZcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0dvb2dsZVRWJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnR29vZ2xlIFRWJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQ2hyb21lLzUuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0Nocm9tZS8xMS4nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzInXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdvUGhvbmVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dvUGhvbmUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXb1Bob25lJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Xb1Bob25lXFwvKFswLTlcXC5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJsYWNrQmVycnlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0JsYWNrQmVycnknKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdCbGFja0JlcnJ5IE9TJztcblxuICAgICAgICAgICAgICAgIGlmICghdWEubWF0Y2goJ09wZXJhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0JsYWNrQmVycnkoWzAtOV0qKVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLzsgQmxhY2tCZXJyeSAoWzAtOV0qKTsvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbiA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRldmljZS5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQkxBQ0tCRVJSWV9NT0RFTFNbdGhpcy5kZXZpY2UubW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0JsYWNrQmVycnkgJyArIEJMQUNLQkVSUllfTU9ERUxTW3RoaXMuZGV2aWNlLm1vZGVsXSArICcgJyArIHRoaXMuZGV2aWNlLm1vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5ICcgKyB0aGlzLmRldmljZS5tb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQmxhY2tCZXJyeSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1JJTSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBCbGFja0JlcnJ5IFBsYXlCb29rXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdSSU0gVGFibGV0IE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQmxhY2tCZXJyeSBUYWJsZXQgT1MnO1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVhLm1hdGNoKC9SSU0gVGFibGV0IE9TIChbMC05Ll0qKS8pWzFdLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUklNJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5IFBsYXlCb29rJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVhLm1hdGNoKCdQbGF5Qm9vaycpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oMTBbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdSSU0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5IFBsYXlCb29rJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgV2ViT1NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJyg/OndlYnxocHcpT1MnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICd3ZWJPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdWEubWF0Y2goLyg/OndlYnxocHcpT1NcXC8oWzAtOS5dKikvKVsxXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCd0YWJsZXQnKSkgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gdWEubWF0Y2goJ2hwd09TJykgPyAnSFAnIDogJ1BhbG0nO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZSc7XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQcmVcXC8xLjEnKSkgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlIFBsdXMnO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4yJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZTInO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMy4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZTMnO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUGl4aVxcLzEuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdQaXhpJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1BpeGlcXC8xLjEnKSkgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGl4aSBQbHVzJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1AxNjBVTj9BP1xcLzEuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdWZWVyJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1RvdWNoUGFkXFwvMS4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1RvdWNoUGFkJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRW11bGF0b3JcXC8nKSB8fCB1YS5tYXRjaCgnRGVza3RvcFxcLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFM2MFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU3ltYmlhbicpIHx8IHVhLm1hdGNoKCdTZXJpZXNbIF0/NjAnKSB8fCB1YS5tYXRjaCgnUzYwJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2VyaWVzNjAnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTeW1iaWFuT1MvOS4xJykgJiYgIXVhLm1hdGNoKCdTZXJpZXM2MCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMy4wJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvU2VyaWVzNjBcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWEoW15cXC87XSspW1xcL3w7XS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdICE9PSAnQnJvd3NlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdOb2tpYSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVmVydHUoW15cXC87XSspW1xcL3w7XS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1ZlcnR1JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1N5bWJpYW47IFU7IChbXjtdKyk7IFthLXpdW2Etel1cXC1bYS16XVthLXpdL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1NhbXN1bmdcXC8oW147XSopOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19TQU1TVU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFM0MFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2VyaWVzNDAnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdTZXJpZXM0MCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWEoW15cXC9dKylcXC8vLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdOb2tpYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTWVlR29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01lZUdvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWVlR28nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Ob2tpYShbXlxcKV0rKVxcKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNYWVtb1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTWFlbW8nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdNYWVtbyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhOWzAtOV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBUaXplblxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnVGl6ZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdUaXplbic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVGl6ZW5bXFwvIF0oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgKFteXFwvXSspXFwvLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0gIT09ICdMaW51eCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBUSVpFTl9NT0RFTFNbdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFRJWkVOX01PREVMU1t0aGlzLmRldmljZS5tYW51ZmFjdHVyZXJdW3RoaXMuZGV2aWNlLm1vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFudWZhY3R1cmVyID0gdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBUSVpFTl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBUSVpFTl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJhZGFcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1tifEJdYWRhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQmFkYSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvW2J8Ql1hZGFcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgKFteXFwvXSspXFwvLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMl0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQkFEQV9NT0RFTFNbdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEJBREFfTU9ERUxTW3RoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcl1bdGhpcy5kZXZpY2UubW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFudWZhY3R1cmVyID0gdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBjbGVhbnVwTW9kZWwodGhpcy5kZXZpY2UubW9kZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IEJBREFfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEJBREFfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJyZXdcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL0JSRVcvaSkgfHwgdWEubWF0Y2goJ0JNUDsgVScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JyZXcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9CUkVXOyBVOyAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC87QlJFV1xcLyhbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXCgoW147XSspO1U7UkVYXFwvW147XSs7QlJFV1xcL1teO10rOyg/Oi4qOyk/WzAtOV0rXFwqWzAtOV0rO0NUQ1xcLzIuMFxcKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJSRVdfTU9ERUxTW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IEJSRVdfTU9ERUxTW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQlJFV19NT0RFTFNbbW9kZWxdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE1US1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvXFwoTVRLOy8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01USyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDck9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdDck9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQ2hyb21lIE9TJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBKb2xpIE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdKb2xpIE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnSm9saSBPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdkZXNrdG9wJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Kb2xpIE9TXFwvKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSGFpa3VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0hhaWt1JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnSGFpa3UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFFOWFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUU5YJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnUU5YJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE9TLzIgV2FycFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT1NcXC8yOyBXYXJwJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnT1MvMiBXYXJwJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09TXFwvMjsgV2FycCAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBHcmlkIE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdHcmlkIE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnR3JpZCBPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0dyaWQgT1MgKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQW1pZ2FPU1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvQW1pZ2FPUy9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdBbWlnYU9TJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0FtaWdhT1MgKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNb3JwaE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9Nb3JwaE9TL2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01vcnBoT1MnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTW9ycGhPUyAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEtpbmRsZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnS2luZGxlJykgJiYgIXVhLm1hdGNoKCdGaXJlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBbWF6b24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0tpbmRsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlcmVhZGVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnS2luZGxlXFwvMi4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0tpbmRsZSAyJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0tpbmRsZVxcLzMuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdLaW5kbGUgMyBvciBsYXRlcic7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTk9PS1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnbm9vayBicm93c2VyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQW5kcm9pZCc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQmFybmVzICYgTm9ibGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ05PT0snO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZXJlYWRlcic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJvb2tlZW5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ2Jvb2tlZW5cXC9jeWJvb2snKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0Jvb2tlZW4nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0N5Ym9vayc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlcmVhZGVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT3Jpem9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQ3lib29rIE9yaXpvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNvbnkgUmVhZGVyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdFQlJEMTEwMScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUmVhZGVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2VyZWFkZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBpUml2ZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0lyaXZlciA7JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdpUml2ZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1N0b3J5JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2VyZWFkZXInO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdFQjA3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnU3RvcnkgSEQgRUIwNyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5pbnRlbmRvXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjMwIChOaW50ZW5kbyBXaWk7IFU7IDsgMzY0MjsgZW4pXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuMzAgKE5pbnRlbmRvIFdpaTsgVTsgOyAyMDQ3LTc7IGVuKVxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjUwIChOaW50ZW5kbyBEU2k7IE9wZXJhLzUwNzsgVTsgZW4tVVMpXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChOaW50ZW5kbyAzRFM7IFU7IDsgZW4pIFZlcnNpb24vMS43NDU1LlVTXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChOaW50ZW5kbyAzRFM7IFU7IDsgZW4pIFZlcnNpb24vMS43NDU1LkVVXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyBXaWknKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdXaWknO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyBEU2knKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdEU2knO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyAzRFMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICczRFMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9WZXJzaW9uXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQbGF5U3RhdGlvbiBQb3J0YWJsZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGxheXN0YXRpb24gUG9ydGFibGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQbGF5U3RhdGlvbiBWaXRhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9QbGF5U3RhdGlvbiBWaXRhIChbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQbGF5U3RhdGlvbiBWaXRhJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2dhbWluZyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvUGxheVN0YXRpb24gMy9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1BMQVlTVEFUSU9OIDM7PyAoWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGxheXN0YXRpb24gMyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdnYW1pbmcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBQYW5hc29uaWMgU21hcnQgVmllcmFcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChGcmVlQlNEOyBVOyBWaWVyYTsgamEtSlApIEFwcGxlV2ViS2l0LzUzNS4xIChLSFRNTCwgbGlrZSBHZWNrbykgVmllcmEvMS4yLjQgQ2hyb21lLzE0LjAuODM1LjIwMiBTYWZhcmkvNTM1LjFcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ZpZXJhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGFuYXNvbmljJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBWaWVyYSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTaGFycCBBUVVPUyBUVlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERUVikgQXBwbGVXZWJLaXQvNTMxLjIgIChLSFRNTCwgbGlrZSBHZWNrbykgQVFVT1NCcm93c2VyLzEuMCAoVVMwMERUVjtWOzAwMDE7MDAwMSlcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERUVikgQXBwbGVXZWJLaXQvNTMxLjIrIChLSFRNTCwgbGlrZSBHZWNrbykgRXNwaWFsLzYuMC40IEFRVU9TQnJvd3Nlci8xLjAgKENIMDBEVFY7VjswMDAxOzAwMDEpXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bDsgVTsgZW4pIFByZXN0by8yLjguMTE1IFZlcnNpb24vMTEuMTAgQVFVT1MtQVMvMS4wIExDLTQwTEU4MzVYXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdBUVVPU0Jyb3dzZXInKSB8fCB1YS5tYXRjaCgnQVFVT1MtQVMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0hBUlA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQXF1b3MgVFYnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU2Ftc3VuZyBTbWFydCBUVlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKFNtYXJ0SHViOyBTTUFSVC1UVjsgVTsgTGludXgvU21hcnRUVjsgTWFwbGUyMDEyKSBBcHBsZVdlYktpdC81MzQuNyAoS0hUTUwsIGxpa2UgR2Vja28pIFNtYXJ0VFYgU2FmYXJpLzUzNC43XG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChTbWFydEh1YjsgU01BUlQtVFY7IFU7IExpbnV4L1NtYXJ0VFYpIEFwcGxlV2ViS2l0LzUzMS4yKyAoS0hUTUwsIGxpa2UgR2Vja28pIFdlYkJyb3dzZXIvMS4wIFNtYXJ0VFYgU2FmYXJpLzUzMS4yK1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU01BUlQtVFYnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0FNU1VORztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBUVic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYXBsZShbMC05XSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCArPSAnICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNvbnkgSW50ZXJuZXQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY3bDsgVTsgSW5ldHR2QnJvd3Nlci8yLjIoMDAwMTRBO1NvbnlEVFYxMTU7MDAwMjswMTAwKSBLREwtNDZFWDY0MDsgQ0MvVVNBOyBlbikgUHJlc3RvLzIuOC4xMTUgVmVyc2lvbi8xMS4xMFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBhcm12N2w7IFU7IEluZXR0dkJyb3dzZXIvMi4yKDAwMDE0QTtTb255RFRWMTE1OzAwMDI7MDEwMCkgS0RMLTQwRVg2NDA7IENDL1VTQTsgZW4pIFByZXN0by8yLjEwLjI1MCBWZXJzaW9uLzExLjYwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY3bDsgVTsgSW5ldHR2QnJvd3Nlci8yLjIoMDAwMTRBO1NvbnlEVFYxMTU7MDAwMjswMTAwKSBOL0E7IENDL1VTQTsgZW4pIFByZXN0by8yLjguMTE1IFZlcnNpb24vMTEuMTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggbWlwczsgVTsgSW5ldHR2QnJvd3Nlci8yLjIgKDAwMDE0QTtTb255RFRWMTE1OzAwMDI7MDEwMCkgOyBDQy9KUE47IGVuKSBQcmVzdG8vMi45LjE2NyBWZXJzaW9uLzExLjUwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IG1pcHM7IFU7IEluZXR0dkJyb3dzZXIvMi4yICgwMDAxNEE7U29ueURUVjExNTswMDAyOzAxMDApIEFaMkNWVDI7IENDL0NBTjsgZW4pIFByZXN0by8yLjcuNjEgVmVyc2lvbi8xMS4wMFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBhcm12Nmw7IE9wZXJhIFRWIFN0b3JlLzQyMDc7IFU7IChTb255QkRQL0JEVjExKTsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggYXJtdjZsIDsgVTsgKFNvbnlCRFAvQkRWMTEpOyBlbikgUHJlc3RvLzIuNi4zMyBWZXJzaW9uLzEwLjYwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bDsgVTsgKFNvbnlCRFAvQkRWMTEpOyBlbikgUHJlc3RvLzIuOC4xMTUgVmVyc2lvbi8xMS4xMFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU29ueURUVnxTb255QkRQfFNvbnlDRUJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdJbnRlcm5ldCBUVic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgUGhpbGlwcyBOZXQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuNzAgKExpbnV4IGFybXY2bCA7IFU7IENFLUhUTUwvMS4wIE5FVFRWLzIuMC4yOyBlbikgUHJlc3RvLzIuMi4xXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bCA7IFU7IENFLUhUTUwvMS4wIE5FVFRWLzMuMC4xOzsgZW4pIFByZXN0by8yLjYuMzMgVmVyc2lvbi8xMC42MFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBtaXBzOyBVOyBDRS1IVE1MLzEuMCBORVRUVi8zLjAuMTsgUEhJTElQUy1BVk0tMjAxMjsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggbWlwcyA7IFU7IEhiYlRWLzEuMS4xICg7IFBoaWxpcHM7IDsgOyA7ICkgQ0UtSFRNTC8xLjAgTkVUVFYvMy4xLjA7IGVuKSBQcmVzdG8vMi42LjMzIFZlcnNpb24vMTAuNzBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggaTY4NjsgVTsgSGJiVFYvMS4xLjEgKDsgUGhpbGlwczsgOyA7IDsgKSBDRS1IVE1MLzEuMCBORVRUVi8zLjEuMDsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05FVFRWXFwvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGhpbGlwcyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnTmV0IFRWJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBMRyBOZXRDYXN0IFRWXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRGlyZWN0RkI7IExpbnV4IGFybXY3bCkgQXBwbGVXZWJLaXQvNTM0LjI2KyAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS81MzQuMjYrIExHIEJyb3dzZXIvNS4wMC4wMCgrbW91c2UrM0QrU0NSRUVOK1RVTkVSOyBMR0U7IEdMT0JBTC1QTEFUNDsgMDMuMDkuMjI7IDB4MDAwMDAwMDE7KTsgTEcgTmV0Q2FzdC5UVi0yMDEyXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChEaXJlY3RGQjsgTGludXggYXJtdjdsKSBBcHBsZVdlYktpdC81MzQuMjYrIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLzUzNC4yNisgTEcgQnJvd3Nlci81LjAwLjAwKCtTQ1JFRU4rVFVORVI7IExHRTsgR0xPQkFMLVBMQVQ0OyAwMS4wMC4wMDsgMHgwMDAwMDAwMTspOyBMRyBOZXRDYXN0LlRWLTIwMTJcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERpcmVjdEZCOyBVOyBMaW51eCBhcm12Nmw7IGVuKSBBcHBsZVdlYktpdC81MzEuMiAgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkvNTMxLjIgIExHIEJyb3dzZXIvNC4xLjQoIEJEUDsgTEdFOyBNZWRpYS9CRDY2MDsgNjk3MDsgYWJjOyk7IExHIE5ldENhc3QuTWVkaWEtMjAxMVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRGlyZWN0RkI7IFU7IExpbnV4IDc2MzE7IGVuKSBBcHBsZVdlYktpdC81MzEuMiAgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkvNTMxLjIgIExHIEJyb3dzZXIvNC4xLjQoIE5PX05VTTsgTEdFOyBNZWRpYS9TUDUyMDsgU1QuMy45Ny40MDkuRjsgMHgwMDAwMDAwMTspOyBMRyBOZXRDYXN0Lk1lZGlhLTIwMTFcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERpcmVjdEZCOyBVOyBMaW51eCA3NjMwOyBlbikgQXBwbGVXZWJLaXQvNTMxLjIgIChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJpLzUzMS4yICBMRyBCcm93c2VyLzQuMS40KCAzRCBCRFAgTk9fTlVNOyBMR0U7IE1lZGlhL1NUNjAwOyBMRyBOZXRDYXN0Lk1lZGlhLTIwMTFcbiAgICAgICAgICAgICAqICAgICAgKExHU21hcnRUVi8xLjApIEFwcGxlV2ViS2l0LzUzNC4yMyBPQklHTy1UMTAvMi4wXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0xHIE5ldENhc3RcXC4oPzpUVnxNZWRpYSktKFswLTldKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19MRztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdOZXRDYXN0IFRWICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvTEdTbWFydFRWLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfTEc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnU21hcnQgVFYnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRvc2hpYmEgU21hcnQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChMaW51eCBtaXBzZWw7IFU7IEhiYlRWLzEuMS4xICg7IFRPU0hJQkE7IERUVl9STDk1MzsgNTYuNy42Ni43OyB0MTI7ICkgOyBUb3NoaWJhVFAvMS4zLjAgKCtWSURFT19NUDQrVklERU9fWF9NU19BU0YrQVVESU9fTVBFRytBVURJT19NUDQrRFJNK05BVElWRUxBVU5DSCkgOyBlbikgQXBwbGVXZWJLaXQvNTM0LjEgKEtIVE1MLCBsaWtlIEdlY2tvKVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRFRWOyBUU0JOZXRUVi9UMzIwMTM3MTMuMDIwMy43REQ7IFRWd2l0aFZpZGVvUGxheWVyOyBsaWtlIEdlY2tvKSBOZXRGcm9udC80LjEgRFRWTmV0QnJvd3Nlci8yLjIgKDAwMDAzOTtUMzIwMTM3MTM7MDIwMzs3REQpIEluZXR0dkJyb3dzZXIvMi4yICgwMDAwMzk7VDMyMDEzNzEzOzAyMDM7N0REKVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoTGludXggbWlwc2VsOyBVOyBIYmJUVi8xLjEuMSAoOyBUT1NISUJBOyA0MFBYMjAwOyAwLjcuMy4wLjsgdDEyOyApIDsgVG9zaGliYV9UUC8xLjMuMCAoK1ZJREVPX01QNCtBVURJT19NUEVHK0FVRElPX01QNCtWSURFT19YX01TX0FTRitPRkZMSU5FQVBQKSA7IGVuKSBBcHBsZVdlYktpdC81MzQuMSAoS0hUTUwsIGxpa2UgR2VjXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUb3NoaWJhXz9UUFxcLycpIHx8IHVhLm1hdGNoKCdUU0JOZXRUVlxcLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Rvc2hpYmEnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1NtYXJ0IFRWJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNYWNoQmx1ZSBYVFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9tYnh0V2ViS2l0XFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ01hY2hCbHVlIFhUJ1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBBREJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoQURCOyAoW15cXCldKylcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0FEQic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAobWF0Y2hbMV0gIT09ICdVbmtub3duJyA/IG1hdGNoWzFdLnJlcGxhY2UoJ0FEQicsICcnKSArICcgJyA6ICcnKSArICdJUFRWIHJlY2VpdmVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNU3RhclxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvTXN0YXI7T1dCLykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTVN0YXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1BWUic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09yaWd5biBXZWIgQnJvd3Nlcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRlY2huaVNhdFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXFRlY2huaVNhdCAoW147XSspOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVGVjaG5pU2F0JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRlY2huaWNvbG9yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1xcVGVjaG5pY29sb3JfKFteO10rKTsvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1RlY2huaWNvbG9yJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdpbmJveCBFdm8yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1dpbmJveCBFdm8yLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdXaW5ib3gnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0V2bzInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFJva3VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXlJva3VcXC9EVlAtKFswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Jva3UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIwMDAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnSEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIwNTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnWEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIxMDAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnWERTJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcyNDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0xUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICczMDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJzIgSEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzMwNTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnMiBYRCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMzEwMCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICcyIFhTJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvSGJiVFZcXC8xLjEuMSBcXChbXjtdKjtcXHMqKFteO10qKVxccyo7XFxzKihbXjtdKilcXHMqOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmVuZG9yTmFtZSA9IG1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB2YXIgbW9kZWxOYW1lID0gbWF0Y2hbMl0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdmVuZG9yTmFtZSAhPT0gJycgJiYgdmVuZG9yTmFtZSAhPT0gJ3ZlbmRvck5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmVuZG9yTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTEdFJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTEcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVE9TSElCQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Rvc2hpYmEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc21hcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTbWFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0djJuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVFYyTic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHZlbmRvck5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV2aWNlLm1vZGVsICYmIG1vZGVsTmFtZSAhPT0gJycgJiYgbW9kZWxOYW1lICE9PSAnbW9kZWxOYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHTE9CQUxfUExBVDMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdOZXRDYXN0IFRWJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU21hcnRUVjIwMTInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBUViAyMDEyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndmlkZW93ZWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdWaWRlb3dlYic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbW9kZWxOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVuZG9yTmFtZSA9PT0gJ0h1bWF4Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gdGhpcy5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIERldGVjdCB0eXBlIGJhc2VkIG9uIGNvbW1vbiBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSW5ldHR2QnJvd3NlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNSURQJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRyeSB0byBkZXRlY3QgYW55IGRldmljZXMgYmFzZWQgb24gY29tbW9uXG4gICAgICAgICAgICAgKiAgICAgIGxvY2F0aW9ucyBvZiBtb2RlbCBpZHNcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGV2aWNlLm1vZGVsICYmICF0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF1YS5tYXRjaCgvXihNb3ppbGxhfE9wZXJhKS8pKSBpZiAobWF0Y2ggPSAvXig/Ok1RUUJyb3dzZXJcXC9bMC05XFwuXStcXC8pPyhbXlxcc10rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC9fVEQkLywgJycpO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoL19DTUNDJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC9bXyBdTW96aWxsYSQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSgvIExpbnV4JC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC8gT3BlcmEkLywgJycpO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoL1xcL1swLTldLiokLywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1swLTldK3hbMC05XSs7IChbXjtdKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1swLTldK1hbMC05XSsgKFteO1xcL1xcKFxcKV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93cyBOVCA1LjE7IChbXjtdKyk7IFdpbmRvd3MgUGhvbmUvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1xcKSBQUEM7ICg/OlswLTldK3hbMC05XSs7ICk/KFteO1xcL1xcKFxcKV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgVTsgV2luZG93cyBNb2JpbGUvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZvZGFmb25lXFwvMS4wXFwvKFteXFwvXSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2gobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXCAoW15cXHNdKykkLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2gobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXZpY2UubW9kZWwgJiYgIXRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKGNhbmRpZGF0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF1bMl0gIT09ICd1bmRlZmluZWQnKSB0aGlzLmRldmljZS50eXBlID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9zLm5hbWUgfHwgdGhpcy5vcy5uYW1lID09PSAnV2luZG93cycgfHwgdGhpcy5vcy5uYW1lID09PSAnV2luZG93cyBNb2JpbGUnIHx8IHRoaXMub3MubmFtZSA9PT0gJ1dpbmRvd3MgQ0UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBXSU5ET1dTX01PQklMRV9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBXSU5ET1dTX01PQklMRV9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IFdJTkRPV1NfTU9CSUxFX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSAhPT0gJ1dpbmRvd3MgTW9iaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkdJT05FRS0oW15cXHNdKykvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnR2lvbmVlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkhUQ18/KFteXFwvX10rKSg/OlxcL3xffCQpLy5leGVjKGNhbmRpZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19IVEM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15IVUFXRUktKFteXFwvXSopLy5leGVjKGNhbmRpZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19IVUFXRUk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyg/Ol58XFwoKUxHRT8oPzpcXC98LXxffFxccykoW15cXHNdKikvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX0xHO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9eTU9ULShbXlxcL19dKykoPzpcXC98X3wkKS8uZXhlYyhjYW5kaWRhdGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfTU9UT1JPTEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Nb3Rvcm9sYV8oW15cXC9fXSspKD86XFwvfF98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX01PVE9ST0xBO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9eTm9raWEoW15cXC9dKykoPzpcXC98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTm9raWEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3MubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2VyaWVzNDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Tb255RXJpY3Nzb24oW15cXC9fXSspKD86XFwvfF98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX1NPTllfRVJJQ1NTT047XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15TQU1TVU5HLShbXlxcL19dKykoPzpcXC98X3wkKS8uZXhlYyhjYW5kaWRhdGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0FNU1VORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ0JhZGEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW51ZmFjdHVyZXIgPSAnU0FNU1VORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvSmFzbWluZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbnVmYWN0dXJlciA9ICdTQU1TVU5HJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFRPVUNIV0laX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1RvdWNod2l6JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzIuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC9Eb2xmaW5cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW51ZmFjdHVyZXIgPSAnU0FNU1VORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JhZGEnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyLjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIuMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMS4yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMy4wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyLjAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IFRPVUNIV0laX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnVG91Y2h3aXonO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxLjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEuNSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMi4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMi4wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICczLjAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKD86TEdbLXxcXC9dKSguKikgKD86QnJvd3NlclxcLyk/QXBwbGVXZWJraXQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19MRztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Nb3ppbGxhXFwvNS4wIFxcKCg/Ok5va2lhfE5PS0lBKSg/Olxccz8pKFteXFwpXSspXFwpVUMgQXBwbGVXZWJraXRcXChsaWtlIEdlY2tvXFwpIFNhZmFyaVxcLzUzMCQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdTZXJpZXM2MCc7XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTYWZhcmlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NhZmFyaScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ2lPUycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ01hYyBPUyBYJyB8fCB0aGlzLm9zLm5hbWUgPT09ICdXaW5kb3dzJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdTYWZhcmknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSB0aGlzLm9zLm5hbWUgPT09ICdNYWMgT1MgWCc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oWzAtOVxcLl0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goL0FwcGxlV2ViS2l0XFwvWzAtOVxcLl0rXFwrLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1dlYktpdCBOaWdodGx5IEJ1aWxkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01TSUUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0ludGVybmV0IEV4cGxvcmVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSUVNb2JpbGUnKSB8fCB1YS5tYXRjaCgnV2luZG93cyBDRScpIHx8IHVhLm1hdGNoKCdXaW5kb3dzIFBob25lJykgfHwgdWEubWF0Y2goJ1dQNycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ01vYmlsZSBJbnRlcm5ldCBFeHBsb3Jlcic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01TSUUgKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9PcGVyYS9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9PcGVyYVtcXC98IF0oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9WZXJzaW9uXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtYXRjaFsxXSkgPj0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24gJiYgdWEubWF0Y2goJ0VkaXRpb24gTGFicycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPSAnYWxwaGEnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdMYWJzJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24gJiYgdWEubWF0Y2goJ0VkaXRpb24gTmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPSAnYWxwaGEnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdOZXh0JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ09wZXJhIFRhYmxldCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ09wZXJhIE1vYmknKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNb2JpbGUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09wZXJhIE1pbmk7Ly5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNaW5pJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdwcm94eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvT3BlcmEgTWluaVxcLyg/OmF0dFxcLyk/KFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNaW5pJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAtMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAncHJveHknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnT3BlcmEnICYmIHRoaXMuZGV2aWNlLnR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhIE1vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9CRVIvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTWluaSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0luZXR0dkJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT3BlcmEgVFYnKSB8fCB1YS5tYXRjaCgnT3BlcmEtVFYnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCB6Ym92JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCB6dmF2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTWluaSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBGaXJlZm94XG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdGaXJlZm94JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9GaXJlZm94XFwvKFswLTlhYi5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi50eXBlID09PSAnYWxwaGEnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ0F1cm9yYSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPT09ICdiZXRhJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdCZXRhJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0Zlbm5lYycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ01vYmlsZTsgcnYnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUYWJsZXQ7IHJ2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlID09PSAnbW9iaWxlJyB8fCB0aGlzLmRldmljZS50eXBlID09PSAndGFibGV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94IE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05hbW9yb2thJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9OYW1vcm9rYVxcLyhbMC05YWIuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdOYW1vcm9rYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2hpcmV0b2tvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9TaGlyZXRva29cXC8oWzAtOWFiLl0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnU2hpcmV0b2tvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNaW5lZmllbGQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0ZpcmVmb3gnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01pbmVmaWVsZFxcLyhbMC05YWIuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdNaW5lZmllbGQnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0ZpcmViaXJkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlYmlyZCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRmlyZWJpcmRcXC8oWzAtOWFiLl0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTZWFNb25rZXlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NlYU1vbmtleScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnU2VhTW9ua2V5JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9TZWFNb25rZXlcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmV0c2NhcGVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05ldHNjYXBlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOZXRzY2FwZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTmV0c2NhcGVbMC05XT9cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgS29ucXVlcm9yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdba3xLXW9ucXVlcm9yLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnS29ucXVlcm9yJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9ba3xLXW9ucXVlcm9yXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENocm9tZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC8oPzpDaHJvbWV8Q3JNb3xDcmlPUylcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnQ2hyb21lJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtYXRjaFsxXS5zcGxpdCgnLicsIDMpLmpvaW4oJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTYuMC45MTInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ0JldGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTguMC4xMDI1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbi5kZXRhaWxzID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnTmlnaHRseSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnNwbGl0KCcuJywgMykuam9pbignLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwLjIuMTQ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAuMy4xNTQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMC40LjE1NCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxLjAuMTU0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIuMC4xNzInOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMy4wLjE5NSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0LjAuMjQ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzQuMS4yNDknOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNS4wLjM3NSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjAuNDcyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcuMC41MTcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOC4wLjU1Mic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5LjAuNTk3JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwLjAuNjQ4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzExLjAuNjk2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEyLjAuNzQyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEzLjAuNzgyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE0LjAuODM1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE1LjAuODc0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE2LjAuOTEyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE3LjAuOTYzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE4LjAuMTAyNSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxOS4wLjEwODQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMjAuMC4xMTMyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIxLjAuMTE4MCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci52ZXJzaW9uLm1pbm9yID09PSAwKSB0aGlzLmJyb3dzZXIudmVyc2lvbi5kZXRhaWxzID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuYnJvd3Nlci52ZXJzaW9uLmRldGFpbHMgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ05pZ2h0bHknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDaHJvbWUgRnJhbWVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ2Nocm9tZWZyYW1lJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdDaHJvbWUgRnJhbWUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL2Nocm9tZWZyYW1lXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENocm9taXVtXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdDaHJvbWl1bScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdDaHJvbWl1bSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvQ2hyb21pdW1cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQnJvd3Nlck5HXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdCcm93c2VyTkcnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ05va2lhIEJyb3dzZXInO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0Jyb3dzZXJOR1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5va2lhIEJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05va2lhQnJvd3NlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTm9raWEgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWFCcm93c2VyXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNaWNyb0JcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01hZW1vWyB8X11Ccm93c2VyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdNaWNyb0InO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01hZW1vWyB8X11Ccm93c2VyWyB8X10oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmV0RnJvbnRcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05ldEZyb250JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOZXRGcm9udCc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL05ldEZyb250XFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0luZXR0dkJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU2lsa1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2lsaycpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTaWxrLUFjY2VsZXJhdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnU2lsayc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1NpbGtcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQW1hem9uJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnS2luZGxlIEZpcmUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgIT09ICdBbmRyb2lkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRG9sZmluXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdEb2xmaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0RvbGZpbic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRG9sZmluXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSXJpc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSXJpcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnSXJpcyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBNb2JpbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSXJpc1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyBXTShbMC05XSkgLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0gKyAnLjAnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5tb2RlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSmFzbWluZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSmFzbWluZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnSmFzbWluZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSmFzbWluZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBCb3hlZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQm94ZWUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0JveGVlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0JveGVlXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEVzcGlhbFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRXNwaWFsJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdFc3BpYWwnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlICE9PSAndGVsZXZpc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Fc3BpYWxcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQU5UIEdhbGlvXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9BTlRHYWxpb1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdBTlQgR2FsaW8nO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBOZXRGcm9udCBOWFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvTlhcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTmV0RnJvbnQgTlgnO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRFRWL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL21vYmlsZS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgT2JpZ29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL09iaWdvL2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT2JpZ28nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvXFwvKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvXFwvKFtBLVpdKShbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09iaWdvICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMl1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvLShbQS1aXSkoWzAtOS5dKilcXC8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPYmlnbyAnICsgbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzJdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgVUMgV2ViXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdVQ1dFQicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnVUMgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVUNXRUIoWzAtOV0qWy5dWzAtOV0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgPT09ICdMaW51eCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15JVUMgXFwoVTtcXHM/aU9TIChbMC05XFwuXSspOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ2lPUyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkpVQyBcXChMaW51eDsgVTsgKFswLTlcXC5dKylbXjtdKjsgW147XSs7IChbXjtdKlteXFxzXSlcXHMqOyBbMC05XStcXCpbMC05XStcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdICE9PSAndW5kZWZpbmVkJykgdGhpcy5kZXZpY2UudHlwZSA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL1xcKSBVQyAvKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1VDIEJyb3dzZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvVUNCcm93c2VyXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1VDIEJyb3dzZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmluZVNreVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9OaW5lc2t5KD86LWFuZHJvaWQtbW9iaWxlKD86LWNuKT8pP1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOaW5lU2t5JztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNreWZpcmVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvU2t5ZmlyZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdTa3lmaXJlJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQW5kcm9pZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRG9scGhpbiBIRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Eb2xwaGluSERDTlxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdEb2xwaGluJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0RvbHBoaW5cXC9JTlQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnRG9scGhpbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBRUSBCcm93c2VyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhNP1FRQnJvd3NlcilcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnUVEgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uLm1hdGNoKC9eWzAtOV1bMC05XSQvKSkgdmVyc2lvbiA9IHZlcnNpb25bMF0gKyAnLicgKyB2ZXJzaW9uWzFdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJ1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9zLm5hbWUgJiYgbWF0Y2hbMV0gPT09ICdRUUJyb3dzZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIGlCcm93c2VyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhpQnJvd3NlcilcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnaUJyb3dzZXInO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbi5tYXRjaCgvWzAtOV1bMC05XS8pKSB2ZXJzaW9uID0gdmVyc2lvblswXSArICcuJyArIHZlcnNpb25bMV07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICcnXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFB1ZmZpblxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9QdWZmaW5cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnUHVmZmluJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnTGludXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICAzNjAgRXh0cmVtZSBFeHBsb3JlclxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnMzYwRUUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJzM2MCBFeHRyZW1lIEV4cGxvcmVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE1pZG9yaVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NaWRvcmlcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTWlkb3JpJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnTGludXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdMaW51eCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdkZXNrdG9wJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgT3RoZXJzXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgdmFyIGJyb3dzZXJzID0gW3tcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWRvYmVBSVInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Fkb2JlQUlSXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBd2Vzb21pdW0nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0F3ZXNvbWl1bVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2FudmFjZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ2FudmFjZSBTdGFuZGFsb25lXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdFa2lvaCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRWtpb2hcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0phdmFGWCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvSmF2YUZYXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdHRlhlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9HRlhlXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdMdWFLaXQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL2x1YWtpdC9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGl0YW5pdW0nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1RpdGFuaXVtXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdPcGVuV2ViS2l0U2hhcnAnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09wZW5XZWJLaXRTaGFycC9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUHJpc20nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1ByaXNtXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0RW1iZWRkZWQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0RW1iZWRkZWQvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0RW1iZWRkZWQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0RW1iZWRkZWQuKlF0XFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSaG9TaW11bGF0b3InLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1Job1NpbXVsYXRvci9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVVdlYktpdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVVdlYktpdFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGhhbnRvbUpTJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9QaGFudG9tSlNcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0dvb2dsZSBXZWIgUHJldmlldycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvR29vZ2xlIFdlYiBQcmV2aWV3L1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdHb29nbGUgRWFydGgnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0dvb2dsZSBFYXJ0aFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRUEgT3JpZ2luJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9PcmlnaW5cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NlY29uZExpZmUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NlY29uZExpZmVcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZhbHZlIFN0ZWFtJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9WYWx2ZSBTdGVhbS9cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU29uZ2JpcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NvbmdiaXJkXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaHVuZGVyYmlyZCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGh1bmRlcmJpcmRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Ficm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9BYnJvd3NlclxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXJvcmEnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1tBYV1yb3JhXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdCYWlkdSBCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9NP0JhaWR1QnJvd3NlclxcLyhbMC05Ll0qKS9pXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0NhbWlubycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ2FtaW5vXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDYW51cmUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0NhbnVyZVxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDb21ldEJpcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0NvbWV0QmlyZFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29tb2RvIERyYWdvbicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ29tb2RvX0RyYWdvblxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25rZXJvcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvW0NjXW9ua2Vyb3JcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Nvb2xOb3ZvJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC8oPzpDb29sTm92b3xDb29sTm92b0Nocm9tZVBsdXMpXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Nocm9tZVBsdXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Nocm9tZVBsdXMoPzpcXC8oWzAtOS5dKikpPyQvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRGFlZGFsdXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0RhZWRhbHVzIChbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdEZW1vYnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvZGVtb2Jyb3dzZXJcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Rvb2JsZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRG9vYmxlKD86XFwvKFswLTkuXSopKT8vXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0RXQicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvZHdiKD86LWhnKT8oPzpcXC8oWzAtOS5dKikpPy9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRXBpcGhhbnknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0VwaXBoYW55XFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdGaXJlV2ViJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9GaXJlV2ViXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdGbG9jaycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRmxvY2tcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnR2FsZW9uJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9HYWxlb25cXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSGVsaXVtJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9IZWxpdW1Nb2JpbGVCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpQ2FiJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9pQ2FiXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJY2VhcGUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ljZWFwZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSWNlQ2F0JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9JY2VDYXQgKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJY2V3ZWFzZWwnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ljZXdlYXNlbFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW50ZXJuZXRTdXJmYm9hcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ludGVybmV0U3VyZmJvYXJkXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJcm9uJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9Jcm9uXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0lzaXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Jyb3dzZXJTZXJ2ZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0p1bWFuamknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL2p1bWFuamkvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0themVoYWthc2UnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0themVoYWthc2VcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0tDaHJvbWUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0tDaHJvbWVcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSy1NZWxlb24nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0stTWVsZW9uXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdMZWVjaGNyYWZ0JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9MZWVjaGNyYWZ0KD86XFwvKFswLTkuXSopKT8vLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTGlnaHRuaW5nJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9MaWdodG5pbmdcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0x1bmFzY2FwZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvTHVuYXNjYXBlW1xcL3wgXShbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpTHVuYXNjYXBlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9pTHVuYXNjYXBlXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ01heHRob24nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01heHRob25bXFwvIF0oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWluaUJyb3dzZXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01pbmlCcj9vd3Nlck1cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ01pbmlCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9NaW5pQnJvd3Nlck1vYmlsZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWl4U2hhcmsnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01peFNoYXJrXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdNb3Rvcm9sYSBXZWJLaXQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01vdG9yb2xhV2ViS2l0XFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ05ldEZyb250IExpZmVCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9OZXRGcm9udExpZmVCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdOZXRzY2FwZSBOYXZpZ2F0b3InLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL05hdmlnYXRvclxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdPZHlzc2V5JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9PV0JcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09tbmlXZWInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09tbmlXZWIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09yY2EnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09yY2FcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09yaWd5bicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvT3JpZ3luIFdlYiBCcm93c2VyL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdQYWxlbW9vbicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUGFsZVttTV1vb25cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1BoYW50b20nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1BoYW50b21cXC9WKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdQb2xhcmlzJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9Qb2xhcmlzXFwvdj8oWzAtOS5dKikvaSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0Q3JlYXRvcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRDcmVhdG9yXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdFFtbFZpZXdlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRRbWxWaWV3ZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0VGVzdEJyb3dzZXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0VGVzdEJyb3dzZXJcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0V2ViJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9RdFdlYiBJbnRlcm5ldCBCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdXBaaWxsYScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXVwWmlsbGFcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JvY2NhdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUm9jY2F0XFwvKFswLTldXFwuWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JhdmVuIGZvciBNYWMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1JhdmVuIGZvciBNYWNcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jla29ucScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvcmVrb25xL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSb2NrTWVsdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUm9ja01lbHRcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2xlaXBuaXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NsZWlwbmlyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NNQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU01Ccm93c2VyL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTb2dvdSBFeHBsb3JlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU0UgMi5YIE1ldGFTci9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU25vd3Nob2UnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1Nub3dzaG9lXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NwdXRuaWsnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NwdXRuaWtcXC8oWzAtOS5dKikvaSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1N0YWlubGVzcycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU3RhaW5sZXNzXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTdW5DaHJvbWUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1N1bkNocm9tZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU3VyZicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU3VyZlxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGFvQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGFvQnJvd3NlclxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUYW9tZWVCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9UYW9tZWVCcm93c2VyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1RheldlYicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGF6V2ViL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdWaWVyYScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVmllcmFcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZpbGxhbm92YScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVmlsbGFub3ZhXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1dhdmVsaW5rIFZlbG9jaXR5JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XYXZlbGluayBWZWxvY2l0eSBCcm93c2VyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1dlYlBvc2l0aXZlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XZWJQb3NpdGl2ZS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnV2ViUmVuZGVyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XZWJSZW5kZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1d5em8nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1d5em9cXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnWmV0YWtleScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvWmV0YWtleSBXZWJraXRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1pldGFrZXknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1pldGFrZXlcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9XVxuXG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJyb3dzZXJzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gYnJvd3NlcnNbYl0ucmVnZXhwLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gYnJvd3NlcnNbYl0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYnJvd3NlcnNbYl0uZGV0YWlscyB8fCBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdlYktpdFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9XZWJLaXRcXC8oWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0Jyb3dzZXJcXC9BcHBsZVdlYktpdChbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUubmFtZSA9ICdXZWJraXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBLSFRNTFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9LSFRNTFxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ0tIVE1MJztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgR2Vja29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoL0dlY2tvLy5leGVjKHVhKSAmJiAhL2xpa2UgR2Vja28vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnR2Vja28nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLzsgcnY6KFteXFwpXSspXFwpLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgUHJlc3RvXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ByZXN0b1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1ByZXN0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRyaWRlbnRcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvVHJpZGVudFxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1RyaWRlbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVZlcnNpb24odGhpcy5lbmdpbmUudmVyc2lvbikgPT09IDYgJiYgcGFyc2VGbG9hdCh0aGlzLmJyb3dzZXIudmVyc2lvbikgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxMC4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVmVyc2lvbih0aGlzLmVuZ2luZS52ZXJzaW9uKSA9PT0gNSAmJiBwYXJzZUZsb2F0KHRoaXMuYnJvd3Nlci52ZXJzaW9uKSA8IDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnOS4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVmVyc2lvbih0aGlzLmVuZ2luZS52ZXJzaW9uKSA9PT0gNCAmJiBwYXJzZUZsb2F0KHRoaXMuYnJvd3Nlci52ZXJzaW9uKSA8IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnOC4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ1dpbmRvd3MgUGhvbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVZlcnNpb24odGhpcy5lbmdpbmUudmVyc2lvbikgPT09IDUgJiYgcGFyc2VGbG9hdCh0aGlzLm9zLnZlcnNpb24pIDwgNy41KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICc3LjUnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDb3JyZWN0aW9uc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgPT09ICdBbmRyb2lkJyAmJiB0aGlzLmJyb3dzZXIuc3RvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ2lPUycgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdPcGVyYSBNaW5pJykge1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIubmFtZSA9PT0gJ01pZG9yaScgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1dlYmtpdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1dlYmtpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlID09PSAndGVsZXZpc2lvbicgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdPcGVyYScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBEZXZpY2VzJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjEwJyk6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMy4yXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuOScpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDMuMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjgnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAzLjBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5lbmdpbmUudmVyc2lvbi5pcygnMi43Jyk6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMi45XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuNicpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDIuOFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjQnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxMC4zXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuMycpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEwXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuMicpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDkuN1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjEnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiA5LjZcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENhbW91ZmxhZ2VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRldGVjdENhbW91ZmxhZ2UpIHtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWCAxMF82XzM7IChbXjtdKyk7IFthLXpdezJ9LSg/OlthLXpdezJ9KT9cXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXVsyXSAhPT0gJ3VuZGVmaW5lZCcpIHRoaXMuZGV2aWNlLnR5cGUgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmREZXZpY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTGludXggVmVudGFuYTsgW2Etel17Mn0tW2Etel17Mn07ICguKykgQnVpbGQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXVsyXSAhPT0gJ3VuZGVmaW5lZCcpIHRoaXMuZGV2aWNlLnR5cGUgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmREZXZpY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLm5hbWUgPT09ICdTYWZhcmknKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgIT09ICdpT1MnICYmIC9BcHBsZVdlYktpdFxcLyhbMC05XSsuWzAtOV0rKS9pLmV4ZWModWEpWzFdICE9PSAvU2FmYXJpXFwvKFswLTldKy5bMC05XSspL2kuZXhlYyh1YSlbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnc2FmYXJpTWlzbWF0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnaU9TJyAmJiAhdWEubWF0Y2goL15Nb3ppbGxhLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnbm9Nb3ppbGxhUHJlZml4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEvVmVyc2lvblxcL1swLTlcXC5dKy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnbm9WZXJzaW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnQ2hyb21lJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIS8oPzpDaHJvbWV8Q3JNb3xDcmlPUylcXC8oWzAtOV17MSwyfVxcLlswLTldXFwuWzAtOV17Myw0fVxcLlswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3dyb25nVmVyc2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCBjbGFpbXMgbm90IHRvIGJlIFRyaWRlbnQsIGJ1dCBpdCBpcyBwcm9iYWJseSBUcmlkZW50IHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCd0cmlkZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1RyaWRlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHlwZW9mIHRoaXMuYnJvd3Nlci5uYW1lID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmJyb3dzZXIubmFtZSAhPT0gJ01heHRob24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQgY2xhaW1zIG5vdCB0byBiZSBPcGVyYSwgYnV0IGl0IGlzIHByb2JhYmx5IE9wZXJhIHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cub3BlcmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgncHJlc3RvJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1ByZXN0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLm5hbWUgPT09ICdJbnRlcm5ldCBFeHBsb3JlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQgY2xhaW1zIG5vdCB0byBiZSBHZWNrbywgYnV0IGl0IGlzIHByb2JhYmx5IEdlY2tvIHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICgnZ2V0Qm94T2JqZWN0Rm9yJyBpbiBkb2N1bWVudCB8fCAnbW96SW5uZXJTY3JlZW5YJyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZ2Vja28nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZ2luZS5uYW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZ2luZS5uYW1lICE9PSAnR2Vja28nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qIElmIGl0IGNsYWltcyBub3QgdG8gYmUgV2Via2l0LCBidXQgaXQgaXMgcHJvYmFibHkgV2Via2l0IHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICgnV2ViS2l0Q1NTTWF0cml4JyBpbiB3aW5kb3cgfHwgJ1dlYktpdFBvaW50JyBpbiB3aW5kb3cgfHwgJ3dlYmtpdFN0b3JhZ2VJbmZvJyBpbiB3aW5kb3cgfHwgJ3dlYmtpdFVSTCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3dlYmtpdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5naW5lLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5naW5lLm5hbWUgIT09ICdXZWJraXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCBjbGFpbXMgdG8gYmUgU2FmYXJpIGFuZCB1c2VzIFY4LCBpdCBpcyBwcm9iYWJseSBhbiBBbmRyb2lkIGRldmljZSBydW5uaW5nIGNhbW91ZmxhZ2UgbW9kZSAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmdpbmUubmFtZSA9PT0gJ1dlYmtpdCcgJiYgKHt9LnRvU3RyaW5nKS50b1N0cmluZygpLmluZGV4T2YoJ1xcbicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCd2OCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyICE9PSBudWxsICYmIHRoaXMuYnJvd3Nlci5uYW1lID09PSAnU2FmYXJpJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhbiBpUGFkIHRoYXQgaXMgbm90IDc2OCB4IDEwMjQsIHdlIGhhdmUgYW4gaW1wb3N0ZXIgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlLm1vZGVsID09PSAnaVBhZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NyZWVuLndpZHRoICE9PSAwICYmIHNjcmVlbi5oZWlnaHQgIT09IDApICYmIChzY3JlZW4ud2lkdGggIT09IDc2OCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSAxMDI0KSAmJiAoc2NyZWVuLndpZHRoICE9PSAxMDI0ICYmIHNjcmVlbi5oZWlnaHQgIT09IDc2OCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3NpemVNaXNtYXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGFuIGlQaG9uZSBvciBpUG9kIHRoYXQgaXMgbm90IDMyMCB4IDQ4MCwgd2UgaGF2ZSBhbiBpbXBvc3RlciAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXZpY2UubW9kZWwgPT09ICdpUGhvbmUnIHx8IHRoaXMuZGV2aWNlLm1vZGVsID09PSAnaVBvZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NyZWVuLndpZHRoICE9PSAwICYmIHNjcmVlbi5oZWlnaHQgIT09IDApICYmIChzY3JlZW4ud2lkdGggIT09IDMyMCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSA0ODApICYmIChzY3JlZW4ud2lkdGggIT09IDQ4MCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSAzMjApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdzaXplTWlzbWF0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnaU9TJyAmJiB0aGlzLm9zLnZlcnNpb24pIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbi5pc09sZGVyKCc0LjAnKSAmJiAnc2FuZGJveCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ2ZvdW5kU2FuZGJveCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24uaXNPbGRlcignNC4yJykgJiYgJ1dlYlNvY2tldCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZFNvY2tldHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy52ZXJzaW9uLmlzT2xkZXIoJzUuMCcpICYmICEhIHdpbmRvdy5Xb3JrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ2ZvdW5kV29ya2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbi5pc05ld2VyKCcyLjEnKSAmJiAhd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ25vQXBwQ2FjaGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSAhPT0gJ2lPUycgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdTYWZhcmknICYmIHRoaXMuYnJvd3Nlci52ZXJzaW9uKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi5pc09sZGVyKCc0LjAnKSAmJiAhISB3aW5kb3cuYXBwbGljYXRpb25DYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmRBcHBDYWNoZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi5pc09sZGVyKCc0LjEnKSAmJiAhISAod2luZG93Lmhpc3RvcnkgJiYgaGlzdG9yeS5wdXNoU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZEhpc3RvcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24uaXNPbGRlcignNS4xJykgJiYgISEgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZEZ1bGxzY3JlZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24uaXNPbGRlcignNS4yJykgJiYgJ0ZpbGVSZWFkZXInIGluIHdpbmRvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmRGaWxlUmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kZWwocykge1xuICAgICAgICBzID0gdHlwZW9mIHMgPT09ICd1bmRlZmluZWQnID8gJycgOiBzO1xuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL19URCQvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL19DTUNDJC8sICcnKTtcblxuICAgICAgICBzID0gcy5yZXBsYWNlKC9fL2csICcgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXFwvW14vXSskLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9cXC9bXi9dKyBBbmRyb2lkXFwvLiovLCAnJyk7XG5cbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXnRpdGEgb24gLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQW5kcm9pZCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15BbmRyb2lkIGZvciAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15JQ1MgQU9TUCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIEFPU1Agb24gLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eRnVsbCBBbmRyb2lkIG9uIC8sICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkZ1bGwgQ2FwcHVjY2lubyBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIE1JUFMgQW5kcm9pZCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIEFuZHJvaWQvLCAnJyk7XG5cbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkFjZXIgPy9pLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15JY29uaWEgLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQWlub2wgLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQ29vbHBhZCA/L2ksICdDb29scGFkICcpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQUxDQVRFTCAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15BbGNhdGVsIE9ULSguKikvLCAnb25lIHRvdWNoICQxJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15ZTC0vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15Ob3ZvNyA/L2ksICdOb3ZvNyAnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkdJT05FRSAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15IVy0vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15IdWF3ZWlbIC1dL2ksICdIdWF3ZWkgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15TQU1TVU5HWyAtXS9pLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15Tb255RXJpY3Nzb24vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15MZW5vdm8gTGVub3ZvLywgJ0xlbm92bycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eTE5WLUxlbm92by8sICdMZW5vdm8nKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkxlbm92by0vLCAnTGVub3ZvICcpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eKExHKVsgX1xcL10vLCAnJDEtJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oSFRDLiopXFxzKD86dnxWKT9bMC05Ll0rJC8sICckMScpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eKEhUQylbLVxcL10vLCAnJDEgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oSFRDKShbQS1aXVswLTldWzAtOV1bMC05XSkvLCAnJDEgJDInKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXihNb3Rvcm9sYVtcXHN8LV0pLywgJycpXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oTW90b3xNT1QtKS8sICcnKVxuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoLy0/KG9yYW5nZSgtbHMpP3x2b2RhZm9uZXxib3V5Z3VlcykkL2ksICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvaHR0cDpcXC9cXC8uKyQvaSwgJycpO1xuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVZlcnNpb24odmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIG1ham9yID0gY29tcG9uZW50cy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYWpvciArICcuJyArIGNvbXBvbmVudHMuam9pbignJykpO1xuICAgIH1cblxuICAgIHJldHVybiBEZXRlY3RlZDtcblxufSkoKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js\n");

/***/ }),

/***/ "./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js":
/*!**********************************************************************************************!*\
  !*** ./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js ***!
  \**********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("!function(e,t){ true?module.exports=t(__webpack_require__(/*! swiper/dist/js/swiper.js */ \"./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js\")):undefined}(this,function(e){return function(e){function t(i){if(n[i])return n[i].exports;var s=n[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"/\",t(t.s=4)}([function(t,n){t.exports=e},function(e,t){e.exports=function(e,t,n,i,s,r){var o,a=e=e||{},u=typeof e.default;\"object\"!==u&&\"function\"!==u||(o=e,a=e.default);var p=\"function\"==typeof a?a.options:a;t&&(p.render=t.render,p.staticRenderFns=t.staticRenderFns,p._compiled=!0),n&&(p.functional=!0),s&&(p._scopeId=s);var l;if(r?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},p._ssrRegister=l):i&&(l=i),l){var c=p.functional,d=c?p.render:p.beforeCreate;c?(p._injectStyles=l,p.render=function(e,t){return l.call(t),d(e,t)}):p.beforeCreate=d?[].concat(d,l):[l]}return{esModule:o,exports:a,options:p}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(5),s=n.n(i),r=n(8),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(6),s=n.n(i),r=n(7),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.install=t.swiperSlide=t.swiper=t.Swiper=void 0;var s=n(0),r=i(s),o=n(2),a=i(o),u=n(3),p=i(u),l=window.Swiper||r.default,c=p.default,d=a.default,f=function(e,t){t&&(p.default.props.globalOptions.default=function(){return t}),e.component(p.default.name,p.default),e.component(a.default.name,a.default)},h={Swiper:l,swiper:c,swiperSlide:d,install:f};t.default=h,t.Swiper=l,t.swiper=c,t.swiperSlide=d,t.install=f},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"swiper-slide\",data:function(){return{slideClass:\"swiper-slide\"}},ready:function(){this.update()},mounted:function(){this.update(),this.$parent&&this.$parent.options&&this.$parent.options.slideClass&&(this.slideClass=this.$parent.options.slideClass)},updated:function(){this.update()},attached:function(){this.update()},methods:{update:function(){this.$parent&&this.$parent.swiper&&this.$parent.update()}}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(0),s=function(e){return e&&e.__esModule?e:{default:e}}(i),r=window.Swiper||s.default;\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(e,t){if(null==e)throw new TypeError(\"Cannot convert undefined or null to object\");for(var n=Object(e),i=1;i<arguments.length;i++){var s=arguments[i];if(null!=s)for(var r in s)Object.prototype.hasOwnProperty.call(s,r)&&(n[r]=s[r])}return n},writable:!0,configurable:!0});var o=[\"beforeDestroy\",\"slideChange\",\"slideChangeTransitionStart\",\"slideChangeTransitionEnd\",\"slideNextTransitionStart\",\"slideNextTransitionEnd\",\"slidePrevTransitionStart\",\"slidePrevTransitionEnd\",\"transitionStart\",\"transitionEnd\",\"touchStart\",\"touchMove\",\"touchMoveOpposite\",\"sliderMove\",\"touchEnd\",\"click\",\"tap\",\"doubleTap\",\"imagesReady\",\"progress\",\"reachBeginning\",\"reachEnd\",\"fromEdge\",\"setTranslate\",\"setTransition\",\"resize\"];t.default={name:\"swiper\",props:{options:{type:Object,default:function(){return{}}},globalOptions:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{swiper:null,classes:{wrapperClass:\"swiper-wrapper\"}}},ready:function(){this.swiper||this.mountInstance()},mounted:function(){if(!this.swiper){var e=!1;for(var t in this.classes)this.classes.hasOwnProperty(t)&&this.options[t]&&(e=!0,this.classes[t]=this.options[t]);e?this.$nextTick(this.mountInstance):this.mountInstance()}},activated:function(){this.update()},updated:function(){this.update()},beforeDestroy:function(){this.$nextTick(function(){this.swiper&&(this.swiper.destroy&&this.swiper.destroy(),delete this.swiper)})},methods:{update:function(){this.swiper&&(this.swiper.update&&this.swiper.update(),this.swiper.navigation&&this.swiper.navigation.update(),this.swiper.pagination&&this.swiper.pagination.render(),this.swiper.pagination&&this.swiper.pagination.update())},mountInstance:function(){var e=Object.assign({},this.globalOptions,this.options);this.swiper=new r(this.$el,e),this.bindEvents(),this.$emit(\"ready\",this.swiper)},bindEvents:function(){var e=this,t=this;o.forEach(function(n){e.swiper.on(n,function(){t.$emit.apply(t,[n].concat(Array.prototype.slice.call(arguments))),t.$emit.apply(t,[n.replace(/([A-Z])/g,\"-$1\").toLowerCase()].concat(Array.prototype.slice.call(arguments)))})})}}}},function(e,t,n){\"use strict\";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{staticClass:\"swiper-container\"},[e._t(\"parallax-bg\"),e._v(\" \"),n(\"div\",{class:e.classes.wrapperClass},[e._t(\"default\")],2),e._v(\" \"),e._t(\"pagination\"),e._v(\" \"),e._t(\"button-prev\"),e._v(\" \"),e._t(\"button-next\"),e._v(\" \"),e._t(\"scrollbar\")],2)},s=[],r={render:i,staticRenderFns:s};t.a=r},function(e,t,n){\"use strict\";var i=function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{class:e.slideClass},[e._t(\"default\")],2)},s=[],r={render:i,staticRenderFns:s};t.a=r}])});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1hd2Vzb21lLXN3aXBlckAzLjEuM0B2dWUtYXdlc29tZS1zd2lwZXIvZGlzdC92dWUtYXdlc29tZS1zd2lwZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3Z1ZS1hd2Vzb21lLXN3aXBlckAzLjEuM0B2dWUtYXdlc29tZS1zd2lwZXIvZGlzdC92dWUtYXdlc29tZS1zd2lwZXIuanM/NmZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJWdWVBd2Vzb21lU3dpcGVyXCIsW1wic3dpcGVyXCJdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuVnVlQXdlc29tZVN3aXBlcj10KHJlcXVpcmUoXCJzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanNcIikpOmUuVnVlQXdlc29tZVN3aXBlcj10KGUuU3dpcGVyKX0odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtpZihuW2ldKXJldHVybiBuW2ldLmV4cG9ydHM7dmFyIHM9bltpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsdCkscy5sPSEwLHMuZXhwb3J0c312YXIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmQ9ZnVuY3Rpb24oZSxuLGkpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6aX0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLFwiYVwiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPVwiL1wiLHQodC5zPTQpfShbZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSxzLHIpe3ZhciBvLGE9ZT1lfHx7fSx1PXR5cGVvZiBlLmRlZmF1bHQ7XCJvYmplY3RcIiE9PXUmJlwiZnVuY3Rpb25cIiE9PXV8fChvPWUsYT1lLmRlZmF1bHQpO3ZhciBwPVwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YS5vcHRpb25zOmE7dCYmKHAucmVuZGVyPXQucmVuZGVyLHAuc3RhdGljUmVuZGVyRm5zPXQuc3RhdGljUmVuZGVyRm5zLHAuX2NvbXBpbGVkPSEwKSxuJiYocC5mdW5jdGlvbmFsPSEwKSxzJiYocC5fc2NvcGVJZD1zKTt2YXIgbDtpZihyPyhsPWZ1bmN0aW9uKGUpe2U9ZXx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0LGV8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9ffHwoZT1fX1ZVRV9TU1JfQ09OVEVYVF9fKSxpJiZpLmNhbGwodGhpcyxlKSxlJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cyYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKHIpfSxwLl9zc3JSZWdpc3Rlcj1sKTppJiYobD1pKSxsKXt2YXIgYz1wLmZ1bmN0aW9uYWwsZD1jP3AucmVuZGVyOnAuYmVmb3JlQ3JlYXRlO2M/KHAuX2luamVjdFN0eWxlcz1sLHAucmVuZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuY2FsbCh0KSxkKGUsdCl9KTpwLmJlZm9yZUNyZWF0ZT1kP1tdLmNvbmNhdChkLGwpOltsXX1yZXR1cm57ZXNNb2R1bGU6byxleHBvcnRzOmEsb3B0aW9uczpwfX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1uKDUpLHM9bi5uKGkpLHI9big4KSxvPW4oMSksYT1vKHMuYSxyLmEsITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1hLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1uKDYpLHM9bi5uKGkpLHI9big3KSxvPW4oMSksYT1vKHMuYSxyLmEsITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1hLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lmluc3RhbGw9dC5zd2lwZXJTbGlkZT10LnN3aXBlcj10LlN3aXBlcj12b2lkIDA7dmFyIHM9bigwKSxyPWkocyksbz1uKDIpLGE9aShvKSx1PW4oMykscD1pKHUpLGw9d2luZG93LlN3aXBlcnx8ci5kZWZhdWx0LGM9cC5kZWZhdWx0LGQ9YS5kZWZhdWx0LGY9ZnVuY3Rpb24oZSx0KXt0JiYocC5kZWZhdWx0LnByb3BzLmdsb2JhbE9wdGlvbnMuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0fSksZS5jb21wb25lbnQocC5kZWZhdWx0Lm5hbWUscC5kZWZhdWx0KSxlLmNvbXBvbmVudChhLmRlZmF1bHQubmFtZSxhLmRlZmF1bHQpfSxoPXtTd2lwZXI6bCxzd2lwZXI6Yyxzd2lwZXJTbGlkZTpkLGluc3RhbGw6Zn07dC5kZWZhdWx0PWgsdC5Td2lwZXI9bCx0LnN3aXBlcj1jLHQuc3dpcGVyU2xpZGU9ZCx0Lmluc3RhbGw9Zn0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD17bmFtZTpcInN3aXBlci1zbGlkZVwiLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2xpZGVDbGFzczpcInN3aXBlci1zbGlkZVwifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKSx0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5vcHRpb25zJiZ0aGlzLiRwYXJlbnQub3B0aW9ucy5zbGlkZUNsYXNzJiYodGhpcy5zbGlkZUNsYXNzPXRoaXMuJHBhcmVudC5vcHRpb25zLnNsaWRlQ2xhc3MpfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfSxtZXRob2RzOnt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5zd2lwZXImJnRoaXMuJHBhcmVudC51cGRhdGUoKX19fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGkpLHI9d2luZG93LlN3aXBlcnx8cy5kZWZhdWx0O1wiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5hc3NpZ24mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7Zm9yKHZhciBuPU9iamVjdChlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHM9YXJndW1lbnRzW2ldO2lmKG51bGwhPXMpZm9yKHZhciByIGluIHMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMscikmJihuW3JdPXNbcl0pfXJldHVybiBufSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgbz1bXCJiZWZvcmVEZXN0cm95XCIsXCJzbGlkZUNoYW5nZVwiLFwic2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnRcIixcInNsaWRlQ2hhbmdlVHJhbnNpdGlvbkVuZFwiLFwic2xpZGVOZXh0VHJhbnNpdGlvblN0YXJ0XCIsXCJzbGlkZU5leHRUcmFuc2l0aW9uRW5kXCIsXCJzbGlkZVByZXZUcmFuc2l0aW9uU3RhcnRcIixcInNsaWRlUHJldlRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25TdGFydFwiLFwidHJhbnNpdGlvbkVuZFwiLFwidG91Y2hTdGFydFwiLFwidG91Y2hNb3ZlXCIsXCJ0b3VjaE1vdmVPcHBvc2l0ZVwiLFwic2xpZGVyTW92ZVwiLFwidG91Y2hFbmRcIixcImNsaWNrXCIsXCJ0YXBcIixcImRvdWJsZVRhcFwiLFwiaW1hZ2VzUmVhZHlcIixcInByb2dyZXNzXCIsXCJyZWFjaEJlZ2lubmluZ1wiLFwicmVhY2hFbmRcIixcImZyb21FZGdlXCIsXCJzZXRUcmFuc2xhdGVcIixcInNldFRyYW5zaXRpb25cIixcInJlc2l6ZVwiXTt0LmRlZmF1bHQ9e25hbWU6XCJzd2lwZXJcIixwcm9wczp7b3B0aW9uczp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZ2xvYmFsT3B0aW9uczp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITEsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3dpcGVyOm51bGwsY2xhc3Nlczp7d3JhcHBlckNsYXNzOlwic3dpcGVyLXdyYXBwZXJcIn19fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc3dpcGVyfHx0aGlzLm1vdW50SW5zdGFuY2UoKX0sbW91bnRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLnN3aXBlcil7dmFyIGU9ITE7Zm9yKHZhciB0IGluIHRoaXMuY2xhc3Nlcyl0aGlzLmNsYXNzZXMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMub3B0aW9uc1t0XSYmKGU9ITAsdGhpcy5jbGFzc2VzW3RdPXRoaXMub3B0aW9uc1t0XSk7ZT90aGlzLiRuZXh0VGljayh0aGlzLm1vdW50SW5zdGFuY2UpOnRoaXMubW91bnRJbnN0YW5jZSgpfX0sYWN0aXZhdGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKX0sdXBkYXRlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3RoaXMuc3dpcGVyJiYodGhpcy5zd2lwZXIuZGVzdHJveSYmdGhpcy5zd2lwZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLnN3aXBlcil9KX0sbWV0aG9kczp7dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5zd2lwZXImJih0aGlzLnN3aXBlci51cGRhdGUmJnRoaXMuc3dpcGVyLnVwZGF0ZSgpLHRoaXMuc3dpcGVyLm5hdmlnYXRpb24mJnRoaXMuc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCksdGhpcy5zd2lwZXIucGFnaW5hdGlvbiYmdGhpcy5zd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKSx0aGlzLnN3aXBlci5wYWdpbmF0aW9uJiZ0aGlzLnN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpKX0sbW91bnRJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nbG9iYWxPcHRpb25zLHRoaXMub3B0aW9ucyk7dGhpcy5zd2lwZXI9bmV3IHIodGhpcy4kZWwsZSksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy4kZW1pdChcInJlYWR5XCIsdGhpcy5zd2lwZXIpfSxiaW5kRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXM7by5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Uuc3dpcGVyLm9uKG4sZnVuY3Rpb24oKXt0LiRlbWl0LmFwcGx5KHQsW25dLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSksdC4kZW1pdC5hcHBseSh0LFtuLnJlcGxhY2UoLyhbQS1aXSkvZyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfSl9KX19fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwic3dpcGVyLWNvbnRhaW5lclwifSxbZS5fdChcInBhcmFsbGF4LWJnXCIpLGUuX3YoXCIgXCIpLG4oXCJkaXZcIix7Y2xhc3M6ZS5jbGFzc2VzLndyYXBwZXJDbGFzc30sW2UuX3QoXCJkZWZhdWx0XCIpXSwyKSxlLl92KFwiIFwiKSxlLl90KFwicGFnaW5hdGlvblwiKSxlLl92KFwiIFwiKSxlLl90KFwiYnV0dG9uLXByZXZcIiksZS5fdihcIiBcIiksZS5fdChcImJ1dHRvbi1uZXh0XCIpLGUuX3YoXCIgXCIpLGUuX3QoXCJzY3JvbGxiYXJcIildLDIpfSxzPVtdLHI9e3JlbmRlcjppLHN0YXRpY1JlbmRlckZuczpzfTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQ7cmV0dXJuKGUuX3NlbGYuX2N8fHQpKFwiZGl2XCIse2NsYXNzOmUuc2xpZGVDbGFzc30sW2UuX3QoXCJkZWZhdWx0XCIpXSwyKX0scz1bXSxyPXtyZW5kZXI6aSxzdGF0aWNSZW5kZXJGbnM6c307dC5hPXJ9XSl9KTsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js\n");

/***/ }),

/***/ "./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js ***!
  \*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var Vue // late bind\nvar version\nvar map = Object.create(null)\nif (typeof window !== 'undefined') {\n  window.__VUE_HOT_MAP__ = map\n}\nvar installed = false\nvar isBrowserify = false\nvar initHookName = 'beforeCreate'\n\nexports.install = function (vue, browserify) {\n  if (installed) { return }\n  installed = true\n\n  Vue = vue.__esModule ? vue.default : vue\n  version = Vue.version.split('.').map(Number)\n  isBrowserify = browserify\n\n  // compat with < 2.0.0-alpha.7\n  if (Vue.config._lifecycleHooks.indexOf('init') > -1) {\n    initHookName = 'init'\n  }\n\n  exports.compatible = version[0] >= 2\n  if (!exports.compatible) {\n    console.warn(\n      '[HMR] You are using a version of vue-hot-reload-api that is ' +\n        'only compatible with Vue.js core ^2.0.0.'\n    )\n    return\n  }\n}\n\n/**\n * Create a record for a hot module, which keeps track of its constructor\n * and instances\n *\n * @param {String} id\n * @param {Object} options\n */\n\nexports.createRecord = function (id, options) {\n  if(map[id]) { return }\n\n  var Ctor = null\n  if (typeof options === 'function') {\n    Ctor = options\n    options = Ctor.options\n  }\n  makeOptionsHot(id, options)\n  map[id] = {\n    Ctor: Ctor,\n    options: options,\n    instances: []\n  }\n}\n\n/**\n * Check if module is recorded\n *\n * @param {String} id\n */\n\nexports.isRecorded = function (id) {\n  return typeof map[id] !== 'undefined'\n}\n\n/**\n * Make a Component options object hot.\n *\n * @param {String} id\n * @param {Object} options\n */\n\nfunction makeOptionsHot(id, options) {\n  if (options.functional) {\n    var render = options.render\n    options.render = function (h, ctx) {\n      var instances = map[id].instances\n      if (ctx && instances.indexOf(ctx.parent) < 0) {\n        instances.push(ctx.parent)\n      }\n      return render(h, ctx)\n    }\n  } else {\n    injectHook(options, initHookName, function() {\n      var record = map[id]\n      if (!record.Ctor) {\n        record.Ctor = this.constructor\n      }\n      record.instances.push(this)\n    })\n    injectHook(options, 'beforeDestroy', function() {\n      var instances = map[id].instances\n      instances.splice(instances.indexOf(this), 1)\n    })\n  }\n}\n\n/**\n * Inject a hook to a hot reloadable component so that\n * we can keep track of it.\n *\n * @param {Object} options\n * @param {String} name\n * @param {Function} hook\n */\n\nfunction injectHook(options, name, hook) {\n  var existing = options[name]\n  options[name] = existing\n    ? Array.isArray(existing) ? existing.concat(hook) : [existing, hook]\n    : [hook]\n}\n\nfunction tryWrap(fn) {\n  return function (id, arg) {\n    try {\n      fn(id, arg)\n    } catch (e) {\n      console.error(e)\n      console.warn(\n        'Something went wrong during Vue component hot-reload. Full reload required.'\n      )\n    }\n  }\n}\n\nfunction updateOptions (oldOptions, newOptions) {\n  for (var key in oldOptions) {\n    if (!(key in newOptions)) {\n      delete oldOptions[key]\n    }\n  }\n  for (var key$1 in newOptions) {\n    oldOptions[key$1] = newOptions[key$1]\n  }\n}\n\nexports.rerender = tryWrap(function (id, options) {\n  var record = map[id]\n  if (!options) {\n    record.instances.slice().forEach(function (instance) {\n      instance.$forceUpdate()\n    })\n    return\n  }\n  if (typeof options === 'function') {\n    options = options.options\n  }\n  if (record.Ctor) {\n    record.Ctor.options.render = options.render\n    record.Ctor.options.staticRenderFns = options.staticRenderFns\n    record.instances.slice().forEach(function (instance) {\n      instance.$options.render = options.render\n      instance.$options.staticRenderFns = options.staticRenderFns\n      // reset static trees\n      // pre 2.5, all static trees are cached together on the instance\n      if (instance._staticTrees) {\n        instance._staticTrees = []\n      }\n      // 2.5.0\n      if (Array.isArray(record.Ctor.options.cached)) {\n        record.Ctor.options.cached = []\n      }\n      // 2.5.3\n      if (Array.isArray(instance.$options.cached)) {\n        instance.$options.cached = []\n      }\n\n      // post 2.5.4: v-once trees are cached on instance._staticTrees.\n      // Pure static trees are cached on the staticRenderFns array\n      // (both already reset above)\n\n      // 2.6: temporarily mark rendered scoped slots as unstable so that\n      // child components can be forced to update\n      var restore = patchScopedSlots(instance)\n      instance.$forceUpdate()\n      instance.$nextTick(restore)\n    })\n  } else {\n    // functional or no instance created yet\n    record.options.render = options.render\n    record.options.staticRenderFns = options.staticRenderFns\n\n    // handle functional component re-render\n    if (record.options.functional) {\n      // rerender with full options\n      if (Object.keys(options).length > 2) {\n        updateOptions(record.options, options)\n      } else {\n        // template-only rerender.\n        // need to inject the style injection code for CSS modules\n        // to work properly.\n        var injectStyles = record.options._injectStyles\n        if (injectStyles) {\n          var render = options.render\n          record.options.render = function (h, ctx) {\n            injectStyles.call(ctx)\n            return render(h, ctx)\n          }\n        }\n      }\n      record.options._Ctor = null\n      // 2.5.3\n      if (Array.isArray(record.options.cached)) {\n        record.options.cached = []\n      }\n      record.instances.slice().forEach(function (instance) {\n        instance.$forceUpdate()\n      })\n    }\n  }\n})\n\nexports.reload = tryWrap(function (id, options) {\n  var record = map[id]\n  if (options) {\n    if (typeof options === 'function') {\n      options = options.options\n    }\n    makeOptionsHot(id, options)\n    if (record.Ctor) {\n      if (version[1] < 2) {\n        // preserve pre 2.2 behavior for global mixin handling\n        record.Ctor.extendOptions = options\n      }\n      var newCtor = record.Ctor.super.extend(options)\n      // prevent record.options._Ctor from being overwritten accidentally\n      newCtor.options._Ctor = record.options._Ctor\n      record.Ctor.options = newCtor.options\n      record.Ctor.cid = newCtor.cid\n      record.Ctor.prototype = newCtor.prototype\n      if (newCtor.release) {\n        // temporary global mixin strategy used in < 2.0.0-alpha.6\n        newCtor.release()\n      }\n    } else {\n      updateOptions(record.options, options)\n    }\n  }\n  record.instances.slice().forEach(function (instance) {\n    if (instance.$vnode && instance.$vnode.context) {\n      instance.$vnode.context.$forceUpdate()\n    } else {\n      console.warn(\n        'Root or manually mounted instance modified. Full reload required.'\n      )\n    }\n  })\n})\n\n// 2.6 optimizes template-compiled scoped slots and skips updates if child\n// only uses scoped slots. We need to patch the scoped slots resolving helper\n// to temporarily mark all scoped slots as unstable in order to force child\n// updates.\nfunction patchScopedSlots (instance) {\n  if (!instance._u) { return }\n  // https://github.com/vuejs/vue/blob/dev/src/core/instance/render-helpers/resolve-scoped-slots.js\n  var original = instance._u\n  instance._u = function (slots) {\n    try {\n      // 2.6.4 ~ 2.6.6\n      return original(slots, true)\n    } catch (e) {\n      // 2.5 / >= 2.6.7\n      return original(slots, null, true)\n    }\n  }\n  return function () {\n    instance._u = original\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWhvdC1yZWxvYWQtYXBpQDIuMy40QHZ1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzP2Q1NDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIFZ1ZSAvLyBsYXRlIGJpbmRcbnZhciB2ZXJzaW9uXG52YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdpbmRvdy5fX1ZVRV9IT1RfTUFQX18gPSBtYXBcbn1cbnZhciBpbnN0YWxsZWQgPSBmYWxzZVxudmFyIGlzQnJvd3NlcmlmeSA9IGZhbHNlXG52YXIgaW5pdEhvb2tOYW1lID0gJ2JlZm9yZUNyZWF0ZSdcblxuZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24gKHZ1ZSwgYnJvd3NlcmlmeSkge1xuICBpZiAoaW5zdGFsbGVkKSB7IHJldHVybiB9XG4gIGluc3RhbGxlZCA9IHRydWVcblxuICBWdWUgPSB2dWUuX19lc01vZHVsZSA/IHZ1ZS5kZWZhdWx0IDogdnVlXG4gIHZlcnNpb24gPSBWdWUudmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpXG4gIGlzQnJvd3NlcmlmeSA9IGJyb3dzZXJpZnlcblxuICAvLyBjb21wYXQgd2l0aCA8IDIuMC4wLWFscGhhLjdcbiAgaWYgKFZ1ZS5jb25maWcuX2xpZmVjeWNsZUhvb2tzLmluZGV4T2YoJ2luaXQnKSA+IC0xKSB7XG4gICAgaW5pdEhvb2tOYW1lID0gJ2luaXQnXG4gIH1cblxuICBleHBvcnRzLmNvbXBhdGlibGUgPSB2ZXJzaW9uWzBdID49IDJcbiAgaWYgKCFleHBvcnRzLmNvbXBhdGlibGUpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW0hNUl0gWW91IGFyZSB1c2luZyBhIHZlcnNpb24gb2YgdnVlLWhvdC1yZWxvYWQtYXBpIHRoYXQgaXMgJyArXG4gICAgICAgICdvbmx5IGNvbXBhdGlibGUgd2l0aCBWdWUuanMgY29yZSBeMi4wLjAuJ1xuICAgIClcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlY29yZCBmb3IgYSBob3QgbW9kdWxlLCB3aGljaCBrZWVwcyB0cmFjayBvZiBpdHMgY29uc3RydWN0b3JcbiAqIGFuZCBpbnN0YW5jZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVSZWNvcmQgPSBmdW5jdGlvbiAoaWQsIG9wdGlvbnMpIHtcbiAgaWYobWFwW2lkXSkgeyByZXR1cm4gfVxuXG4gIHZhciBDdG9yID0gbnVsbFxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBDdG9yID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnNcbiAgfVxuICBtYWtlT3B0aW9uc0hvdChpZCwgb3B0aW9ucylcbiAgbWFwW2lkXSA9IHtcbiAgICBDdG9yOiBDdG9yLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgaW5zdGFuY2VzOiBbXVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgbW9kdWxlIGlzIHJlY29yZGVkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKi9cblxuZXhwb3J0cy5pc1JlY29yZGVkID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgbWFwW2lkXSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuLyoqXG4gKiBNYWtlIGEgQ29tcG9uZW50IG9wdGlvbnMgb2JqZWN0IGhvdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZnVuY3Rpb24gbWFrZU9wdGlvbnNIb3QoaWQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgIHZhciByZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gKGgsIGN0eCkge1xuICAgICAgdmFyIGluc3RhbmNlcyA9IG1hcFtpZF0uaW5zdGFuY2VzXG4gICAgICBpZiAoY3R4ICYmIGluc3RhbmNlcy5pbmRleE9mKGN0eC5wYXJlbnQpIDwgMCkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaChjdHgucGFyZW50KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbmRlcihoLCBjdHgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGluamVjdEhvb2sob3B0aW9ucywgaW5pdEhvb2tOYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWNvcmQgPSBtYXBbaWRdXG4gICAgICBpZiAoIXJlY29yZC5DdG9yKSB7XG4gICAgICAgIHJlY29yZC5DdG9yID0gdGhpcy5jb25zdHJ1Y3RvclxuICAgICAgfVxuICAgICAgcmVjb3JkLmluc3RhbmNlcy5wdXNoKHRoaXMpXG4gICAgfSlcbiAgICBpbmplY3RIb29rKG9wdGlvbnMsICdiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaW5zdGFuY2VzID0gbWFwW2lkXS5pbnN0YW5jZXNcbiAgICAgIGluc3RhbmNlcy5zcGxpY2UoaW5zdGFuY2VzLmluZGV4T2YodGhpcyksIDEpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdCBhIGhvb2sgdG8gYSBob3QgcmVsb2FkYWJsZSBjb21wb25lbnQgc28gdGhhdFxuICogd2UgY2FuIGtlZXAgdHJhY2sgb2YgaXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBob29rXG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0SG9vayhvcHRpb25zLCBuYW1lLCBob29rKSB7XG4gIHZhciBleGlzdGluZyA9IG9wdGlvbnNbbmFtZV1cbiAgb3B0aW9uc1tuYW1lXSA9IGV4aXN0aW5nXG4gICAgPyBBcnJheS5pc0FycmF5KGV4aXN0aW5nKSA/IGV4aXN0aW5nLmNvbmNhdChob29rKSA6IFtleGlzdGluZywgaG9va11cbiAgICA6IFtob29rXVxufVxuXG5mdW5jdGlvbiB0cnlXcmFwKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaWQsIGFyZykge1xuICAgIHRyeSB7XG4gICAgICBmbihpZCwgYXJnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBWdWUgY29tcG9uZW50IGhvdC1yZWxvYWQuIEZ1bGwgcmVsb2FkIHJlcXVpcmVkLidcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyAob2xkT3B0aW9ucywgbmV3T3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb2xkT3B0aW9ucykge1xuICAgIGlmICghKGtleSBpbiBuZXdPcHRpb25zKSkge1xuICAgICAgZGVsZXRlIG9sZE9wdGlvbnNba2V5XVxuICAgIH1cbiAgfVxuICBmb3IgKHZhciBrZXkkMSBpbiBuZXdPcHRpb25zKSB7XG4gICAgb2xkT3B0aW9uc1trZXkkMV0gPSBuZXdPcHRpb25zW2tleSQxXVxuICB9XG59XG5cbmV4cG9ydHMucmVyZW5kZXIgPSB0cnlXcmFwKGZ1bmN0aW9uIChpZCwgb3B0aW9ucykge1xuICB2YXIgcmVjb3JkID0gbWFwW2lkXVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLiRmb3JjZVVwZGF0ZSgpXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucy5vcHRpb25zXG4gIH1cbiAgaWYgKHJlY29yZC5DdG9yKSB7XG4gICAgcmVjb3JkLkN0b3Iub3B0aW9ucy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgIHJlY29yZC5DdG9yLm9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNcbiAgICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLiRvcHRpb25zLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBpbnN0YW5jZS4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZuc1xuICAgICAgLy8gcmVzZXQgc3RhdGljIHRyZWVzXG4gICAgICAvLyBwcmUgMi41LCBhbGwgc3RhdGljIHRyZWVzIGFyZSBjYWNoZWQgdG9nZXRoZXIgb24gdGhlIGluc3RhbmNlXG4gICAgICBpZiAoaW5zdGFuY2UuX3N0YXRpY1RyZWVzKSB7XG4gICAgICAgIGluc3RhbmNlLl9zdGF0aWNUcmVlcyA9IFtdXG4gICAgICB9XG4gICAgICAvLyAyLjUuMFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkLkN0b3Iub3B0aW9ucy5jYWNoZWQpKSB7XG4gICAgICAgIHJlY29yZC5DdG9yLm9wdGlvbnMuY2FjaGVkID0gW11cbiAgICAgIH1cbiAgICAgIC8vIDIuNS4zXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnN0YW5jZS4kb3B0aW9ucy5jYWNoZWQpKSB7XG4gICAgICAgIGluc3RhbmNlLiRvcHRpb25zLmNhY2hlZCA9IFtdXG4gICAgICB9XG5cbiAgICAgIC8vIHBvc3QgMi41LjQ6IHYtb25jZSB0cmVlcyBhcmUgY2FjaGVkIG9uIGluc3RhbmNlLl9zdGF0aWNUcmVlcy5cbiAgICAgIC8vIFB1cmUgc3RhdGljIHRyZWVzIGFyZSBjYWNoZWQgb24gdGhlIHN0YXRpY1JlbmRlckZucyBhcnJheVxuICAgICAgLy8gKGJvdGggYWxyZWFkeSByZXNldCBhYm92ZSlcblxuICAgICAgLy8gMi42OiB0ZW1wb3JhcmlseSBtYXJrIHJlbmRlcmVkIHNjb3BlZCBzbG90cyBhcyB1bnN0YWJsZSBzbyB0aGF0XG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzIGNhbiBiZSBmb3JjZWQgdG8gdXBkYXRlXG4gICAgICB2YXIgcmVzdG9yZSA9IHBhdGNoU2NvcGVkU2xvdHMoaW5zdGFuY2UpXG4gICAgICBpbnN0YW5jZS4kZm9yY2VVcGRhdGUoKVxuICAgICAgaW5zdGFuY2UuJG5leHRUaWNrKHJlc3RvcmUpXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBmdW5jdGlvbmFsIG9yIG5vIGluc3RhbmNlIGNyZWF0ZWQgeWV0XG4gICAgcmVjb3JkLm9wdGlvbnMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICByZWNvcmQub3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZuc1xuXG4gICAgLy8gaGFuZGxlIGZ1bmN0aW9uYWwgY29tcG9uZW50IHJlLXJlbmRlclxuICAgIGlmIChyZWNvcmQub3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyByZXJlbmRlciB3aXRoIGZ1bGwgb3B0aW9uc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdXBkYXRlT3B0aW9ucyhyZWNvcmQub3B0aW9ucywgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRlbXBsYXRlLW9ubHkgcmVyZW5kZXIuXG4gICAgICAgIC8vIG5lZWQgdG8gaW5qZWN0IHRoZSBzdHlsZSBpbmplY3Rpb24gY29kZSBmb3IgQ1NTIG1vZHVsZXNcbiAgICAgICAgLy8gdG8gd29yayBwcm9wZXJseS5cbiAgICAgICAgdmFyIGluamVjdFN0eWxlcyA9IHJlY29yZC5vcHRpb25zLl9pbmplY3RTdHlsZXNcbiAgICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICAgIHZhciByZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgICAgIHJlY29yZC5vcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIChoLCBjdHgpIHtcbiAgICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKGN0eClcbiAgICAgICAgICAgIHJldHVybiByZW5kZXIoaCwgY3R4KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVjb3JkLm9wdGlvbnMuX0N0b3IgPSBudWxsXG4gICAgICAvLyAyLjUuM1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkLm9wdGlvbnMuY2FjaGVkKSkge1xuICAgICAgICByZWNvcmQub3B0aW9ucy5jYWNoZWQgPSBbXVxuICAgICAgfVxuICAgICAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLiRmb3JjZVVwZGF0ZSgpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcblxuZXhwb3J0cy5yZWxvYWQgPSB0cnlXcmFwKGZ1bmN0aW9uIChpZCwgb3B0aW9ucykge1xuICB2YXIgcmVjb3JkID0gbWFwW2lkXVxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMub3B0aW9uc1xuICAgIH1cbiAgICBtYWtlT3B0aW9uc0hvdChpZCwgb3B0aW9ucylcbiAgICBpZiAocmVjb3JkLkN0b3IpIHtcbiAgICAgIGlmICh2ZXJzaW9uWzFdIDwgMikge1xuICAgICAgICAvLyBwcmVzZXJ2ZSBwcmUgMi4yIGJlaGF2aW9yIGZvciBnbG9iYWwgbWl4aW4gaGFuZGxpbmdcbiAgICAgICAgcmVjb3JkLkN0b3IuZXh0ZW5kT3B0aW9ucyA9IG9wdGlvbnNcbiAgICAgIH1cbiAgICAgIHZhciBuZXdDdG9yID0gcmVjb3JkLkN0b3Iuc3VwZXIuZXh0ZW5kKG9wdGlvbnMpXG4gICAgICAvLyBwcmV2ZW50IHJlY29yZC5vcHRpb25zLl9DdG9yIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gYWNjaWRlbnRhbGx5XG4gICAgICBuZXdDdG9yLm9wdGlvbnMuX0N0b3IgPSByZWNvcmQub3B0aW9ucy5fQ3RvclxuICAgICAgcmVjb3JkLkN0b3Iub3B0aW9ucyA9IG5ld0N0b3Iub3B0aW9uc1xuICAgICAgcmVjb3JkLkN0b3IuY2lkID0gbmV3Q3Rvci5jaWRcbiAgICAgIHJlY29yZC5DdG9yLnByb3RvdHlwZSA9IG5ld0N0b3IucHJvdG90eXBlXG4gICAgICBpZiAobmV3Q3Rvci5yZWxlYXNlKSB7XG4gICAgICAgIC8vIHRlbXBvcmFyeSBnbG9iYWwgbWl4aW4gc3RyYXRlZ3kgdXNlZCBpbiA8IDIuMC4wLWFscGhhLjZcbiAgICAgICAgbmV3Q3Rvci5yZWxlYXNlKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlT3B0aW9ucyhyZWNvcmQub3B0aW9ucywgb3B0aW9ucylcbiAgICB9XG4gIH1cbiAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLiR2bm9kZSAmJiBpbnN0YW5jZS4kdm5vZGUuY29udGV4dCkge1xuICAgICAgaW5zdGFuY2UuJHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUm9vdCBvciBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlIG1vZGlmaWVkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4nXG4gICAgICApXG4gICAgfVxuICB9KVxufSlcblxuLy8gMi42IG9wdGltaXplcyB0ZW1wbGF0ZS1jb21waWxlZCBzY29wZWQgc2xvdHMgYW5kIHNraXBzIHVwZGF0ZXMgaWYgY2hpbGRcbi8vIG9ubHkgdXNlcyBzY29wZWQgc2xvdHMuIFdlIG5lZWQgdG8gcGF0Y2ggdGhlIHNjb3BlZCBzbG90cyByZXNvbHZpbmcgaGVscGVyXG4vLyB0byB0ZW1wb3JhcmlseSBtYXJrIGFsbCBzY29wZWQgc2xvdHMgYXMgdW5zdGFibGUgaW4gb3JkZXIgdG8gZm9yY2UgY2hpbGRcbi8vIHVwZGF0ZXMuXG5mdW5jdGlvbiBwYXRjaFNjb3BlZFNsb3RzIChpbnN0YW5jZSkge1xuICBpZiAoIWluc3RhbmNlLl91KSB7IHJldHVybiB9XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvYmxvYi9kZXYvc3JjL2NvcmUvaW5zdGFuY2UvcmVuZGVyLWhlbHBlcnMvcmVzb2x2ZS1zY29wZWQtc2xvdHMuanNcbiAgdmFyIG9yaWdpbmFsID0gaW5zdGFuY2UuX3VcbiAgaW5zdGFuY2UuX3UgPSBmdW5jdGlvbiAoc2xvdHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gMi42LjQgfiAyLjYuNlxuICAgICAgcmV0dXJuIG9yaWdpbmFsKHNsb3RzLCB0cnVlKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIDIuNSAvID49IDIuNi43XG4gICAgICByZXR1cm4gb3JpZ2luYWwoc2xvdHMsIG51bGwsIHRydWUpXG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaW5zdGFuY2UuX3UgPSBvcmlnaW5hbFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\n");

/***/ }),

/***/ "./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js":
/*!*********************************************************************!*\
  !*** ./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js ***!
  \*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/*!\n * vue-i18n v8.15.0 \n * (c) 2019 kazuya kawaguchi\n * Released under the MIT License.\n */\n/*  */\n\n/**\n * constants\n */\n\nvar numberFormatKeys = [\n  'style',\n  'currency',\n  'currencyDisplay',\n  'useGrouping',\n  'minimumIntegerDigits',\n  'minimumFractionDigits',\n  'maximumFractionDigits',\n  'minimumSignificantDigits',\n  'maximumSignificantDigits',\n  'localeMatcher',\n  'formatMatcher'\n];\n\n/**\n * utilities\n */\n\nfunction warn (msg, err) {\n  if (typeof console !== 'undefined') {\n    console.warn('[vue-i18n] ' + msg);\n    /* istanbul ignore if */\n    if (err) {\n      console.warn(err.stack);\n    }\n  }\n}\n\nfunction error (msg, err) {\n  if (typeof console !== 'undefined') {\n    console.error('[vue-i18n] ' + msg);\n    /* istanbul ignore if */\n    if (err) {\n      console.error(err.stack);\n    }\n  }\n}\n\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\nvar toString = Object.prototype.toString;\nvar OBJECT_STRING = '[object Object]';\nfunction isPlainObject (obj) {\n  return toString.call(obj) === OBJECT_STRING\n}\n\nfunction isNull (val) {\n  return val === null || val === undefined\n}\n\nfunction parseArgs () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  var locale = null;\n  var params = null;\n  if (args.length === 1) {\n    if (isObject(args[0]) || Array.isArray(args[0])) {\n      params = args[0];\n    } else if (typeof args[0] === 'string') {\n      locale = args[0];\n    }\n  } else if (args.length === 2) {\n    if (typeof args[0] === 'string') {\n      locale = args[0];\n    }\n    /* istanbul ignore if */\n    if (isObject(args[1]) || Array.isArray(args[1])) {\n      params = args[1];\n    }\n  }\n\n  return { locale: locale, params: params }\n}\n\nfunction looseClone (obj) {\n  return JSON.parse(JSON.stringify(obj))\n}\n\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\nfunction merge (target) {\n  var arguments$1 = arguments;\n\n  var output = Object(target);\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments$1[i];\n    if (source !== undefined && source !== null) {\n      var key = (void 0);\n      for (key in source) {\n        if (hasOwn(source, key)) {\n          if (isObject(source[key])) {\n            output[key] = merge(output[key], source[key]);\n          } else {\n            output[key] = source[key];\n          }\n        }\n      }\n    }\n  }\n  return output\n}\n\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/*  */\n\nfunction extend (Vue) {\n  if (!Vue.prototype.hasOwnProperty('$i18n')) {\n    // $FlowFixMe\n    Object.defineProperty(Vue.prototype, '$i18n', {\n      get: function get () { return this._i18n }\n    });\n  }\n\n  Vue.prototype.$t = function (key) {\n    var values = [], len = arguments.length - 1;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n    var i18n = this.$i18n;\n    return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))\n  };\n\n  Vue.prototype.$tc = function (key, choice) {\n    var values = [], len = arguments.length - 2;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n\n    var i18n = this.$i18n;\n    return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values ))\n  };\n\n  Vue.prototype.$te = function (key, locale) {\n    var i18n = this.$i18n;\n    return i18n._te(key, i18n.locale, i18n._getMessages(), locale)\n  };\n\n  Vue.prototype.$d = function (value) {\n    var ref;\n\n    var args = [], len = arguments.length - 1;\n    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n    return (ref = this.$i18n).d.apply(ref, [ value ].concat( args ))\n  };\n\n  Vue.prototype.$n = function (value) {\n    var ref;\n\n    var args = [], len = arguments.length - 1;\n    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n    return (ref = this.$i18n).n.apply(ref, [ value ].concat( args ))\n  };\n}\n\n/*  */\n\nvar mixin = {\n  beforeCreate: function beforeCreate () {\n    var options = this.$options;\n    options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n    if (options.i18n) {\n      if (options.i18n instanceof VueI18n) {\n        // init locale messages via custom blocks\n        if (options.__i18n) {\n          try {\n            var localeMessages = {};\n            options.__i18n.forEach(function (resource) {\n              localeMessages = merge(localeMessages, JSON.parse(resource));\n            });\n            Object.keys(localeMessages).forEach(function (locale) {\n              options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);\n            });\n          } catch (e) {\n            if (true) {\n              warn(\"Cannot parse locale messages via custom blocks.\", e);\n            }\n          }\n        }\n        this._i18n = options.i18n;\n        this._i18nWatcher = this._i18n.watchI18nData();\n      } else if (isPlainObject(options.i18n)) {\n        // component local i18n\n        if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n          options.i18n.root = this.$root;\n          options.i18n.formatter = this.$root.$i18n.formatter;\n          options.i18n.fallbackLocale = this.$root.$i18n.fallbackLocale;\n          options.i18n.formatFallbackMessages = this.$root.$i18n.formatFallbackMessages;\n          options.i18n.silentTranslationWarn = this.$root.$i18n.silentTranslationWarn;\n          options.i18n.silentFallbackWarn = this.$root.$i18n.silentFallbackWarn;\n          options.i18n.pluralizationRules = this.$root.$i18n.pluralizationRules;\n          options.i18n.preserveDirectiveContent = this.$root.$i18n.preserveDirectiveContent;\n        }\n\n        // init locale messages via custom blocks\n        if (options.__i18n) {\n          try {\n            var localeMessages$1 = {};\n            options.__i18n.forEach(function (resource) {\n              localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));\n            });\n            options.i18n.messages = localeMessages$1;\n          } catch (e) {\n            if (true) {\n              warn(\"Cannot parse locale messages via custom blocks.\", e);\n            }\n          }\n        }\n\n        var ref = options.i18n;\n        var sharedMessages = ref.sharedMessages;\n        if (sharedMessages && isPlainObject(sharedMessages)) {\n          options.i18n.messages = merge(options.i18n.messages, sharedMessages);\n        }\n\n        this._i18n = new VueI18n(options.i18n);\n        this._i18nWatcher = this._i18n.watchI18nData();\n\n        if (options.i18n.sync === undefined || !!options.i18n.sync) {\n          this._localeWatcher = this.$i18n.watchLocale();\n        }\n      } else {\n        if (true) {\n          warn(\"Cannot be interpreted 'i18n' option.\");\n        }\n      }\n    } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n      // root i18n\n      this._i18n = this.$root.$i18n;\n    } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n      // parent i18n\n      this._i18n = options.parent.$i18n;\n    }\n  },\n\n  beforeMount: function beforeMount () {\n    var options = this.$options;\n    options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n    if (options.i18n) {\n      if (options.i18n instanceof VueI18n) {\n        // init locale messages via custom blocks\n        this._i18n.subscribeDataChanging(this);\n        this._subscribing = true;\n      } else if (isPlainObject(options.i18n)) {\n        this._i18n.subscribeDataChanging(this);\n        this._subscribing = true;\n      } else {\n        if (true) {\n          warn(\"Cannot be interpreted 'i18n' option.\");\n        }\n      }\n    } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n      this._i18n.subscribeDataChanging(this);\n      this._subscribing = true;\n    } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n      this._i18n.subscribeDataChanging(this);\n      this._subscribing = true;\n    }\n  },\n\n  beforeDestroy: function beforeDestroy () {\n    if (!this._i18n) { return }\n\n    var self = this;\n    this.$nextTick(function () {\n      if (self._subscribing) {\n        self._i18n.unsubscribeDataChanging(self);\n        delete self._subscribing;\n      }\n\n      if (self._i18nWatcher) {\n        self._i18nWatcher();\n        self._i18n.destroyVM();\n        delete self._i18nWatcher;\n      }\n\n      if (self._localeWatcher) {\n        self._localeWatcher();\n        delete self._localeWatcher;\n      }\n\n      self._i18n = null;\n    });\n  }\n};\n\n/*  */\n\nvar interpolationComponent = {\n  name: 'i18n',\n  functional: true,\n  props: {\n    tag: {\n      type: String\n    },\n    path: {\n      type: String,\n      required: true\n    },\n    locale: {\n      type: String\n    },\n    places: {\n      type: [Array, Object]\n    }\n  },\n  render: function render (h, ref) {\n    var data = ref.data;\n    var parent = ref.parent;\n    var props = ref.props;\n    var slots = ref.slots;\n\n    var $i18n = parent.$i18n;\n    if (!$i18n) {\n      if (true) {\n        warn('Cannot find VueI18n instance!');\n      }\n      return\n    }\n\n    var path = props.path;\n    var locale = props.locale;\n    var places = props.places;\n    var params = slots();\n    var children = $i18n.i(\n      path,\n      locale,\n      onlyHasDefaultPlace(params) || places\n        ? useLegacyPlaces(params.default, places)\n        : params\n    );\n\n    var tag = props.tag || 'span';\n    return tag ? h(tag, data, children) : children\n  }\n};\n\nfunction onlyHasDefaultPlace (params) {\n  var prop;\n  for (prop in params) {\n    if (prop !== 'default') { return false }\n  }\n  return Boolean(prop)\n}\n\nfunction useLegacyPlaces (children, places) {\n  var params = places ? createParamsFromPlaces(places) : {};\n\n  if (!children) { return params }\n\n  // Filter empty text nodes\n  children = children.filter(function (child) {\n    return child.tag || child.text.trim() !== ''\n  });\n\n  var everyPlace = children.every(vnodeHasPlaceAttribute);\n  if ( true && everyPlace) {\n    warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.');\n  }\n\n  return children.reduce(\n    everyPlace ? assignChildPlace : assignChildIndex,\n    params\n  )\n}\n\nfunction createParamsFromPlaces (places) {\n  if (true) {\n    warn('`places` prop is deprecated in next major version. Please switch to Vue slots.');\n  }\n\n  return Array.isArray(places)\n    ? places.reduce(assignChildIndex, {})\n    : Object.assign({}, places)\n}\n\nfunction assignChildPlace (params, child) {\n  if (child.data && child.data.attrs && child.data.attrs.place) {\n    params[child.data.attrs.place] = child;\n  }\n  return params\n}\n\nfunction assignChildIndex (params, child, index) {\n  params[index] = child;\n  return params\n}\n\nfunction vnodeHasPlaceAttribute (vnode) {\n  return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place)\n}\n\n/*  */\n\nvar numberComponent = {\n  name: 'i18n-n',\n  functional: true,\n  props: {\n    tag: {\n      type: String,\n      default: 'span'\n    },\n    value: {\n      type: Number,\n      required: true\n    },\n    format: {\n      type: [String, Object]\n    },\n    locale: {\n      type: String\n    }\n  },\n  render: function render (h, ref) {\n    var props = ref.props;\n    var parent = ref.parent;\n    var data = ref.data;\n\n    var i18n = parent.$i18n;\n\n    if (!i18n) {\n      if (true) {\n        warn('Cannot find VueI18n instance!');\n      }\n      return null\n    }\n\n    var key = null;\n    var options = null;\n\n    if (typeof props.format === 'string') {\n      key = props.format;\n    } else if (isObject(props.format)) {\n      if (props.format.key) {\n        key = props.format.key;\n      }\n\n      // Filter out number format options only\n      options = Object.keys(props.format).reduce(function (acc, prop) {\n        var obj;\n\n        if (numberFormatKeys.includes(prop)) {\n          return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj ))\n        }\n        return acc\n      }, null);\n    }\n\n    var locale = props.locale || i18n.locale;\n    var parts = i18n._ntp(props.value, locale, key, options);\n\n    var values = parts.map(function (part, index) {\n      var obj;\n\n      var slot = data.scopedSlots && data.scopedSlots[part.type];\n      return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value\n    });\n\n    return h(props.tag, {\n      attrs: data.attrs,\n      'class': data['class'],\n      staticClass: data.staticClass\n    }, values)\n  }\n};\n\n/*  */\n\nfunction bind (el, binding, vnode) {\n  if (!assert(el, vnode)) { return }\n\n  t(el, binding, vnode);\n}\n\nfunction update (el, binding, vnode, oldVNode) {\n  if (!assert(el, vnode)) { return }\n\n  var i18n = vnode.context.$i18n;\n  if (localeEqual(el, vnode) &&\n    (looseEqual(binding.value, binding.oldValue) &&\n     looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return }\n\n  t(el, binding, vnode);\n}\n\nfunction unbind (el, binding, vnode, oldVNode) {\n  var vm = vnode.context;\n  if (!vm) {\n    warn('Vue instance does not exists in VNode context');\n    return\n  }\n\n  var i18n = vnode.context.$i18n || {};\n  if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {\n    el.textContent = '';\n  }\n  el._vt = undefined;\n  delete el['_vt'];\n  el._locale = undefined;\n  delete el['_locale'];\n  el._localeMessage = undefined;\n  delete el['_localeMessage'];\n}\n\nfunction assert (el, vnode) {\n  var vm = vnode.context;\n  if (!vm) {\n    warn('Vue instance does not exists in VNode context');\n    return false\n  }\n\n  if (!vm.$i18n) {\n    warn('VueI18n instance does not exists in Vue instance');\n    return false\n  }\n\n  return true\n}\n\nfunction localeEqual (el, vnode) {\n  var vm = vnode.context;\n  return el._locale === vm.$i18n.locale\n}\n\nfunction t (el, binding, vnode) {\n  var ref$1, ref$2;\n\n  var value = binding.value;\n\n  var ref = parseValue(value);\n  var path = ref.path;\n  var locale = ref.locale;\n  var args = ref.args;\n  var choice = ref.choice;\n  if (!path && !locale && !args) {\n    warn('value type not supported');\n    return\n  }\n\n  if (!path) {\n    warn('`path` is required in v-t directive');\n    return\n  }\n\n  var vm = vnode.context;\n  if (choice) {\n    el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) ));\n  } else {\n    el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) ));\n  }\n  el._locale = vm.$i18n.locale;\n  el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);\n}\n\nfunction parseValue (value) {\n  var path;\n  var locale;\n  var args;\n  var choice;\n\n  if (typeof value === 'string') {\n    path = value;\n  } else if (isPlainObject(value)) {\n    path = value.path;\n    locale = value.locale;\n    args = value.args;\n    choice = value.choice;\n  }\n\n  return { path: path, locale: locale, args: args, choice: choice }\n}\n\nfunction makeParams (locale, args) {\n  var params = [];\n\n  locale && params.push(locale);\n  if (args && (Array.isArray(args) || isPlainObject(args))) {\n    params.push(args);\n  }\n\n  return params\n}\n\nvar Vue;\n\nfunction install (_Vue) {\n  /* istanbul ignore if */\n  if ( true && install.installed && _Vue === Vue) {\n    warn('already installed.');\n    return\n  }\n  install.installed = true;\n\n  Vue = _Vue;\n\n  var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;\n  /* istanbul ignore if */\n  if ( true && version < 2) {\n    warn((\"vue-i18n (\" + (install.version) + \") need to use Vue 2.0 or later (Vue: \" + (Vue.version) + \").\"));\n    return\n  }\n\n  extend(Vue);\n  Vue.mixin(mixin);\n  Vue.directive('t', { bind: bind, update: update, unbind: unbind });\n  Vue.component(interpolationComponent.name, interpolationComponent);\n  Vue.component(numberComponent.name, numberComponent);\n\n  // use simple mergeStrategies to prevent i18n instance lose '__proto__'\n  var strats = Vue.config.optionMergeStrategies;\n  strats.i18n = function (parentVal, childVal) {\n    return childVal === undefined\n      ? parentVal\n      : childVal\n  };\n}\n\n/*  */\n\nvar BaseFormatter = function BaseFormatter () {\n  this._caches = Object.create(null);\n};\n\nBaseFormatter.prototype.interpolate = function interpolate (message, values) {\n  if (!values) {\n    return [message]\n  }\n  var tokens = this._caches[message];\n  if (!tokens) {\n    tokens = parse(message);\n    this._caches[message] = tokens;\n  }\n  return compile(tokens, values)\n};\n\n\n\nvar RE_TOKEN_LIST_VALUE = /^(?:\\d)+/;\nvar RE_TOKEN_NAMED_VALUE = /^(?:\\w)+/;\n\nfunction parse (format) {\n  var tokens = [];\n  var position = 0;\n\n  var text = '';\n  while (position < format.length) {\n    var char = format[position++];\n    if (char === '{') {\n      if (text) {\n        tokens.push({ type: 'text', value: text });\n      }\n\n      text = '';\n      var sub = '';\n      char = format[position++];\n      while (char !== undefined && char !== '}') {\n        sub += char;\n        char = format[position++];\n      }\n      var isClosed = char === '}';\n\n      var type = RE_TOKEN_LIST_VALUE.test(sub)\n        ? 'list'\n        : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)\n          ? 'named'\n          : 'unknown';\n      tokens.push({ value: sub, type: type });\n    } else if (char === '%') {\n      // when found rails i18n syntax, skip text capture\n      if (format[(position)] !== '{') {\n        text += char;\n      }\n    } else {\n      text += char;\n    }\n  }\n\n  text && tokens.push({ type: 'text', value: text });\n\n  return tokens\n}\n\nfunction compile (tokens, values) {\n  var compiled = [];\n  var index = 0;\n\n  var mode = Array.isArray(values)\n    ? 'list'\n    : isObject(values)\n      ? 'named'\n      : 'unknown';\n  if (mode === 'unknown') { return compiled }\n\n  while (index < tokens.length) {\n    var token = tokens[index];\n    switch (token.type) {\n      case 'text':\n        compiled.push(token.value);\n        break\n      case 'list':\n        compiled.push(values[parseInt(token.value, 10)]);\n        break\n      case 'named':\n        if (mode === 'named') {\n          compiled.push((values)[token.value]);\n        } else {\n          if (true) {\n            warn((\"Type of token '\" + (token.type) + \"' and format of value '\" + mode + \"' don't match!\"));\n          }\n        }\n        break\n      case 'unknown':\n        if (true) {\n          warn(\"Detect 'unknown' type of token!\");\n        }\n        break\n    }\n    index++;\n  }\n\n  return compiled\n}\n\n/*  */\n\n/**\n *  Path parser\n *  - Inspired:\n *    Vue.js Path parser\n */\n\n// actions\nvar APPEND = 0;\nvar PUSH = 1;\nvar INC_SUB_PATH_DEPTH = 2;\nvar PUSH_SUB_PATH = 3;\n\n// states\nvar BEFORE_PATH = 0;\nvar IN_PATH = 1;\nvar BEFORE_IDENT = 2;\nvar IN_IDENT = 3;\nvar IN_SUB_PATH = 4;\nvar IN_SINGLE_QUOTE = 5;\nvar IN_DOUBLE_QUOTE = 6;\nvar AFTER_PATH = 7;\nvar ERROR = 8;\n\nvar pathStateMachine = [];\n\npathStateMachine[BEFORE_PATH] = {\n  'ws': [BEFORE_PATH],\n  'ident': [IN_IDENT, APPEND],\n  '[': [IN_SUB_PATH],\n  'eof': [AFTER_PATH]\n};\n\npathStateMachine[IN_PATH] = {\n  'ws': [IN_PATH],\n  '.': [BEFORE_IDENT],\n  '[': [IN_SUB_PATH],\n  'eof': [AFTER_PATH]\n};\n\npathStateMachine[BEFORE_IDENT] = {\n  'ws': [BEFORE_IDENT],\n  'ident': [IN_IDENT, APPEND],\n  '0': [IN_IDENT, APPEND],\n  'number': [IN_IDENT, APPEND]\n};\n\npathStateMachine[IN_IDENT] = {\n  'ident': [IN_IDENT, APPEND],\n  '0': [IN_IDENT, APPEND],\n  'number': [IN_IDENT, APPEND],\n  'ws': [IN_PATH, PUSH],\n  '.': [BEFORE_IDENT, PUSH],\n  '[': [IN_SUB_PATH, PUSH],\n  'eof': [AFTER_PATH, PUSH]\n};\n\npathStateMachine[IN_SUB_PATH] = {\n  \"'\": [IN_SINGLE_QUOTE, APPEND],\n  '\"': [IN_DOUBLE_QUOTE, APPEND],\n  '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n  ']': [IN_PATH, PUSH_SUB_PATH],\n  'eof': ERROR,\n  'else': [IN_SUB_PATH, APPEND]\n};\n\npathStateMachine[IN_SINGLE_QUOTE] = {\n  \"'\": [IN_SUB_PATH, APPEND],\n  'eof': ERROR,\n  'else': [IN_SINGLE_QUOTE, APPEND]\n};\n\npathStateMachine[IN_DOUBLE_QUOTE] = {\n  '\"': [IN_SUB_PATH, APPEND],\n  'eof': ERROR,\n  'else': [IN_DOUBLE_QUOTE, APPEND]\n};\n\n/**\n * Check if an expression is a literal value.\n */\n\nvar literalValueRE = /^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;\nfunction isLiteral (exp) {\n  return literalValueRE.test(exp)\n}\n\n/**\n * Strip quotes from a string\n */\n\nfunction stripQuotes (str) {\n  var a = str.charCodeAt(0);\n  var b = str.charCodeAt(str.length - 1);\n  return a === b && (a === 0x22 || a === 0x27)\n    ? str.slice(1, -1)\n    : str\n}\n\n/**\n * Determine the type of a character in a keypath.\n */\n\nfunction getPathCharType (ch) {\n  if (ch === undefined || ch === null) { return 'eof' }\n\n  var code = ch.charCodeAt(0);\n\n  switch (code) {\n    case 0x5B: // [\n    case 0x5D: // ]\n    case 0x2E: // .\n    case 0x22: // \"\n    case 0x27: // '\n      return ch\n\n    case 0x5F: // _\n    case 0x24: // $\n    case 0x2D: // -\n      return 'ident'\n\n    case 0x09: // Tab\n    case 0x0A: // Newline\n    case 0x0D: // Return\n    case 0xA0:  // No-break space\n    case 0xFEFF:  // Byte Order Mark\n    case 0x2028:  // Line Separator\n    case 0x2029:  // Paragraph Separator\n      return 'ws'\n  }\n\n  return 'ident'\n}\n\n/**\n * Format a subPath, return its plain form if it is\n * a literal string or number. Otherwise prepend the\n * dynamic indicator (*).\n */\n\nfunction formatSubPath (path) {\n  var trimmed = path.trim();\n  // invalid leading 0\n  if (path.charAt(0) === '0' && isNaN(path)) { return false }\n\n  return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed\n}\n\n/**\n * Parse a string path into an array of segments\n */\n\nfunction parse$1 (path) {\n  var keys = [];\n  var index = -1;\n  var mode = BEFORE_PATH;\n  var subPathDepth = 0;\n  var c;\n  var key;\n  var newChar;\n  var type;\n  var transition;\n  var action;\n  var typeMap;\n  var actions = [];\n\n  actions[PUSH] = function () {\n    if (key !== undefined) {\n      keys.push(key);\n      key = undefined;\n    }\n  };\n\n  actions[APPEND] = function () {\n    if (key === undefined) {\n      key = newChar;\n    } else {\n      key += newChar;\n    }\n  };\n\n  actions[INC_SUB_PATH_DEPTH] = function () {\n    actions[APPEND]();\n    subPathDepth++;\n  };\n\n  actions[PUSH_SUB_PATH] = function () {\n    if (subPathDepth > 0) {\n      subPathDepth--;\n      mode = IN_SUB_PATH;\n      actions[APPEND]();\n    } else {\n      subPathDepth = 0;\n      if (key === undefined) { return false }\n      key = formatSubPath(key);\n      if (key === false) {\n        return false\n      } else {\n        actions[PUSH]();\n      }\n    }\n  };\n\n  function maybeUnescapeQuote () {\n    var nextChar = path[index + 1];\n    if ((mode === IN_SINGLE_QUOTE && nextChar === \"'\") ||\n      (mode === IN_DOUBLE_QUOTE && nextChar === '\"')) {\n      index++;\n      newChar = '\\\\' + nextChar;\n      actions[APPEND]();\n      return true\n    }\n  }\n\n  while (mode !== null) {\n    index++;\n    c = path[index];\n\n    if (c === '\\\\' && maybeUnescapeQuote()) {\n      continue\n    }\n\n    type = getPathCharType(c);\n    typeMap = pathStateMachine[mode];\n    transition = typeMap[type] || typeMap['else'] || ERROR;\n\n    if (transition === ERROR) {\n      return // parse error\n    }\n\n    mode = transition[0];\n    action = actions[transition[1]];\n    if (action) {\n      newChar = transition[2];\n      newChar = newChar === undefined\n        ? c\n        : newChar;\n      if (action() === false) {\n        return\n      }\n    }\n\n    if (mode === AFTER_PATH) {\n      return keys\n    }\n  }\n}\n\n\n\n\n\nvar I18nPath = function I18nPath () {\n  this._cache = Object.create(null);\n};\n\n/**\n * External parse that check for a cache hit first\n */\nI18nPath.prototype.parsePath = function parsePath (path) {\n  var hit = this._cache[path];\n  if (!hit) {\n    hit = parse$1(path);\n    if (hit) {\n      this._cache[path] = hit;\n    }\n  }\n  return hit || []\n};\n\n/**\n * Get path value from path string\n */\nI18nPath.prototype.getPathValue = function getPathValue (obj, path) {\n  if (!isObject(obj)) { return null }\n\n  var paths = this.parsePath(path);\n  if (paths.length === 0) {\n    return null\n  } else {\n    var length = paths.length;\n    var last = obj;\n    var i = 0;\n    while (i < length) {\n      var value = last[paths[i]];\n      if (value === undefined) {\n        return null\n      }\n      last = value;\n      i++;\n    }\n\n    return last\n  }\n};\n\n/*  */\n\n\n\nvar htmlTagMatcher = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\nvar linkKeyMatcher = /(?:@(?:\\.[a-z]+)?:(?:[\\w\\-_|.]+|\\([\\w\\-_|.]+\\)))/g;\nvar linkKeyPrefixMatcher = /^@(?:\\.([a-z]+))?:/;\nvar bracketsMatcher = /[()]/g;\nvar defaultModifiers = {\n  'upper': function (str) { return str.toLocaleUpperCase(); },\n  'lower': function (str) { return str.toLocaleLowerCase(); }\n};\n\nvar defaultFormatter = new BaseFormatter();\n\nvar VueI18n = function VueI18n (options) {\n  var this$1 = this;\n  if ( options === void 0 ) options = {};\n\n  // Auto install if it is not done yet and `window` has `Vue`.\n  // To allow users to avoid auto-installation in some cases,\n  // this code should be placed here. See #290\n  /* istanbul ignore if */\n  if (!Vue && typeof window !== 'undefined' && window.Vue) {\n    install(window.Vue);\n  }\n\n  var locale = options.locale || 'en-US';\n  var fallbackLocale = options.fallbackLocale || 'en-US';\n  var messages = options.messages || {};\n  var dateTimeFormats = options.dateTimeFormats || {};\n  var numberFormats = options.numberFormats || {};\n\n  this._vm = null;\n  this._formatter = options.formatter || defaultFormatter;\n  this._modifiers = options.modifiers || {};\n  this._missing = options.missing || null;\n  this._root = options.root || null;\n  this._sync = options.sync === undefined ? true : !!options.sync;\n  this._fallbackRoot = options.fallbackRoot === undefined\n    ? true\n    : !!options.fallbackRoot;\n  this._formatFallbackMessages = options.formatFallbackMessages === undefined\n    ? false\n    : !!options.formatFallbackMessages;\n  this._silentTranslationWarn = options.silentTranslationWarn === undefined\n    ? false\n    : options.silentTranslationWarn;\n  this._silentFallbackWarn = options.silentFallbackWarn === undefined\n    ? false\n    : !!options.silentFallbackWarn;\n  this._dateTimeFormatters = {};\n  this._numberFormatters = {};\n  this._path = new I18nPath();\n  this._dataListeners = [];\n  this._preserveDirectiveContent = options.preserveDirectiveContent === undefined\n    ? false\n    : !!options.preserveDirectiveContent;\n  this.pluralizationRules = options.pluralizationRules || {};\n  this._warnHtmlInMessage = options.warnHtmlInMessage || 'off';\n\n  this._exist = function (message, key) {\n    if (!message || !key) { return false }\n    if (!isNull(this$1._path.getPathValue(message, key))) { return true }\n    // fallback for flat key\n    if (message[key]) { return true }\n    return false\n  };\n\n  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n    Object.keys(messages).forEach(function (locale) {\n      this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n    });\n  }\n\n  this._initVM({\n    locale: locale,\n    fallbackLocale: fallbackLocale,\n    messages: messages,\n    dateTimeFormats: dateTimeFormats,\n    numberFormats: numberFormats\n  });\n};\n\nvar prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true } };\n\nVueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) {\n  var paths = [];\n\n  var fn = function (level, locale, message, paths) {\n    if (isPlainObject(message)) {\n      Object.keys(message).forEach(function (key) {\n        var val = message[key];\n        if (isPlainObject(val)) {\n          paths.push(key);\n          paths.push('.');\n          fn(level, locale, val, paths);\n          paths.pop();\n          paths.pop();\n        } else {\n          paths.push(key);\n          fn(level, locale, val, paths);\n          paths.pop();\n        }\n      });\n    } else if (Array.isArray(message)) {\n      message.forEach(function (item, index) {\n        if (isPlainObject(item)) {\n          paths.push((\"[\" + index + \"]\"));\n          paths.push('.');\n          fn(level, locale, item, paths);\n          paths.pop();\n          paths.pop();\n        } else {\n          paths.push((\"[\" + index + \"]\"));\n          fn(level, locale, item, paths);\n          paths.pop();\n        }\n      });\n    } else if (typeof message === 'string') {\n      var ret = htmlTagMatcher.test(message);\n      if (ret) {\n        var msg = \"Detected HTML in message '\" + message + \"' of keypath '\" + (paths.join('')) + \"' at '\" + locale + \"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp\";\n        if (level === 'warn') {\n          warn(msg);\n        } else if (level === 'error') {\n          error(msg);\n        }\n      }\n    }\n  };\n\n  fn(level, locale, message, paths);\n};\n\nVueI18n.prototype._initVM = function _initVM (data) {\n  var silent = Vue.config.silent;\n  Vue.config.silent = true;\n  this._vm = new Vue({ data: data });\n  Vue.config.silent = silent;\n};\n\nVueI18n.prototype.destroyVM = function destroyVM () {\n  this._vm.$destroy();\n};\n\nVueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) {\n  this._dataListeners.push(vm);\n};\n\nVueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) {\n  remove(this._dataListeners, vm);\n};\n\nVueI18n.prototype.watchI18nData = function watchI18nData () {\n  var self = this;\n  return this._vm.$watch('$data', function () {\n    var i = self._dataListeners.length;\n    while (i--) {\n      Vue.nextTick(function () {\n        self._dataListeners[i] && self._dataListeners[i].$forceUpdate();\n      });\n    }\n  }, { deep: true })\n};\n\nVueI18n.prototype.watchLocale = function watchLocale () {\n  /* istanbul ignore if */\n  if (!this._sync || !this._root) { return null }\n  var target = this._vm;\n  return this._root.$i18n.vm.$watch('locale', function (val) {\n    target.$set(target, 'locale', val);\n    target.$forceUpdate();\n  }, { immediate: true })\n};\n\nprototypeAccessors.vm.get = function () { return this._vm };\n\nprototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) };\nprototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) };\nprototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) };\nprototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() };\n\nprototypeAccessors.locale.get = function () { return this._vm.locale };\nprototypeAccessors.locale.set = function (locale) {\n  this._vm.$set(this._vm, 'locale', locale);\n};\n\nprototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale };\nprototypeAccessors.fallbackLocale.set = function (locale) {\n  this._vm.$set(this._vm, 'fallbackLocale', locale);\n};\n\nprototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages };\nprototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; };\n\nprototypeAccessors.missing.get = function () { return this._missing };\nprototypeAccessors.missing.set = function (handler) { this._missing = handler; };\n\nprototypeAccessors.formatter.get = function () { return this._formatter };\nprototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; };\n\nprototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn };\nprototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; };\n\nprototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn };\nprototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; };\n\nprototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent };\nprototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; };\n\nprototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage };\nprototypeAccessors.warnHtmlInMessage.set = function (level) {\n    var this$1 = this;\n\n  var orgLevel = this._warnHtmlInMessage;\n  this._warnHtmlInMessage = level;\n  if (orgLevel !== level && (level === 'warn' || level === 'error')) {\n    var messages = this._getMessages();\n    Object.keys(messages).forEach(function (locale) {\n      this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n    });\n  }\n};\n\nVueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages };\nVueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats };\nVueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats };\n\nVueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values) {\n  if (!isNull(result)) { return result }\n  if (this._missing) {\n    var missingRet = this._missing.apply(null, [locale, key, vm, values]);\n    if (typeof missingRet === 'string') {\n      return missingRet\n    }\n  } else {\n    if ( true && !this._isSilentTranslationWarn(key)) {\n      warn(\n        \"Cannot translate the value of keypath '\" + key + \"'. \" +\n        'Use the value of keypath as default.'\n      );\n    }\n  }\n\n  if (this._formatFallbackMessages) {\n    var parsedArgs = parseArgs.apply(void 0, values);\n    return this._render(key, 'string', parsedArgs.params, key)\n  } else {\n    return key\n  }\n};\n\nVueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) {\n  return !val && !isNull(this._root) && this._fallbackRoot\n};\n\nVueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) {\n  return this._silentFallbackWarn instanceof RegExp\n    ? this._silentFallbackWarn.test(key)\n    : this._silentFallbackWarn\n};\n\nVueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) {\n  return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale)\n};\n\nVueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) {\n  return this._silentTranslationWarn instanceof RegExp\n    ? this._silentTranslationWarn.test(key)\n    : this._silentTranslationWarn\n};\n\nVueI18n.prototype._interpolate = function _interpolate (\n  locale,\n  message,\n  key,\n  host,\n  interpolateMode,\n  values,\n  visitedLinkStack\n) {\n  if (!message) { return null }\n\n  var pathRet = this._path.getPathValue(message, key);\n  if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet }\n\n  var ret;\n  if (isNull(pathRet)) {\n    /* istanbul ignore else */\n    if (isPlainObject(message)) {\n      ret = message[key];\n      if (typeof ret !== 'string') {\n        if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n          warn((\"Value of key '\" + key + \"' is not a string!\"));\n        }\n        return null\n      }\n    } else {\n      return null\n    }\n  } else {\n    /* istanbul ignore else */\n    if (typeof pathRet === 'string') {\n      ret = pathRet;\n    } else {\n      if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n        warn((\"Value of key '\" + key + \"' is not a string!\"));\n      }\n      return null\n    }\n  }\n\n  // Check for the existence of links within the translated string\n  if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) {\n    ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);\n  }\n\n  return this._render(ret, interpolateMode, values, key)\n};\n\nVueI18n.prototype._link = function _link (\n  locale,\n  message,\n  str,\n  host,\n  interpolateMode,\n  values,\n  visitedLinkStack\n) {\n  var ret = str;\n\n  // Match all the links within the local\n  // We are going to replace each of\n  // them with its translation\n  var matches = ret.match(linkKeyMatcher);\n  for (var idx in matches) {\n    // ie compatible: filter custom array\n    // prototype method\n    if (!matches.hasOwnProperty(idx)) {\n      continue\n    }\n    var link = matches[idx];\n    var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);\n    var linkPrefix = linkKeyPrefixMatches[0];\n      var formatterName = linkKeyPrefixMatches[1];\n\n    // Remove the leading @:, @.case: and the brackets\n    var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');\n\n    if (visitedLinkStack.includes(linkPlaceholder)) {\n      if (true) {\n        warn((\"Circular reference found. \\\"\" + link + \"\\\" is already visited in the chain of \" + (visitedLinkStack.reverse().join(' <- '))));\n      }\n      return ret\n    }\n    visitedLinkStack.push(linkPlaceholder);\n\n    // Translate the link\n    var translated = this._interpolate(\n      locale, message, linkPlaceholder, host,\n      interpolateMode === 'raw' ? 'string' : interpolateMode,\n      interpolateMode === 'raw' ? undefined : values,\n      visitedLinkStack\n    );\n\n    if (this._isFallbackRoot(translated)) {\n      if ( true && !this._isSilentTranslationWarn(linkPlaceholder)) {\n        warn((\"Fall back to translate the link placeholder '\" + linkPlaceholder + \"' with root locale.\"));\n      }\n      /* istanbul ignore if */\n      if (!this._root) { throw Error('unexpected error') }\n      var root = this._root.$i18n;\n      translated = root._translate(\n        root._getMessages(), root.locale, root.fallbackLocale,\n        linkPlaceholder, host, interpolateMode, values\n      );\n    }\n    translated = this._warnDefault(\n      locale, linkPlaceholder, translated, host,\n      Array.isArray(values) ? values : [values]\n    );\n\n    if (this._modifiers.hasOwnProperty(formatterName)) {\n      translated = this._modifiers[formatterName](translated);\n    } else if (defaultModifiers.hasOwnProperty(formatterName)) {\n      translated = defaultModifiers[formatterName](translated);\n    }\n\n    visitedLinkStack.pop();\n\n    // Replace the link with the translated\n    ret = !translated ? ret : ret.replace(link, translated);\n  }\n\n  return ret\n};\n\nVueI18n.prototype._render = function _render (message, interpolateMode, values, path) {\n  var ret = this._formatter.interpolate(message, values, path);\n\n  // If the custom formatter refuses to work - apply the default one\n  if (!ret) {\n    ret = defaultFormatter.interpolate(message, values, path);\n  }\n\n  // if interpolateMode is **not** 'string' ('row'),\n  // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter\n  return interpolateMode === 'string' ? ret.join('') : ret\n};\n\nVueI18n.prototype._translate = function _translate (\n  messages,\n  locale,\n  fallback,\n  key,\n  host,\n  interpolateMode,\n  args\n) {\n  var res =\n    this._interpolate(locale, messages[locale], key, host, interpolateMode, args, [key]);\n  if (!isNull(res)) { return res }\n\n  res = this._interpolate(fallback, messages[fallback], key, host, interpolateMode, args, [key]);\n  if (!isNull(res)) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to translate the keypath '\" + key + \"' with '\" + fallback + \"' locale.\"));\n    }\n    return res\n  } else {\n    return null\n  }\n};\n\nVueI18n.prototype._t = function _t (key, _locale, messages, host) {\n    var ref;\n\n    var values = [], len = arguments.length - 4;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ];\n  if (!key) { return '' }\n\n  var parsedArgs = parseArgs.apply(void 0, values);\n  var locale = parsedArgs.locale || _locale;\n\n  var ret = this._translate(\n    messages, locale, this.fallbackLocale, key,\n    host, 'string', parsedArgs.params\n  );\n  if (this._isFallbackRoot(ret)) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to translate the keypath '\" + key + \"' with root locale.\"));\n    }\n    /* istanbul ignore if */\n    if (!this._root) { throw Error('unexpected error') }\n    return (ref = this._root).$t.apply(ref, [ key ].concat( values ))\n  } else {\n    return this._warnDefault(locale, key, ret, host, values)\n  }\n};\n\nVueI18n.prototype.t = function t (key) {\n    var ref;\n\n    var values = [], len = arguments.length - 1;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n  return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values ))\n};\n\nVueI18n.prototype._i = function _i (key, locale, messages, host, values) {\n  var ret =\n    this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);\n  if (this._isFallbackRoot(ret)) {\n    if ( true && !this._isSilentTranslationWarn(key)) {\n      warn((\"Fall back to interpolate the keypath '\" + key + \"' with root locale.\"));\n    }\n    if (!this._root) { throw Error('unexpected error') }\n    return this._root.$i18n.i(key, locale, values)\n  } else {\n    return this._warnDefault(locale, key, ret, host, [values])\n  }\n};\n\nVueI18n.prototype.i = function i (key, locale, values) {\n  /* istanbul ignore if */\n  if (!key) { return '' }\n\n  if (typeof locale !== 'string') {\n    locale = this.locale;\n  }\n\n  return this._i(key, locale, this._getMessages(), null, values)\n};\n\nVueI18n.prototype._tc = function _tc (\n  key,\n  _locale,\n  messages,\n  host,\n  choice\n) {\n    var ref;\n\n    var values = [], len = arguments.length - 5;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ];\n  if (!key) { return '' }\n  if (choice === undefined) {\n    choice = 1;\n  }\n\n  var predefined = { 'count': choice, 'n': choice };\n  var parsedArgs = parseArgs.apply(void 0, values);\n  parsedArgs.params = Object.assign(predefined, parsedArgs.params);\n  values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];\n  return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice)\n};\n\nVueI18n.prototype.fetchChoice = function fetchChoice (message, choice) {\n  /* istanbul ignore if */\n  if (!message && typeof message !== 'string') { return null }\n  var choices = message.split('|');\n\n  choice = this.getChoiceIndex(choice, choices.length);\n  if (!choices[choice]) { return message }\n  return choices[choice].trim()\n};\n\n/**\n * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`\n * @param choicesLength {number} an overall amount of available choices\n * @returns a final choice index\n*/\nVueI18n.prototype.getChoiceIndex = function getChoiceIndex (choice, choicesLength) {\n  // Default (old) getChoiceIndex implementation - english-compatible\n  var defaultImpl = function (_choice, _choicesLength) {\n    _choice = Math.abs(_choice);\n\n    if (_choicesLength === 2) {\n      return _choice\n        ? _choice > 1\n          ? 1\n          : 0\n        : 1\n    }\n\n    return _choice ? Math.min(_choice, 2) : 0\n  };\n\n  if (this.locale in this.pluralizationRules) {\n    return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength])\n  } else {\n    return defaultImpl(choice, choicesLength)\n  }\n};\n\nVueI18n.prototype.tc = function tc (key, choice) {\n    var ref;\n\n    var values = [], len = arguments.length - 2;\n    while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n  return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values ))\n};\n\nVueI18n.prototype._te = function _te (key, locale, messages) {\n    var args = [], len = arguments.length - 3;\n    while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ];\n\n  var _locale = parseArgs.apply(void 0, args).locale || locale;\n  return this._exist(messages[_locale], key)\n};\n\nVueI18n.prototype.te = function te (key, locale) {\n  return this._te(key, this.locale, this._getMessages(), locale)\n};\n\nVueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) {\n  return looseClone(this._vm.messages[locale] || {})\n};\n\nVueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) {\n  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n    this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n    if (this._warnHtmlInMessage === 'error') { return }\n  }\n  this._vm.$set(this._vm.messages, locale, message);\n};\n\nVueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) {\n  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n    this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n    if (this._warnHtmlInMessage === 'error') { return }\n  }\n  this._vm.$set(this._vm.messages, locale, merge(this._vm.messages[locale] || {}, message));\n};\n\nVueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) {\n  return looseClone(this._vm.dateTimeFormats[locale] || {})\n};\n\nVueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) {\n  this._vm.$set(this._vm.dateTimeFormats, locale, format);\n};\n\nVueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) {\n  this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._localizeDateTime = function _localizeDateTime (\n  value,\n  locale,\n  fallback,\n  dateTimeFormats,\n  key\n) {\n  var _locale = locale;\n  var formats = dateTimeFormats[_locale];\n\n  // fallback locale\n  if (isNull(formats) || isNull(formats[key])) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to '\" + fallback + \"' datetime formats from '\" + locale + \"' datetime formats.\"));\n    }\n    _locale = fallback;\n    formats = dateTimeFormats[_locale];\n  }\n\n  if (isNull(formats) || isNull(formats[key])) {\n    return null\n  } else {\n    var format = formats[key];\n    var id = _locale + \"__\" + key;\n    var formatter = this._dateTimeFormatters[id];\n    if (!formatter) {\n      formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);\n    }\n    return formatter.format(value)\n  }\n};\n\nVueI18n.prototype._d = function _d (value, locale, key) {\n  /* istanbul ignore if */\n  if ( true && !VueI18n.availabilities.dateTimeFormat) {\n    warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');\n    return ''\n  }\n\n  if (!key) {\n    return new Intl.DateTimeFormat(locale).format(value)\n  }\n\n  var ret =\n    this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);\n  if (this._isFallbackRoot(ret)) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to datetime localization of root: key '\" + key + \"'.\"));\n    }\n    /* istanbul ignore if */\n    if (!this._root) { throw Error('unexpected error') }\n    return this._root.$i18n.d(value, key, locale)\n  } else {\n    return ret || ''\n  }\n};\n\nVueI18n.prototype.d = function d (value) {\n    var args = [], len = arguments.length - 1;\n    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n  var locale = this.locale;\n  var key = null;\n\n  if (args.length === 1) {\n    if (typeof args[0] === 'string') {\n      key = args[0];\n    } else if (isObject(args[0])) {\n      if (args[0].locale) {\n        locale = args[0].locale;\n      }\n      if (args[0].key) {\n        key = args[0].key;\n      }\n    }\n  } else if (args.length === 2) {\n    if (typeof args[0] === 'string') {\n      key = args[0];\n    }\n    if (typeof args[1] === 'string') {\n      locale = args[1];\n    }\n  }\n\n  return this._d(value, locale, key)\n};\n\nVueI18n.prototype.getNumberFormat = function getNumberFormat (locale) {\n  return looseClone(this._vm.numberFormats[locale] || {})\n};\n\nVueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) {\n  this._vm.$set(this._vm.numberFormats, locale, format);\n};\n\nVueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) {\n  this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._getNumberFormatter = function _getNumberFormatter (\n  value,\n  locale,\n  fallback,\n  numberFormats,\n  key,\n  options\n) {\n  var _locale = locale;\n  var formats = numberFormats[_locale];\n\n  // fallback locale\n  if (isNull(formats) || isNull(formats[key])) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to '\" + fallback + \"' number formats from '\" + locale + \"' number formats.\"));\n    }\n    _locale = fallback;\n    formats = numberFormats[_locale];\n  }\n\n  if (isNull(formats) || isNull(formats[key])) {\n    return null\n  } else {\n    var format = formats[key];\n\n    var formatter;\n    if (options) {\n      // If options specified - create one time number formatter\n      formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));\n    } else {\n      var id = _locale + \"__\" + key;\n      formatter = this._numberFormatters[id];\n      if (!formatter) {\n        formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);\n      }\n    }\n    return formatter\n  }\n};\n\nVueI18n.prototype._n = function _n (value, locale, key, options) {\n  /* istanbul ignore if */\n  if (!VueI18n.availabilities.numberFormat) {\n    if (true) {\n      warn('Cannot format a Number value due to not supported Intl.NumberFormat.');\n    }\n    return ''\n  }\n\n  if (!key) {\n    var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n    return nf.format(value)\n  }\n\n  var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n  var ret = formatter && formatter.format(value);\n  if (this._isFallbackRoot(ret)) {\n    if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n      warn((\"Fall back to number localization of root: key '\" + key + \"'.\"));\n    }\n    /* istanbul ignore if */\n    if (!this._root) { throw Error('unexpected error') }\n    return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options))\n  } else {\n    return ret || ''\n  }\n};\n\nVueI18n.prototype.n = function n (value) {\n    var args = [], len = arguments.length - 1;\n    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n  var locale = this.locale;\n  var key = null;\n  var options = null;\n\n  if (args.length === 1) {\n    if (typeof args[0] === 'string') {\n      key = args[0];\n    } else if (isObject(args[0])) {\n      if (args[0].locale) {\n        locale = args[0].locale;\n      }\n      if (args[0].key) {\n        key = args[0].key;\n      }\n\n      // Filter out number format options only\n      options = Object.keys(args[0]).reduce(function (acc, key) {\n          var obj;\n\n        if (numberFormatKeys.includes(key)) {\n          return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj ))\n        }\n        return acc\n      }, null);\n    }\n  } else if (args.length === 2) {\n    if (typeof args[0] === 'string') {\n      key = args[0];\n    }\n    if (typeof args[1] === 'string') {\n      locale = args[1];\n    }\n  }\n\n  return this._n(value, locale, key, options)\n};\n\nVueI18n.prototype._ntp = function _ntp (value, locale, key, options) {\n  /* istanbul ignore if */\n  if (!VueI18n.availabilities.numberFormat) {\n    if (true) {\n      warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');\n    }\n    return []\n  }\n\n  if (!key) {\n    var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n    return nf.formatToParts(value)\n  }\n\n  var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n  var ret = formatter && formatter.formatToParts(value);\n  if (this._isFallbackRoot(ret)) {\n    if ( true && !this._isSilentTranslationWarn(key)) {\n      warn((\"Fall back to format number to parts of root: key '\" + key + \"' .\"));\n    }\n    /* istanbul ignore if */\n    if (!this._root) { throw Error('unexpected error') }\n    return this._root.$i18n._ntp(value, locale, key, options)\n  } else {\n    return ret || []\n  }\n};\n\nObject.defineProperties( VueI18n.prototype, prototypeAccessors );\n\nvar availabilities;\n// $FlowFixMe\nObject.defineProperty(VueI18n, 'availabilities', {\n  get: function get () {\n    if (!availabilities) {\n      var intlDefined = typeof Intl !== 'undefined';\n      availabilities = {\n        dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',\n        numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'\n      };\n    }\n\n    return availabilities\n  }\n});\n\nVueI18n.install = install;\nVueI18n.version = '8.15.0';\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VueI18n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1pMThuQDguMTUuMEB2dWUtaTE4bi9kaXN0L3Z1ZS1pMThuLmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWkxOG5AOC4xNS4wQHZ1ZS1pMThuL2Rpc3QvdnVlLWkxOG4uZXNtLmpzPzRiYTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiB2dWUtaTE4biB2OC4xNS4wIFxuICogKGMpIDIwMTkga2F6dXlhIGthd2FndWNoaVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxuLyoqXG4gKiBjb25zdGFudHNcbiAqL1xuXG52YXIgbnVtYmVyRm9ybWF0S2V5cyA9IFtcbiAgJ3N0eWxlJyxcbiAgJ2N1cnJlbmN5JyxcbiAgJ2N1cnJlbmN5RGlzcGxheScsXG4gICd1c2VHcm91cGluZycsXG4gICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsXG4gICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnLFxuICAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJyxcbiAgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsXG4gICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAnbG9jYWxlTWF0Y2hlcicsXG4gICdmb3JtYXRNYXRjaGVyJ1xuXTtcblxuLyoqXG4gKiB1dGlsaXRpZXNcbiAqL1xuXG5mdW5jdGlvbiB3YXJuIChtc2csIGVycikge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS53YXJuKCdbdnVlLWkxOG5dICcgKyBtc2cpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvciAobXNnLCBlcnIpIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWUtaTE4bl0gJyArIG1zZyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBPQkpFQ1RfU1RSSU5HID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gT0JKRUNUX1NUUklOR1xufVxuXG5mdW5jdGlvbiBpc051bGwgKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJncyAoKSB7XG4gIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgdmFyIGxvY2FsZSA9IG51bGw7XG4gIHZhciBwYXJhbXMgPSBudWxsO1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoaXNPYmplY3QoYXJnc1swXSkgfHwgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1swXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzBdO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNPYmplY3QoYXJnc1sxXSkgfHwgQXJyYXkuaXNBcnJheShhcmdzWzFdKSkge1xuICAgICAgcGFyYW1zID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBsb2NhbGU6IGxvY2FsZSwgcGFyYW1zOiBwYXJhbXMgfVxufVxuXG5mdW5jdGlvbiBsb29zZUNsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG5mdW5jdGlvbiBtZXJnZSAodGFyZ2V0KSB7XG4gIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50cyQxW2ldO1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIHZhciBrZXkgPSAodm9pZCAwKTtcbiAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gbWVyZ2Uob3V0cHV0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0ZW5kIChWdWUpIHtcbiAgaWYgKCFWdWUucHJvdG90eXBlLmhhc093blByb3BlcnR5KCckaTE4bicpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGkxOG4nLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybiB0aGlzLl9pMThuIH1cbiAgICB9KTtcbiAgfVxuXG4gIFZ1ZS5wcm90b3R5cGUuJHQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBpMThuID0gdGhpcy4kaTE4bjtcbiAgICByZXR1cm4gaTE4bi5fdC5hcHBseShpMThuLCBbIGtleSwgaTE4bi5sb2NhbGUsIGkxOG4uX2dldE1lc3NhZ2VzKCksIHRoaXMgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHRjID0gZnVuY3Rpb24gKGtleSwgY2hvaWNlKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDIgXTtcblxuICAgIHZhciBpMThuID0gdGhpcy4kaTE4bjtcbiAgICByZXR1cm4gaTE4bi5fdGMuYXBwbHkoaTE4biwgWyBrZXksIGkxOG4ubG9jYWxlLCBpMThuLl9nZXRNZXNzYWdlcygpLCB0aGlzLCBjaG9pY2UgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHRlID0gZnVuY3Rpb24gKGtleSwgbG9jYWxlKSB7XG4gICAgdmFyIGkxOG4gPSB0aGlzLiRpMThuO1xuICAgIHJldHVybiBpMThuLl90ZShrZXksIGkxOG4ubG9jYWxlLCBpMThuLl9nZXRNZXNzYWdlcygpLCBsb2NhbGUpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG4gICAgcmV0dXJuIChyZWYgPSB0aGlzLiRpMThuKS5kLmFwcGx5KHJlZiwgWyB2YWx1ZSBdLmNvbmNhdCggYXJncyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuICAgIHJldHVybiAocmVmID0gdGhpcy4kaTE4bikubi5hcHBseShyZWYsIFsgdmFsdWUgXS5jb25jYXQoIGFyZ3MgKSlcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBtaXhpbiA9IHtcbiAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUgKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICBvcHRpb25zLmkxOG4gPSBvcHRpb25zLmkxOG4gfHwgKG9wdGlvbnMuX19pMThuID8ge30gOiBudWxsKTtcblxuICAgIGlmIChvcHRpb25zLmkxOG4pIHtcbiAgICAgIGlmIChvcHRpb25zLmkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlTWVzc2FnZXMgPSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuX19pMThuLmZvckVhY2goZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgICAgICAgIGxvY2FsZU1lc3NhZ2VzID0gbWVyZ2UobG9jYWxlTWVzc2FnZXMsIEpTT04ucGFyc2UocmVzb3VyY2UpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMobG9jYWxlTWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICAgICAgICBvcHRpb25zLmkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKGxvY2FsZSwgbG9jYWxlTWVzc2FnZXNbbG9jYWxlXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLmkxOG47XG4gICAgICAgIHRoaXMuX2kxOG5XYXRjaGVyID0gdGhpcy5faTE4bi53YXRjaEkxOG5EYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy5pMThuKSkge1xuICAgICAgICAvLyBjb21wb25lbnQgbG9jYWwgaTE4blxuICAgICAgICBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnJvb3QgPSB0aGlzLiRyb290O1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXR0ZXIgPSB0aGlzLiRyb290LiRpMThuLmZvcm1hdHRlcjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uZmFsbGJhY2tMb2NhbGUgPSB0aGlzLiRyb290LiRpMThuLmZhbGxiYWNrTG9jYWxlO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzID0gdGhpcy4kcm9vdC4kaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSB0aGlzLiRyb290LiRpMThuLnNpbGVudFRyYW5zbGF0aW9uV2FybjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uc2lsZW50RmFsbGJhY2tXYXJuID0gdGhpcy4kcm9vdC4kaTE4bi5zaWxlbnRGYWxsYmFja1dhcm47XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnBsdXJhbGl6YXRpb25SdWxlcyA9IHRoaXMuJHJvb3QuJGkxOG4ucGx1cmFsaXphdGlvblJ1bGVzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPSB0aGlzLiRyb290LiRpMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlTWVzc2FnZXMkMSA9IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5fX2kxOG4uZm9yRWFjaChmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgbG9jYWxlTWVzc2FnZXMkMSA9IG1lcmdlKGxvY2FsZU1lc3NhZ2VzJDEsIEpTT04ucGFyc2UocmVzb3VyY2UpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3B0aW9ucy5pMThuLm1lc3NhZ2VzID0gbG9jYWxlTWVzc2FnZXMkMTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZiA9IG9wdGlvbnMuaTE4bjtcbiAgICAgICAgdmFyIHNoYXJlZE1lc3NhZ2VzID0gcmVmLnNoYXJlZE1lc3NhZ2VzO1xuICAgICAgICBpZiAoc2hhcmVkTWVzc2FnZXMgJiYgaXNQbGFpbk9iamVjdChzaGFyZWRNZXNzYWdlcykpIHtcbiAgICAgICAgICBvcHRpb25zLmkxOG4ubWVzc2FnZXMgPSBtZXJnZShvcHRpb25zLmkxOG4ubWVzc2FnZXMsIHNoYXJlZE1lc3NhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2kxOG4gPSBuZXcgVnVlSTE4bihvcHRpb25zLmkxOG4pO1xuICAgICAgICB0aGlzLl9pMThuV2F0Y2hlciA9IHRoaXMuX2kxOG4ud2F0Y2hJMThuRGF0YSgpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmkxOG4uc3luYyA9PT0gdW5kZWZpbmVkIHx8ICEhb3B0aW9ucy5pMThuLnN5bmMpIHtcbiAgICAgICAgICB0aGlzLl9sb2NhbGVXYXRjaGVyID0gdGhpcy4kaTE4bi53YXRjaExvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXCJDYW5ub3QgYmUgaW50ZXJwcmV0ZWQgJ2kxOG4nIG9wdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuJHJvb3QgJiYgdGhpcy4kcm9vdC4kaTE4biAmJiB0aGlzLiRyb290LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcm9vdCBpMThuXG4gICAgICB0aGlzLl9pMThuID0gdGhpcy4kcm9vdC4kaTE4bjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcGFyZW50IGkxOG5cbiAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLnBhcmVudC4kaTE4bjtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgb3B0aW9ucy5pMThuID0gb3B0aW9ucy5pMThuIHx8IChvcHRpb25zLl9faTE4biA/IHt9IDogbnVsbCk7XG5cbiAgICBpZiAob3B0aW9ucy5pMThuKSB7XG4gICAgICBpZiAob3B0aW9ucy5pMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgICAvLyBpbml0IGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrc1xuICAgICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnMuaTE4bikpIHtcbiAgICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcIkNhbm5vdCBiZSBpbnRlcnByZXRlZCAnaTE4bicgb3B0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICB0aGlzLl9zdWJzY3JpYmluZyA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3kgKCkge1xuICAgIGlmICghdGhpcy5faTE4bikgeyByZXR1cm4gfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLl9zdWJzY3JpYmluZykge1xuICAgICAgICBzZWxmLl9pMThuLnVuc3Vic2NyaWJlRGF0YUNoYW5naW5nKHNlbGYpO1xuICAgICAgICBkZWxldGUgc2VsZi5fc3Vic2NyaWJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9pMThuV2F0Y2hlcikge1xuICAgICAgICBzZWxmLl9pMThuV2F0Y2hlcigpO1xuICAgICAgICBzZWxmLl9pMThuLmRlc3Ryb3lWTSgpO1xuICAgICAgICBkZWxldGUgc2VsZi5faTE4bldhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9sb2NhbGVXYXRjaGVyKSB7XG4gICAgICAgIHNlbGYuX2xvY2FsZVdhdGNoZXIoKTtcbiAgICAgICAgZGVsZXRlIHNlbGYuX2xvY2FsZVdhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2kxOG4gPSBudWxsO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGludGVycG9sYXRpb25Db21wb25lbnQgPSB7XG4gIG5hbWU6ICdpMThuJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBwbGFjZXM6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgsIHJlZikge1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBzbG90cyA9IHJlZi5zbG90cztcblxuICAgIHZhciAkaTE4biA9IHBhcmVudC4kaTE4bjtcbiAgICBpZiAoISRpMThuKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKCdDYW5ub3QgZmluZCBWdWVJMThuIGluc3RhbmNlIScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIHBhdGggPSBwcm9wcy5wYXRoO1xuICAgIHZhciBsb2NhbGUgPSBwcm9wcy5sb2NhbGU7XG4gICAgdmFyIHBsYWNlcyA9IHByb3BzLnBsYWNlcztcbiAgICB2YXIgcGFyYW1zID0gc2xvdHMoKTtcbiAgICB2YXIgY2hpbGRyZW4gPSAkaTE4bi5pKFxuICAgICAgcGF0aCxcbiAgICAgIGxvY2FsZSxcbiAgICAgIG9ubHlIYXNEZWZhdWx0UGxhY2UocGFyYW1zKSB8fCBwbGFjZXNcbiAgICAgICAgPyB1c2VMZWdhY3lQbGFjZXMocGFyYW1zLmRlZmF1bHQsIHBsYWNlcylcbiAgICAgICAgOiBwYXJhbXNcbiAgICApO1xuXG4gICAgdmFyIHRhZyA9IHByb3BzLnRhZyB8fCAnc3Bhbic7XG4gICAgcmV0dXJuIHRhZyA/IGgodGFnLCBkYXRhLCBjaGlsZHJlbikgOiBjaGlsZHJlblxuICB9XG59O1xuXG5mdW5jdGlvbiBvbmx5SGFzRGVmYXVsdFBsYWNlIChwYXJhbXMpIHtcbiAgdmFyIHByb3A7XG4gIGZvciAocHJvcCBpbiBwYXJhbXMpIHtcbiAgICBpZiAocHJvcCAhPT0gJ2RlZmF1bHQnKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocHJvcClcbn1cblxuZnVuY3Rpb24gdXNlTGVnYWN5UGxhY2VzIChjaGlsZHJlbiwgcGxhY2VzKSB7XG4gIHZhciBwYXJhbXMgPSBwbGFjZXMgPyBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzKHBsYWNlcykgOiB7fTtcblxuICBpZiAoIWNoaWxkcmVuKSB7IHJldHVybiBwYXJhbXMgfVxuXG4gIC8vIEZpbHRlciBlbXB0eSB0ZXh0IG5vZGVzXG4gIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC50YWcgfHwgY2hpbGQudGV4dC50cmltKCkgIT09ICcnXG4gIH0pO1xuXG4gIHZhciBldmVyeVBsYWNlID0gY2hpbGRyZW4uZXZlcnkodm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV2ZXJ5UGxhY2UpIHtcbiAgICB3YXJuKCdgcGxhY2VgIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbi4gUGxlYXNlIHN3aXRjaCB0byBWdWUgc2xvdHMuJyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW4ucmVkdWNlKFxuICAgIGV2ZXJ5UGxhY2UgPyBhc3NpZ25DaGlsZFBsYWNlIDogYXNzaWduQ2hpbGRJbmRleCxcbiAgICBwYXJhbXNcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzIChwbGFjZXMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKCdgcGxhY2VzYCBwcm9wIGlzIGRlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiBQbGVhc2Ugc3dpdGNoIHRvIFZ1ZSBzbG90cy4nKTtcbiAgfVxuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBsYWNlcylcbiAgICA/IHBsYWNlcy5yZWR1Y2UoYXNzaWduQ2hpbGRJbmRleCwge30pXG4gICAgOiBPYmplY3QuYXNzaWduKHt9LCBwbGFjZXMpXG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNoaWxkUGxhY2UgKHBhcmFtcywgY2hpbGQpIHtcbiAgaWYgKGNoaWxkLmRhdGEgJiYgY2hpbGQuZGF0YS5hdHRycyAmJiBjaGlsZC5kYXRhLmF0dHJzLnBsYWNlKSB7XG4gICAgcGFyYW1zW2NoaWxkLmRhdGEuYXR0cnMucGxhY2VdID0gY2hpbGQ7XG4gIH1cbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DaGlsZEluZGV4IChwYXJhbXMsIGNoaWxkLCBpbmRleCkge1xuICBwYXJhbXNbaW5kZXhdID0gY2hpbGQ7XG4gIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gdm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSAodm5vZGUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMucGxhY2UpXG59XG5cbi8qICAqL1xuXG52YXIgbnVtYmVyQ29tcG9uZW50ID0ge1xuICBuYW1lOiAnaTE4bi1uJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzcGFuJ1xuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCwgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG5cbiAgICB2YXIgaTE4biA9IHBhcmVudC4kaTE4bjtcblxuICAgIGlmICghaTE4bikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybignQ2Fubm90IGZpbmQgVnVlSTE4biBpbnN0YW5jZSEnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5mb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBwcm9wcy5mb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChwcm9wcy5mb3JtYXQpKSB7XG4gICAgICBpZiAocHJvcHMuZm9ybWF0LmtleSkge1xuICAgICAgICBrZXkgPSBwcm9wcy5mb3JtYXQua2V5O1xuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IG51bWJlciBmb3JtYXQgb3B0aW9ucyBvbmx5XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmtleXMocHJvcHMuZm9ybWF0KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcHJvcCkge1xuICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgIGlmIChudW1iZXJGb3JtYXRLZXlzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGFjYywgKCBvYmogPSB7fSwgb2JqW3Byb3BdID0gcHJvcHMuZm9ybWF0W3Byb3BdLCBvYmogKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgbG9jYWxlID0gcHJvcHMubG9jYWxlIHx8IGkxOG4ubG9jYWxlO1xuICAgIHZhciBwYXJ0cyA9IGkxOG4uX250cChwcm9wcy52YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpO1xuXG4gICAgdmFyIHZhbHVlcyA9IHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaW5kZXgpIHtcbiAgICAgIHZhciBvYmo7XG5cbiAgICAgIHZhciBzbG90ID0gZGF0YS5zY29wZWRTbG90cyAmJiBkYXRhLnNjb3BlZFNsb3RzW3BhcnQudHlwZV07XG4gICAgICByZXR1cm4gc2xvdCA/IHNsb3QoKCBvYmogPSB7fSwgb2JqW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlLCBvYmouaW5kZXggPSBpbmRleCwgb2JqLnBhcnRzID0gcGFydHMsIG9iaiApKSA6IHBhcnQudmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBoKHByb3BzLnRhZywge1xuICAgICAgYXR0cnM6IGRhdGEuYXR0cnMsXG4gICAgICAnY2xhc3MnOiBkYXRhWydjbGFzcyddLFxuICAgICAgc3RhdGljQ2xhc3M6IGRhdGEuc3RhdGljQ2xhc3NcbiAgICB9LCB2YWx1ZXMpXG4gIH1cbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgaWYgKCFhc3NlcnQoZWwsIHZub2RlKSkgeyByZXR1cm4gfVxuXG4gIHQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZOb2RlKSB7XG4gIGlmICghYXNzZXJ0KGVsLCB2bm9kZSkpIHsgcmV0dXJuIH1cblxuICB2YXIgaTE4biA9IHZub2RlLmNvbnRleHQuJGkxOG47XG4gIGlmIChsb2NhbGVFcXVhbChlbCwgdm5vZGUpICYmXG4gICAgKGxvb3NlRXF1YWwoYmluZGluZy52YWx1ZSwgYmluZGluZy5vbGRWYWx1ZSkgJiZcbiAgICAgbG9vc2VFcXVhbChlbC5fbG9jYWxlTWVzc2FnZSwgaTE4bi5nZXRMb2NhbGVNZXNzYWdlKGkxOG4ubG9jYWxlKSkpKSB7IHJldHVybiB9XG5cbiAgdChlbCwgYmluZGluZywgdm5vZGUpO1xufVxuXG5mdW5jdGlvbiB1bmJpbmQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVk5vZGUpIHtcbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKCF2bSkge1xuICAgIHdhcm4oJ1Z1ZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdHMgaW4gVk5vZGUgY29udGV4dCcpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGkxOG4gPSB2bm9kZS5jb250ZXh0LiRpMThuIHx8IHt9O1xuICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLnByZXNlcnZlICYmICFpMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudCkge1xuICAgIGVsLnRleHRDb250ZW50ID0gJyc7XG4gIH1cbiAgZWwuX3Z0ID0gdW5kZWZpbmVkO1xuICBkZWxldGUgZWxbJ192dCddO1xuICBlbC5fbG9jYWxlID0gdW5kZWZpbmVkO1xuICBkZWxldGUgZWxbJ19sb2NhbGUnXTtcbiAgZWwuX2xvY2FsZU1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gIGRlbGV0ZSBlbFsnX2xvY2FsZU1lc3NhZ2UnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChlbCwgdm5vZGUpIHtcbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKCF2bSkge1xuICAgIHdhcm4oJ1Z1ZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdHMgaW4gVk5vZGUgY29udGV4dCcpO1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKCF2bS4kaTE4bikge1xuICAgIHdhcm4oJ1Z1ZUkxOG4gaW5zdGFuY2UgZG9lcyBub3QgZXhpc3RzIGluIFZ1ZSBpbnN0YW5jZScpO1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gbG9jYWxlRXF1YWwgKGVsLCB2bm9kZSkge1xuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICByZXR1cm4gZWwuX2xvY2FsZSA9PT0gdm0uJGkxOG4ubG9jYWxlXG59XG5cbmZ1bmN0aW9uIHQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICB2YXIgcmVmJDEsIHJlZiQyO1xuXG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG5cbiAgdmFyIHJlZiA9IHBhcnNlVmFsdWUodmFsdWUpO1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgbG9jYWxlID0gcmVmLmxvY2FsZTtcbiAgdmFyIGFyZ3MgPSByZWYuYXJncztcbiAgdmFyIGNob2ljZSA9IHJlZi5jaG9pY2U7XG4gIGlmICghcGF0aCAmJiAhbG9jYWxlICYmICFhcmdzKSB7XG4gICAgd2FybigndmFsdWUgdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB3YXJuKCdgcGF0aGAgaXMgcmVxdWlyZWQgaW4gdi10IGRpcmVjdGl2ZScpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKGNob2ljZSkge1xuICAgIGVsLl92dCA9IGVsLnRleHRDb250ZW50ID0gKHJlZiQxID0gdm0uJGkxOG4pLnRjLmFwcGx5KHJlZiQxLCBbIHBhdGgsIGNob2ljZSBdLmNvbmNhdCggbWFrZVBhcmFtcyhsb2NhbGUsIGFyZ3MpICkpO1xuICB9IGVsc2Uge1xuICAgIGVsLl92dCA9IGVsLnRleHRDb250ZW50ID0gKHJlZiQyID0gdm0uJGkxOG4pLnQuYXBwbHkocmVmJDIsIFsgcGF0aCBdLmNvbmNhdCggbWFrZVBhcmFtcyhsb2NhbGUsIGFyZ3MpICkpO1xuICB9XG4gIGVsLl9sb2NhbGUgPSB2bS4kaTE4bi5sb2NhbGU7XG4gIGVsLl9sb2NhbGVNZXNzYWdlID0gdm0uJGkxOG4uZ2V0TG9jYWxlTWVzc2FnZSh2bS4kaTE4bi5sb2NhbGUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlICh2YWx1ZSkge1xuICB2YXIgcGF0aDtcbiAgdmFyIGxvY2FsZTtcbiAgdmFyIGFyZ3M7XG4gIHZhciBjaG9pY2U7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXRoID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICBwYXRoID0gdmFsdWUucGF0aDtcbiAgICBsb2NhbGUgPSB2YWx1ZS5sb2NhbGU7XG4gICAgYXJncyA9IHZhbHVlLmFyZ3M7XG4gICAgY2hvaWNlID0gdmFsdWUuY2hvaWNlO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aDogcGF0aCwgbG9jYWxlOiBsb2NhbGUsIGFyZ3M6IGFyZ3MsIGNob2ljZTogY2hvaWNlIH1cbn1cblxuZnVuY3Rpb24gbWFrZVBhcmFtcyAobG9jYWxlLCBhcmdzKSB7XG4gIHZhciBwYXJhbXMgPSBbXTtcblxuICBsb2NhbGUgJiYgcGFyYW1zLnB1c2gobG9jYWxlKTtcbiAgaWYgKGFyZ3MgJiYgKEFycmF5LmlzQXJyYXkoYXJncykgfHwgaXNQbGFpbk9iamVjdChhcmdzKSkpIHtcbiAgICBwYXJhbXMucHVzaChhcmdzKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXNcbn1cblxudmFyIFZ1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoX1Z1ZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5zdGFsbC5pbnN0YWxsZWQgJiYgX1Z1ZSA9PT0gVnVlKSB7XG4gICAgd2FybignYWxyZWFkeSBpbnN0YWxsZWQuJyk7XG4gICAgcmV0dXJuXG4gIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIFZ1ZSA9IF9WdWU7XG5cbiAgdmFyIHZlcnNpb24gPSAoVnVlLnZlcnNpb24gJiYgTnVtYmVyKFZ1ZS52ZXJzaW9uLnNwbGl0KCcuJylbMF0pKSB8fCAtMTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZlcnNpb24gPCAyKSB7XG4gICAgd2FybigoXCJ2dWUtaTE4biAoXCIgKyAoaW5zdGFsbC52ZXJzaW9uKSArIFwiKSBuZWVkIHRvIHVzZSBWdWUgMi4wIG9yIGxhdGVyIChWdWU6IFwiICsgKFZ1ZS52ZXJzaW9uKSArIFwiKS5cIikpO1xuICAgIHJldHVyblxuICB9XG5cbiAgZXh0ZW5kKFZ1ZSk7XG4gIFZ1ZS5taXhpbihtaXhpbik7XG4gIFZ1ZS5kaXJlY3RpdmUoJ3QnLCB7IGJpbmQ6IGJpbmQsIHVwZGF0ZTogdXBkYXRlLCB1bmJpbmQ6IHVuYmluZCB9KTtcbiAgVnVlLmNvbXBvbmVudChpbnRlcnBvbGF0aW9uQ29tcG9uZW50Lm5hbWUsIGludGVycG9sYXRpb25Db21wb25lbnQpO1xuICBWdWUuY29tcG9uZW50KG51bWJlckNvbXBvbmVudC5uYW1lLCBudW1iZXJDb21wb25lbnQpO1xuXG4gIC8vIHVzZSBzaW1wbGUgbWVyZ2VTdHJhdGVnaWVzIHRvIHByZXZlbnQgaTE4biBpbnN0YW5jZSBsb3NlICdfX3Byb3RvX18nXG4gIHZhciBzdHJhdHMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgc3RyYXRzLmkxOG4gPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmVudFZhbFxuICAgICAgOiBjaGlsZFZhbFxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIEJhc2VGb3JtYXR0ZXIgPSBmdW5jdGlvbiBCYXNlRm9ybWF0dGVyICgpIHtcbiAgdGhpcy5fY2FjaGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn07XG5cbkJhc2VGb3JtYXR0ZXIucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUgKG1lc3NhZ2UsIHZhbHVlcykge1xuICBpZiAoIXZhbHVlcykge1xuICAgIHJldHVybiBbbWVzc2FnZV1cbiAgfVxuICB2YXIgdG9rZW5zID0gdGhpcy5fY2FjaGVzW21lc3NhZ2VdO1xuICBpZiAoIXRva2Vucykge1xuICAgIHRva2VucyA9IHBhcnNlKG1lc3NhZ2UpO1xuICAgIHRoaXMuX2NhY2hlc1ttZXNzYWdlXSA9IHRva2VucztcbiAgfVxuICByZXR1cm4gY29tcGlsZSh0b2tlbnMsIHZhbHVlcylcbn07XG5cblxuXG52YXIgUkVfVE9LRU5fTElTVF9WQUxVRSA9IC9eKD86XFxkKSsvO1xudmFyIFJFX1RPS0VOX05BTUVEX1ZBTFVFID0gL14oPzpcXHcpKy87XG5cbmZ1bmN0aW9uIHBhcnNlIChmb3JtYXQpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIgcG9zaXRpb24gPSAwO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIHdoaWxlIChwb3NpdGlvbiA8IGZvcm1hdC5sZW5ndGgpIHtcbiAgICB2YXIgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHRleHQgfSk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSAnJztcbiAgICAgIHZhciBzdWIgPSAnJztcbiAgICAgIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgICB3aGlsZSAoY2hhciAhPT0gdW5kZWZpbmVkICYmIGNoYXIgIT09ICd9Jykge1xuICAgICAgICBzdWIgKz0gY2hhcjtcbiAgICAgICAgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc0Nsb3NlZCA9IGNoYXIgPT09ICd9JztcblxuICAgICAgdmFyIHR5cGUgPSBSRV9UT0tFTl9MSVNUX1ZBTFVFLnRlc3Qoc3ViKVxuICAgICAgICA/ICdsaXN0J1xuICAgICAgICA6IGlzQ2xvc2VkICYmIFJFX1RPS0VOX05BTUVEX1ZBTFVFLnRlc3Qoc3ViKVxuICAgICAgICAgID8gJ25hbWVkJ1xuICAgICAgICAgIDogJ3Vua25vd24nO1xuICAgICAgdG9rZW5zLnB1c2goeyB2YWx1ZTogc3ViLCB0eXBlOiB0eXBlIH0pO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJyUnKSB7XG4gICAgICAvLyB3aGVuIGZvdW5kIHJhaWxzIGkxOG4gc3ludGF4LCBza2lwIHRleHQgY2FwdHVyZVxuICAgICAgaWYgKGZvcm1hdFsocG9zaXRpb24pXSAhPT0gJ3snKSB7XG4gICAgICAgIHRleHQgKz0gY2hhcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCArPSBjaGFyO1xuICAgIH1cbiAgfVxuXG4gIHRleHQgJiYgdG9rZW5zLnB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0ZXh0IH0pO1xuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuZnVuY3Rpb24gY29tcGlsZSAodG9rZW5zLCB2YWx1ZXMpIHtcbiAgdmFyIGNvbXBpbGVkID0gW107XG4gIHZhciBpbmRleCA9IDA7XG5cbiAgdmFyIG1vZGUgPSBBcnJheS5pc0FycmF5KHZhbHVlcylcbiAgICA/ICdsaXN0J1xuICAgIDogaXNPYmplY3QodmFsdWVzKVxuICAgICAgPyAnbmFtZWQnXG4gICAgICA6ICd1bmtub3duJztcbiAgaWYgKG1vZGUgPT09ICd1bmtub3duJykgeyByZXR1cm4gY29tcGlsZWQgfVxuXG4gIHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGNvbXBpbGVkLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGNvbXBpbGVkLnB1c2godmFsdWVzW3BhcnNlSW50KHRva2VuLnZhbHVlLCAxMCldKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25hbWVkJzpcbiAgICAgICAgaWYgKG1vZGUgPT09ICduYW1lZCcpIHtcbiAgICAgICAgICBjb21waWxlZC5wdXNoKCh2YWx1ZXMpW3Rva2VuLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oKFwiVHlwZSBvZiB0b2tlbiAnXCIgKyAodG9rZW4udHlwZSkgKyBcIicgYW5kIGZvcm1hdCBvZiB2YWx1ZSAnXCIgKyBtb2RlICsgXCInIGRvbid0IG1hdGNoIVwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd1bmtub3duJzpcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKFwiRGV0ZWN0ICd1bmtub3duJyB0eXBlIG9mIHRva2VuIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkXG59XG5cbi8qICAqL1xuXG4vKipcbiAqICBQYXRoIHBhcnNlclxuICogIC0gSW5zcGlyZWQ6XG4gKiAgICBWdWUuanMgUGF0aCBwYXJzZXJcbiAqL1xuXG4vLyBhY3Rpb25zXG52YXIgQVBQRU5EID0gMDtcbnZhciBQVVNIID0gMTtcbnZhciBJTkNfU1VCX1BBVEhfREVQVEggPSAyO1xudmFyIFBVU0hfU1VCX1BBVEggPSAzO1xuXG4vLyBzdGF0ZXNcbnZhciBCRUZPUkVfUEFUSCA9IDA7XG52YXIgSU5fUEFUSCA9IDE7XG52YXIgQkVGT1JFX0lERU5UID0gMjtcbnZhciBJTl9JREVOVCA9IDM7XG52YXIgSU5fU1VCX1BBVEggPSA0O1xudmFyIElOX1NJTkdMRV9RVU9URSA9IDU7XG52YXIgSU5fRE9VQkxFX1FVT1RFID0gNjtcbnZhciBBRlRFUl9QQVRIID0gNztcbnZhciBFUlJPUiA9IDg7XG5cbnZhciBwYXRoU3RhdGVNYWNoaW5lID0gW107XG5cbnBhdGhTdGF0ZU1hY2hpbmVbQkVGT1JFX1BBVEhdID0ge1xuICAnd3MnOiBbQkVGT1JFX1BBVEhdLFxuICAnaWRlbnQnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICdbJzogW0lOX1NVQl9QQVRIXSxcbiAgJ2VvZic6IFtBRlRFUl9QQVRIXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9QQVRIXSA9IHtcbiAgJ3dzJzogW0lOX1BBVEhdLFxuICAnLic6IFtCRUZPUkVfSURFTlRdLFxuICAnWyc6IFtJTl9TVUJfUEFUSF0sXG4gICdlb2YnOiBbQUZURVJfUEFUSF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbQkVGT1JFX0lERU5UXSA9IHtcbiAgJ3dzJzogW0JFRk9SRV9JREVOVF0sXG4gICdpZGVudCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJzAnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICdudW1iZXInOiBbSU5fSURFTlQsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fSURFTlRdID0ge1xuICAnaWRlbnQnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICcwJzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnbnVtYmVyJzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnd3MnOiBbSU5fUEFUSCwgUFVTSF0sXG4gICcuJzogW0JFRk9SRV9JREVOVCwgUFVTSF0sXG4gICdbJzogW0lOX1NVQl9QQVRILCBQVVNIXSxcbiAgJ2VvZic6IFtBRlRFUl9QQVRILCBQVVNIXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9TVUJfUEFUSF0gPSB7XG4gIFwiJ1wiOiBbSU5fU0lOR0xFX1FVT1RFLCBBUFBFTkRdLFxuICAnXCInOiBbSU5fRE9VQkxFX1FVT1RFLCBBUFBFTkRdLFxuICAnWyc6IFtJTl9TVUJfUEFUSCwgSU5DX1NVQl9QQVRIX0RFUFRIXSxcbiAgJ10nOiBbSU5fUEFUSCwgUFVTSF9TVUJfUEFUSF0sXG4gICdlb2YnOiBFUlJPUixcbiAgJ2Vsc2UnOiBbSU5fU1VCX1BBVEgsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fU0lOR0xFX1FVT1RFXSA9IHtcbiAgXCInXCI6IFtJTl9TVUJfUEFUSCwgQVBQRU5EXSxcbiAgJ2VvZic6IEVSUk9SLFxuICAnZWxzZSc6IFtJTl9TSU5HTEVfUVVPVEUsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fRE9VQkxFX1FVT1RFXSA9IHtcbiAgJ1wiJzogW0lOX1NVQl9QQVRILCBBUFBFTkRdLFxuICAnZW9mJzogRVJST1IsXG4gICdlbHNlJzogW0lOX0RPVUJMRV9RVU9URSwgQVBQRU5EXVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBleHByZXNzaW9uIGlzIGEgbGl0ZXJhbCB2YWx1ZS5cbiAqL1xuXG52YXIgbGl0ZXJhbFZhbHVlUkUgPSAvXlxccz8oPzp0cnVlfGZhbHNlfC0/W1xcZC5dK3wnW14nXSonfFwiW15cIl0qXCIpXFxzPyQvO1xuZnVuY3Rpb24gaXNMaXRlcmFsIChleHApIHtcbiAgcmV0dXJuIGxpdGVyYWxWYWx1ZVJFLnRlc3QoZXhwKVxufVxuXG4vKipcbiAqIFN0cmlwIHF1b3RlcyBmcm9tIGEgc3RyaW5nXG4gKi9cblxuZnVuY3Rpb24gc3RyaXBRdW90ZXMgKHN0cikge1xuICB2YXIgYSA9IHN0ci5jaGFyQ29kZUF0KDApO1xuICB2YXIgYiA9IHN0ci5jaGFyQ29kZUF0KHN0ci5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIGEgPT09IGIgJiYgKGEgPT09IDB4MjIgfHwgYSA9PT0gMHgyNylcbiAgICA/IHN0ci5zbGljZSgxLCAtMSlcbiAgICA6IHN0clxufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgdHlwZSBvZiBhIGNoYXJhY3RlciBpbiBhIGtleXBhdGguXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aENoYXJUeXBlIChjaCkge1xuICBpZiAoY2ggPT09IHVuZGVmaW5lZCB8fCBjaCA9PT0gbnVsbCkgeyByZXR1cm4gJ2VvZicgfVxuXG4gIHZhciBjb2RlID0gY2guY2hhckNvZGVBdCgwKTtcblxuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIDB4NUI6IC8vIFtcbiAgICBjYXNlIDB4NUQ6IC8vIF1cbiAgICBjYXNlIDB4MkU6IC8vIC5cbiAgICBjYXNlIDB4MjI6IC8vIFwiXG4gICAgY2FzZSAweDI3OiAvLyAnXG4gICAgICByZXR1cm4gY2hcblxuICAgIGNhc2UgMHg1RjogLy8gX1xuICAgIGNhc2UgMHgyNDogLy8gJFxuICAgIGNhc2UgMHgyRDogLy8gLVxuICAgICAgcmV0dXJuICdpZGVudCdcblxuICAgIGNhc2UgMHgwOTogLy8gVGFiXG4gICAgY2FzZSAweDBBOiAvLyBOZXdsaW5lXG4gICAgY2FzZSAweDBEOiAvLyBSZXR1cm5cbiAgICBjYXNlIDB4QTA6ICAvLyBOby1icmVhayBzcGFjZVxuICAgIGNhc2UgMHhGRUZGOiAgLy8gQnl0ZSBPcmRlciBNYXJrXG4gICAgY2FzZSAweDIwMjg6ICAvLyBMaW5lIFNlcGFyYXRvclxuICAgIGNhc2UgMHgyMDI5OiAgLy8gUGFyYWdyYXBoIFNlcGFyYXRvclxuICAgICAgcmV0dXJuICd3cydcbiAgfVxuXG4gIHJldHVybiAnaWRlbnQnXG59XG5cbi8qKlxuICogRm9ybWF0IGEgc3ViUGF0aCwgcmV0dXJuIGl0cyBwbGFpbiBmb3JtIGlmIGl0IGlzXG4gKiBhIGxpdGVyYWwgc3RyaW5nIG9yIG51bWJlci4gT3RoZXJ3aXNlIHByZXBlbmQgdGhlXG4gKiBkeW5hbWljIGluZGljYXRvciAoKikuXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0U3ViUGF0aCAocGF0aCkge1xuICB2YXIgdHJpbW1lZCA9IHBhdGgudHJpbSgpO1xuICAvLyBpbnZhbGlkIGxlYWRpbmcgMFxuICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcwJyAmJiBpc05hTihwYXRoKSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIHJldHVybiBpc0xpdGVyYWwodHJpbW1lZCkgPyBzdHJpcFF1b3Rlcyh0cmltbWVkKSA6ICcqJyArIHRyaW1tZWRcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBwYXRoIGludG8gYW4gYXJyYXkgb2Ygc2VnbWVudHNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZSQxIChwYXRoKSB7XG4gIHZhciBrZXlzID0gW107XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbW9kZSA9IEJFRk9SRV9QQVRIO1xuICB2YXIgc3ViUGF0aERlcHRoID0gMDtcbiAgdmFyIGM7XG4gIHZhciBrZXk7XG4gIHZhciBuZXdDaGFyO1xuICB2YXIgdHlwZTtcbiAgdmFyIHRyYW5zaXRpb247XG4gIHZhciBhY3Rpb247XG4gIHZhciB0eXBlTWFwO1xuICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gIGFjdGlvbnNbUFVTSF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgYWN0aW9uc1tBUFBFTkRdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5ID0gbmV3Q2hhcjtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ICs9IG5ld0NoYXI7XG4gICAgfVxuICB9O1xuXG4gIGFjdGlvbnNbSU5DX1NVQl9QQVRIX0RFUFRIXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBhY3Rpb25zW0FQUEVORF0oKTtcbiAgICBzdWJQYXRoRGVwdGgrKztcbiAgfTtcblxuICBhY3Rpb25zW1BVU0hfU1VCX1BBVEhdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdWJQYXRoRGVwdGggPiAwKSB7XG4gICAgICBzdWJQYXRoRGVwdGgtLTtcbiAgICAgIG1vZGUgPSBJTl9TVUJfUEFUSDtcbiAgICAgIGFjdGlvbnNbQVBQRU5EXSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJQYXRoRGVwdGggPSAwO1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBrZXkgPSBmb3JtYXRTdWJQYXRoKGtleSk7XG4gICAgICBpZiAoa2V5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbnNbUFVTSF0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbWF5YmVVbmVzY2FwZVF1b3RlICgpIHtcbiAgICB2YXIgbmV4dENoYXIgPSBwYXRoW2luZGV4ICsgMV07XG4gICAgaWYgKChtb2RlID09PSBJTl9TSU5HTEVfUVVPVEUgJiYgbmV4dENoYXIgPT09IFwiJ1wiKSB8fFxuICAgICAgKG1vZGUgPT09IElOX0RPVUJMRV9RVU9URSAmJiBuZXh0Q2hhciA9PT0gJ1wiJykpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICBuZXdDaGFyID0gJ1xcXFwnICsgbmV4dENoYXI7XG4gICAgICBhY3Rpb25zW0FQUEVORF0oKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKG1vZGUgIT09IG51bGwpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSBwYXRoW2luZGV4XTtcblxuICAgIGlmIChjID09PSAnXFxcXCcgJiYgbWF5YmVVbmVzY2FwZVF1b3RlKCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdHlwZSA9IGdldFBhdGhDaGFyVHlwZShjKTtcbiAgICB0eXBlTWFwID0gcGF0aFN0YXRlTWFjaGluZVttb2RlXTtcbiAgICB0cmFuc2l0aW9uID0gdHlwZU1hcFt0eXBlXSB8fCB0eXBlTWFwWydlbHNlJ10gfHwgRVJST1I7XG5cbiAgICBpZiAodHJhbnNpdGlvbiA9PT0gRVJST1IpIHtcbiAgICAgIHJldHVybiAvLyBwYXJzZSBlcnJvclxuICAgIH1cblxuICAgIG1vZGUgPSB0cmFuc2l0aW9uWzBdO1xuICAgIGFjdGlvbiA9IGFjdGlvbnNbdHJhbnNpdGlvblsxXV07XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgbmV3Q2hhciA9IHRyYW5zaXRpb25bMl07XG4gICAgICBuZXdDaGFyID0gbmV3Q2hhciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gY1xuICAgICAgICA6IG5ld0NoYXI7XG4gICAgICBpZiAoYWN0aW9uKCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlID09PSBBRlRFUl9QQVRIKSB7XG4gICAgICByZXR1cm4ga2V5c1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbnZhciBJMThuUGF0aCA9IGZ1bmN0aW9uIEkxOG5QYXRoICgpIHtcbiAgdGhpcy5fY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufTtcblxuLyoqXG4gKiBFeHRlcm5hbCBwYXJzZSB0aGF0IGNoZWNrIGZvciBhIGNhY2hlIGhpdCBmaXJzdFxuICovXG5JMThuUGF0aC5wcm90b3R5cGUucGFyc2VQYXRoID0gZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIHZhciBoaXQgPSB0aGlzLl9jYWNoZVtwYXRoXTtcbiAgaWYgKCFoaXQpIHtcbiAgICBoaXQgPSBwYXJzZSQxKHBhdGgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHRoaXMuX2NhY2hlW3BhdGhdID0gaGl0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGl0IHx8IFtdXG59O1xuXG4vKipcbiAqIEdldCBwYXRoIHZhbHVlIGZyb20gcGF0aCBzdHJpbmdcbiAqL1xuSTE4blBhdGgucHJvdG90eXBlLmdldFBhdGhWYWx1ZSA9IGZ1bmN0aW9uIGdldFBhdGhWYWx1ZSAob2JqLCBwYXRoKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgeyByZXR1cm4gbnVsbCB9XG5cbiAgdmFyIHBhdGhzID0gdGhpcy5wYXJzZVBhdGgocGF0aCk7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgdmFyIGxhc3QgPSBvYmo7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBsYXN0W3BhdGhzW2ldXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBsYXN0ID0gdmFsdWU7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RcbiAgfVxufTtcblxuLyogICovXG5cblxuXG52YXIgaHRtbFRhZ01hdGNoZXIgPSAvPFxcLz9bXFx3XFxzPVwiLy4nOjsjLVxcL10rPi87XG52YXIgbGlua0tleU1hdGNoZXIgPSAvKD86QCg/OlxcLlthLXpdKyk/Oig/OltcXHdcXC1ffC5dK3xcXChbXFx3XFwtX3wuXStcXCkpKS9nO1xudmFyIGxpbmtLZXlQcmVmaXhNYXRjaGVyID0gL15AKD86XFwuKFthLXpdKykpPzovO1xudmFyIGJyYWNrZXRzTWF0Y2hlciA9IC9bKCldL2c7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IHtcbiAgJ3VwcGVyJzogZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnRvTG9jYWxlVXBwZXJDYXNlKCk7IH0sXG4gICdsb3dlcic6IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0ci50b0xvY2FsZUxvd2VyQ2FzZSgpOyB9XG59O1xuXG52YXIgZGVmYXVsdEZvcm1hdHRlciA9IG5ldyBCYXNlRm9ybWF0dGVyKCk7XG5cbnZhciBWdWVJMThuID0gZnVuY3Rpb24gVnVlSTE4biAob3B0aW9ucykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgLy8gQXV0byBpbnN0YWxsIGlmIGl0IGlzIG5vdCBkb25lIHlldCBhbmQgYHdpbmRvd2AgaGFzIGBWdWVgLlxuICAvLyBUbyBhbGxvdyB1c2VycyB0byBhdm9pZCBhdXRvLWluc3RhbGxhdGlvbiBpbiBzb21lIGNhc2VzLFxuICAvLyB0aGlzIGNvZGUgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLiBTZWUgIzI5MFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFWdWUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAgIGluc3RhbGwod2luZG93LlZ1ZSk7XG4gIH1cblxuICB2YXIgbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgJ2VuLVVTJztcbiAgdmFyIGZhbGxiYWNrTG9jYWxlID0gb3B0aW9ucy5mYWxsYmFja0xvY2FsZSB8fCAnZW4tVVMnO1xuICB2YXIgbWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzIHx8IHt9O1xuICB2YXIgZGF0ZVRpbWVGb3JtYXRzID0gb3B0aW9ucy5kYXRlVGltZUZvcm1hdHMgfHwge307XG4gIHZhciBudW1iZXJGb3JtYXRzID0gb3B0aW9ucy5udW1iZXJGb3JtYXRzIHx8IHt9O1xuXG4gIHRoaXMuX3ZtID0gbnVsbDtcbiAgdGhpcy5fZm9ybWF0dGVyID0gb3B0aW9ucy5mb3JtYXR0ZXIgfHwgZGVmYXVsdEZvcm1hdHRlcjtcbiAgdGhpcy5fbW9kaWZpZXJzID0gb3B0aW9ucy5tb2RpZmllcnMgfHwge307XG4gIHRoaXMuX21pc3NpbmcgPSBvcHRpb25zLm1pc3NpbmcgfHwgbnVsbDtcbiAgdGhpcy5fcm9vdCA9IG9wdGlvbnMucm9vdCB8fCBudWxsO1xuICB0aGlzLl9zeW5jID0gb3B0aW9ucy5zeW5jID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnN5bmM7XG4gIHRoaXMuX2ZhbGxiYWNrUm9vdCA9IG9wdGlvbnMuZmFsbGJhY2tSb290ID09PSB1bmRlZmluZWRcbiAgICA/IHRydWVcbiAgICA6ICEhb3B0aW9ucy5mYWxsYmFja1Jvb3Q7XG4gIHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPSBvcHRpb25zLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSBvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FybiA9PT0gdW5kZWZpbmVkXG4gICAgPyBmYWxzZVxuICAgIDogb3B0aW9ucy5zaWxlbnRUcmFuc2xhdGlvbldhcm47XG4gIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IG9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuID09PSB1bmRlZmluZWRcbiAgICA/IGZhbHNlXG4gICAgOiAhIW9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuO1xuICB0aGlzLl9kYXRlVGltZUZvcm1hdHRlcnMgPSB7fTtcbiAgdGhpcy5fbnVtYmVyRm9ybWF0dGVycyA9IHt9O1xuICB0aGlzLl9wYXRoID0gbmV3IEkxOG5QYXRoKCk7XG4gIHRoaXMuX2RhdGFMaXN0ZW5lcnMgPSBbXTtcbiAgdGhpcy5fcHJlc2VydmVEaXJlY3RpdmVDb250ZW50ID0gb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQ7XG4gIHRoaXMucGx1cmFsaXphdGlvblJ1bGVzID0gb3B0aW9ucy5wbHVyYWxpemF0aW9uUnVsZXMgfHwge307XG4gIHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID0gb3B0aW9ucy53YXJuSHRtbEluTWVzc2FnZSB8fCAnb2ZmJztcblxuICB0aGlzLl9leGlzdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIWtleSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmICghaXNOdWxsKHRoaXMkMS5fcGF0aC5nZXRQYXRoVmFsdWUobWVzc2FnZSwga2V5KSkpIHsgcmV0dXJuIHRydWUgfVxuICAgIC8vIGZhbGxiYWNrIGZvciBmbGF0IGtleVxuICAgIGlmIChtZXNzYWdlW2tleV0pIHsgcmV0dXJuIHRydWUgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgdGhpcyQxLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzJDEuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlc1tsb2NhbGVdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2luaXRWTSh7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZmFsbGJhY2tMb2NhbGU6IGZhbGxiYWNrTG9jYWxlLFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICBkYXRlVGltZUZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBudW1iZXJGb3JtYXRzOiBudW1iZXJGb3JtYXRzXG4gIH0pO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgdm06IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sbWVzc2FnZXM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZGF0ZVRpbWVGb3JtYXRzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LG51bWJlckZvcm1hdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sYXZhaWxhYmxlTG9jYWxlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxsb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZmFsbGJhY2tMb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZm9ybWF0RmFsbGJhY2tNZXNzYWdlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxtaXNzaW5nOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGZvcm1hdHRlcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxzaWxlbnRUcmFuc2xhdGlvbldhcm46IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sc2lsZW50RmFsbGJhY2tXYXJuOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LHByZXNlcnZlRGlyZWN0aXZlQ29udGVudDogeyBjb25maWd1cmFibGU6IHRydWUgfSx3YXJuSHRtbEluTWVzc2FnZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fY2hlY2tMb2NhbGVNZXNzYWdlID0gZnVuY3Rpb24gX2NoZWNrTG9jYWxlTWVzc2FnZSAobG9jYWxlLCBsZXZlbCwgbWVzc2FnZSkge1xuICB2YXIgcGF0aHMgPSBbXTtcblxuICB2YXIgZm4gPSBmdW5jdGlvbiAobGV2ZWwsIGxvY2FsZSwgbWVzc2FnZSwgcGF0aHMpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChtZXNzYWdlKSkge1xuICAgICAgT2JqZWN0LmtleXMobWVzc2FnZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBtZXNzYWdlW2tleV07XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICBwYXRocy5wdXNoKGtleSk7XG4gICAgICAgICAgcGF0aHMucHVzaCgnLicpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIHZhbCwgcGF0aHMpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGhzLnB1c2goa2V5KTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCB2YWwsIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSB7XG4gICAgICBtZXNzYWdlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgcGF0aHMucHVzaCgoXCJbXCIgKyBpbmRleCArIFwiXVwiKSk7XG4gICAgICAgICAgcGF0aHMucHVzaCgnLicpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIGl0ZW0sIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXRocy5wdXNoKChcIltcIiArIGluZGV4ICsgXCJdXCIpKTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCBpdGVtLCBwYXRocyk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcmV0ID0gaHRtbFRhZ01hdGNoZXIudGVzdChtZXNzYWdlKTtcbiAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgdmFyIG1zZyA9IFwiRGV0ZWN0ZWQgSFRNTCBpbiBtZXNzYWdlICdcIiArIG1lc3NhZ2UgKyBcIicgb2Yga2V5cGF0aCAnXCIgKyAocGF0aHMuam9pbignJykpICsgXCInIGF0ICdcIiArIGxvY2FsZSArIFwiJy4gQ29uc2lkZXIgY29tcG9uZW50IGludGVycG9sYXRpb24gd2l0aCAnPGkxOG4+JyB0byBhdm9pZCBYU1MuIFNlZSBodHRwczovL2JpdC5seS8yWnFKemtwXCI7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gJ3dhcm4nKSB7XG4gICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKGxldmVsID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgZXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmbihsZXZlbCwgbG9jYWxlLCBtZXNzYWdlLCBwYXRocyk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faW5pdFZNID0gZnVuY3Rpb24gX2luaXRWTSAoZGF0YSkge1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgdGhpcy5fdm0gPSBuZXcgVnVlKHsgZGF0YTogZGF0YSB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5kZXN0cm95Vk0gPSBmdW5jdGlvbiBkZXN0cm95Vk0gKCkge1xuICB0aGlzLl92bS4kZGVzdHJveSgpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuc3Vic2NyaWJlRGF0YUNoYW5naW5nID0gZnVuY3Rpb24gc3Vic2NyaWJlRGF0YUNoYW5naW5nICh2bSkge1xuICB0aGlzLl9kYXRhTGlzdGVuZXJzLnB1c2godm0pO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudW5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcgPSBmdW5jdGlvbiB1bnN1YnNjcmliZURhdGFDaGFuZ2luZyAodm0pIHtcbiAgcmVtb3ZlKHRoaXMuX2RhdGFMaXN0ZW5lcnMsIHZtKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLndhdGNoSTE4bkRhdGEgPSBmdW5jdGlvbiB3YXRjaEkxOG5EYXRhICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gdGhpcy5fdm0uJHdhdGNoKCckZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHNlbGYuX2RhdGFMaXN0ZW5lcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuX2RhdGFMaXN0ZW5lcnNbaV0gJiYgc2VsZi5fZGF0YUxpc3RlbmVyc1tpXS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlIH0pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS53YXRjaExvY2FsZSA9IGZ1bmN0aW9uIHdhdGNoTG9jYWxlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghdGhpcy5fc3luYyB8fCAhdGhpcy5fcm9vdCkgeyByZXR1cm4gbnVsbCB9XG4gIHZhciB0YXJnZXQgPSB0aGlzLl92bTtcbiAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4udm0uJHdhdGNoKCdsb2NhbGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgdGFyZ2V0LiRzZXQodGFyZ2V0LCAnbG9jYWxlJywgdmFsKTtcbiAgICB0YXJnZXQuJGZvcmNlVXBkYXRlKCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMudm0uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLm1lc3NhZ2VzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fZ2V0TWVzc2FnZXMoKSkgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5kYXRlVGltZUZvcm1hdHMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl9nZXREYXRlVGltZUZvcm1hdHMoKSkgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5udW1iZXJGb3JtYXRzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpKSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmF2YWlsYWJsZUxvY2FsZXMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXNzYWdlcykuc29ydCgpIH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5sb2NhbGUuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0ubG9jYWxlIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubG9jYWxlLnNldCA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bSwgJ2xvY2FsZScsIGxvY2FsZSk7XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZmFsbGJhY2tMb2NhbGUuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0uZmFsbGJhY2tMb2NhbGUgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mYWxsYmFja0xvY2FsZS5zZXQgPSBmdW5jdGlvbiAobG9jYWxlKSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0sICdmYWxsYmFja0xvY2FsZScsIGxvY2FsZSk7XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5zZXQgPSBmdW5jdGlvbiAoZmFsbGJhY2spIHsgdGhpcy5fZm9ybWF0RmFsbGJhY2tNZXNzYWdlcyA9IGZhbGxiYWNrOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9taXNzaW5nIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5zZXQgPSBmdW5jdGlvbiAoaGFuZGxlcikgeyB0aGlzLl9taXNzaW5nID0gaGFuZGxlcjsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmZvcm1hdHRlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXR0ZXIgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mb3JtYXR0ZXIuc2V0ID0gZnVuY3Rpb24gKGZvcm1hdHRlcikgeyB0aGlzLl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5zaWxlbnRUcmFuc2xhdGlvbldhcm4uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50VHJhbnNsYXRpb25XYXJuLnNldCA9IGZ1bmN0aW9uIChzaWxlbnQpIHsgdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuID0gc2lsZW50OyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50RmFsbGJhY2tXYXJuLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiB9O1xucHJvdG90eXBlQWNjZXNzb3JzLnNpbGVudEZhbGxiYWNrV2Fybi5zZXQgPSBmdW5jdGlvbiAoc2lsZW50KSB7IHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IHNpbGVudDsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudC5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQuc2V0ID0gZnVuY3Rpb24gKHByZXNlcnZlKSB7IHRoaXMuX3ByZXNlcnZlRGlyZWN0aXZlQ29udGVudCA9IHByZXNlcnZlOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMud2Fybkh0bWxJbk1lc3NhZ2UuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy53YXJuSHRtbEluTWVzc2FnZS5zZXQgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb3JnTGV2ZWwgPSB0aGlzLl93YXJuSHRtbEluTWVzc2FnZTtcbiAgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPSBsZXZlbDtcbiAgaWYgKG9yZ0xldmVsICE9PSBsZXZlbCAmJiAobGV2ZWwgPT09ICd3YXJuJyB8fCBsZXZlbCA9PT0gJ2Vycm9yJykpIHtcbiAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLl9nZXRNZXNzYWdlcygpO1xuICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgIHRoaXMkMS5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcyQxLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZXNbbG9jYWxlXSk7XG4gICAgfSk7XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXRNZXNzYWdlcyA9IGZ1bmN0aW9uIF9nZXRNZXNzYWdlcyAoKSB7IHJldHVybiB0aGlzLl92bS5tZXNzYWdlcyB9O1xuVnVlSTE4bi5wcm90b3R5cGUuX2dldERhdGVUaW1lRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXREYXRlVGltZUZvcm1hdHMgKCkgeyByZXR1cm4gdGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzIH07XG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TnVtYmVyRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXROdW1iZXJGb3JtYXRzICgpIHsgcmV0dXJuIHRoaXMuX3ZtLm51bWJlckZvcm1hdHMgfTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3dhcm5EZWZhdWx0ID0gZnVuY3Rpb24gX3dhcm5EZWZhdWx0IChsb2NhbGUsIGtleSwgcmVzdWx0LCB2bSwgdmFsdWVzKSB7XG4gIGlmICghaXNOdWxsKHJlc3VsdCkpIHsgcmV0dXJuIHJlc3VsdCB9XG4gIGlmICh0aGlzLl9taXNzaW5nKSB7XG4gICAgdmFyIG1pc3NpbmdSZXQgPSB0aGlzLl9taXNzaW5nLmFwcGx5KG51bGwsIFtsb2NhbGUsIGtleSwgdm0sIHZhbHVlc10pO1xuICAgIGlmICh0eXBlb2YgbWlzc2luZ1JldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtaXNzaW5nUmV0XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIkNhbm5vdCB0cmFuc2xhdGUgdGhlIHZhbHVlIG9mIGtleXBhdGggJ1wiICsga2V5ICsgXCInLiBcIiArXG4gICAgICAgICdVc2UgdGhlIHZhbHVlIG9mIGtleXBhdGggYXMgZGVmYXVsdC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzKSB7XG4gICAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXIoa2V5LCAnc3RyaW5nJywgcGFyc2VkQXJncy5wYXJhbXMsIGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ga2V5XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc0ZhbGxiYWNrUm9vdCA9IGZ1bmN0aW9uIF9pc0ZhbGxiYWNrUm9vdCAodmFsKSB7XG4gIHJldHVybiAhdmFsICYmICFpc051bGwodGhpcy5fcm9vdCkgJiYgdGhpcy5fZmFsbGJhY2tSb290XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faXNTaWxlbnRGYWxsYmFja1dhcm4gPSBmdW5jdGlvbiBfaXNTaWxlbnRGYWxsYmFja1dhcm4gKGtleSkge1xuICByZXR1cm4gdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgPyB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm4udGVzdChrZXkpXG4gICAgOiB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm5cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudEZhbGxiYWNrID0gZnVuY3Rpb24gX2lzU2lsZW50RmFsbGJhY2sgKGxvY2FsZSwga2V5KSB7XG4gIHJldHVybiB0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpICYmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdCgpIHx8IGxvY2FsZSAhPT0gdGhpcy5mYWxsYmFja0xvY2FsZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiA9IGZ1bmN0aW9uIF9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiAoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gaW5zdGFuY2VvZiBSZWdFeHBcbiAgICA/IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2Fybi50ZXN0KGtleSlcbiAgICA6IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2FyblxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gX2ludGVycG9sYXRlIChcbiAgbG9jYWxlLFxuICBtZXNzYWdlLFxuICBrZXksXG4gIGhvc3QsXG4gIGludGVycG9sYXRlTW9kZSxcbiAgdmFsdWVzLFxuICB2aXNpdGVkTGlua1N0YWNrXG4pIHtcbiAgaWYgKCFtZXNzYWdlKSB7IHJldHVybiBudWxsIH1cblxuICB2YXIgcGF0aFJldCA9IHRoaXMuX3BhdGguZ2V0UGF0aFZhbHVlKG1lc3NhZ2UsIGtleSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGhSZXQpIHx8IGlzUGxhaW5PYmplY3QocGF0aFJldCkpIHsgcmV0dXJuIHBhdGhSZXQgfVxuXG4gIHZhciByZXQ7XG4gIGlmIChpc051bGwocGF0aFJldCkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG1lc3NhZ2UpKSB7XG4gICAgICByZXQgPSBtZXNzYWdlW2tleV07XG4gICAgICBpZiAodHlwZW9mIHJldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJWYWx1ZSBvZiBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhIHN0cmluZyFcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBwYXRoUmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0ID0gcGF0aFJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oKFwiVmFsdWUgb2Yga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgYSBzdHJpbmchXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbGlua3Mgd2l0aGluIHRoZSB0cmFuc2xhdGVkIHN0cmluZ1xuICBpZiAocmV0LmluZGV4T2YoJ0A6JykgPj0gMCB8fCByZXQuaW5kZXhPZignQC4nKSA+PSAwKSB7XG4gICAgcmV0ID0gdGhpcy5fbGluayhsb2NhbGUsIG1lc3NhZ2UsIHJldCwgaG9zdCwgJ3JhdycsIHZhbHVlcywgdmlzaXRlZExpbmtTdGFjayk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fcmVuZGVyKHJldCwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXMsIGtleSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9saW5rID0gZnVuY3Rpb24gX2xpbmsgKFxuICBsb2NhbGUsXG4gIG1lc3NhZ2UsXG4gIHN0cixcbiAgaG9zdCxcbiAgaW50ZXJwb2xhdGVNb2RlLFxuICB2YWx1ZXMsXG4gIHZpc2l0ZWRMaW5rU3RhY2tcbikge1xuICB2YXIgcmV0ID0gc3RyO1xuXG4gIC8vIE1hdGNoIGFsbCB0aGUgbGlua3Mgd2l0aGluIHRoZSBsb2NhbFxuICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBlYWNoIG9mXG4gIC8vIHRoZW0gd2l0aCBpdHMgdHJhbnNsYXRpb25cbiAgdmFyIG1hdGNoZXMgPSByZXQubWF0Y2gobGlua0tleU1hdGNoZXIpO1xuICBmb3IgKHZhciBpZHggaW4gbWF0Y2hlcykge1xuICAgIC8vIGllIGNvbXBhdGlibGU6IGZpbHRlciBjdXN0b20gYXJyYXlcbiAgICAvLyBwcm90b3R5cGUgbWV0aG9kXG4gICAgaWYgKCFtYXRjaGVzLmhhc093blByb3BlcnR5KGlkeCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHZhciBsaW5rID0gbWF0Y2hlc1tpZHhdO1xuICAgIHZhciBsaW5rS2V5UHJlZml4TWF0Y2hlcyA9IGxpbmsubWF0Y2gobGlua0tleVByZWZpeE1hdGNoZXIpO1xuICAgIHZhciBsaW5rUHJlZml4ID0gbGlua0tleVByZWZpeE1hdGNoZXNbMF07XG4gICAgICB2YXIgZm9ybWF0dGVyTmFtZSA9IGxpbmtLZXlQcmVmaXhNYXRjaGVzWzFdO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIEA6LCBALmNhc2U6IGFuZCB0aGUgYnJhY2tldHNcbiAgICB2YXIgbGlua1BsYWNlaG9sZGVyID0gbGluay5yZXBsYWNlKGxpbmtQcmVmaXgsICcnKS5yZXBsYWNlKGJyYWNrZXRzTWF0Y2hlciwgJycpO1xuXG4gICAgaWYgKHZpc2l0ZWRMaW5rU3RhY2suaW5jbHVkZXMobGlua1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigoXCJDaXJjdWxhciByZWZlcmVuY2UgZm91bmQuIFxcXCJcIiArIGxpbmsgKyBcIlxcXCIgaXMgYWxyZWFkeSB2aXNpdGVkIGluIHRoZSBjaGFpbiBvZiBcIiArICh2aXNpdGVkTGlua1N0YWNrLnJldmVyc2UoKS5qb2luKCcgPC0gJykpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICAgIHZpc2l0ZWRMaW5rU3RhY2sucHVzaChsaW5rUGxhY2Vob2xkZXIpO1xuXG4gICAgLy8gVHJhbnNsYXRlIHRoZSBsaW5rXG4gICAgdmFyIHRyYW5zbGF0ZWQgPSB0aGlzLl9pbnRlcnBvbGF0ZShcbiAgICAgIGxvY2FsZSwgbWVzc2FnZSwgbGlua1BsYWNlaG9sZGVyLCBob3N0LFxuICAgICAgaW50ZXJwb2xhdGVNb2RlID09PSAncmF3JyA/ICdzdHJpbmcnIDogaW50ZXJwb2xhdGVNb2RlLFxuICAgICAgaW50ZXJwb2xhdGVNb2RlID09PSAncmF3JyA/IHVuZGVmaW5lZCA6IHZhbHVlcyxcbiAgICAgIHZpc2l0ZWRMaW5rU3RhY2tcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHRyYW5zbGF0ZWQpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4obGlua1BsYWNlaG9sZGVyKSkge1xuICAgICAgICB3YXJuKChcIkZhbGwgYmFjayB0byB0cmFuc2xhdGUgdGhlIGxpbmsgcGxhY2Vob2xkZXIgJ1wiICsgbGlua1BsYWNlaG9sZGVyICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgICAgdmFyIHJvb3QgPSB0aGlzLl9yb290LiRpMThuO1xuICAgICAgdHJhbnNsYXRlZCA9IHJvb3QuX3RyYW5zbGF0ZShcbiAgICAgICAgcm9vdC5fZ2V0TWVzc2FnZXMoKSwgcm9vdC5sb2NhbGUsIHJvb3QuZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIGxpbmtQbGFjZWhvbGRlciwgaG9zdCwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXNcbiAgICAgICk7XG4gICAgfVxuICAgIHRyYW5zbGF0ZWQgPSB0aGlzLl93YXJuRGVmYXVsdChcbiAgICAgIGxvY2FsZSwgbGlua1BsYWNlaG9sZGVyLCB0cmFuc2xhdGVkLCBob3N0LFxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc11cbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX21vZGlmaWVycy5oYXNPd25Qcm9wZXJ0eShmb3JtYXR0ZXJOYW1lKSkge1xuICAgICAgdHJhbnNsYXRlZCA9IHRoaXMuX21vZGlmaWVyc1tmb3JtYXR0ZXJOYW1lXSh0cmFuc2xhdGVkKTtcbiAgICB9IGVsc2UgaWYgKGRlZmF1bHRNb2RpZmllcnMuaGFzT3duUHJvcGVydHkoZm9ybWF0dGVyTmFtZSkpIHtcbiAgICAgIHRyYW5zbGF0ZWQgPSBkZWZhdWx0TW9kaWZpZXJzW2Zvcm1hdHRlck5hbWVdKHRyYW5zbGF0ZWQpO1xuICAgIH1cblxuICAgIHZpc2l0ZWRMaW5rU3RhY2sucG9wKCk7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBsaW5rIHdpdGggdGhlIHRyYW5zbGF0ZWRcbiAgICByZXQgPSAhdHJhbnNsYXRlZCA/IHJldCA6IHJldC5yZXBsYWNlKGxpbmssIHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgcmV0dXJuIHJldFxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uIF9yZW5kZXIgKG1lc3NhZ2UsIGludGVycG9sYXRlTW9kZSwgdmFsdWVzLCBwYXRoKSB7XG4gIHZhciByZXQgPSB0aGlzLl9mb3JtYXR0ZXIuaW50ZXJwb2xhdGUobWVzc2FnZSwgdmFsdWVzLCBwYXRoKTtcblxuICAvLyBJZiB0aGUgY3VzdG9tIGZvcm1hdHRlciByZWZ1c2VzIHRvIHdvcmsgLSBhcHBseSB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKCFyZXQpIHtcbiAgICByZXQgPSBkZWZhdWx0Rm9ybWF0dGVyLmludGVycG9sYXRlKG1lc3NhZ2UsIHZhbHVlcywgcGF0aCk7XG4gIH1cblxuICAvLyBpZiBpbnRlcnBvbGF0ZU1vZGUgaXMgKipub3QqKiAnc3RyaW5nJyAoJ3JvdycpLFxuICAvLyByZXR1cm4gdGhlIGNvbXBpbGVkIGRhdGEgKGUuZy4gWydmb28nLCBWTm9kZSwgJ2JhciddKSB3aXRoIGZvcm1hdHRlclxuICByZXR1cm4gaW50ZXJwb2xhdGVNb2RlID09PSAnc3RyaW5nJyA/IHJldC5qb2luKCcnKSA6IHJldFxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3RyYW5zbGF0ZSA9IGZ1bmN0aW9uIF90cmFuc2xhdGUgKFxuICBtZXNzYWdlcyxcbiAgbG9jYWxlLFxuICBmYWxsYmFjayxcbiAga2V5LFxuICBob3N0LFxuICBpbnRlcnBvbGF0ZU1vZGUsXG4gIGFyZ3Ncbikge1xuICB2YXIgcmVzID1cbiAgICB0aGlzLl9pbnRlcnBvbGF0ZShsb2NhbGUsIG1lc3NhZ2VzW2xvY2FsZV0sIGtleSwgaG9zdCwgaW50ZXJwb2xhdGVNb2RlLCBhcmdzLCBba2V5XSk7XG4gIGlmICghaXNOdWxsKHJlcykpIHsgcmV0dXJuIHJlcyB9XG5cbiAgcmVzID0gdGhpcy5faW50ZXJwb2xhdGUoZmFsbGJhY2ssIG1lc3NhZ2VzW2ZhbGxiYWNrXSwga2V5LCBob3N0LCBpbnRlcnBvbGF0ZU1vZGUsIGFyZ3MsIFtrZXldKTtcbiAgaWYgKCFpc051bGwocmVzKSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byB0cmFuc2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggJ1wiICsgZmFsbGJhY2sgKyBcIicgbG9jYWxlLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdCA9IGZ1bmN0aW9uIF90IChrZXksIF9sb2NhbGUsIG1lc3NhZ2VzLCBob3N0KSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDQ7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyA0IF07XG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG5cbiAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICB2YXIgbG9jYWxlID0gcGFyc2VkQXJncy5sb2NhbGUgfHwgX2xvY2FsZTtcblxuICB2YXIgcmV0ID0gdGhpcy5fdHJhbnNsYXRlKFxuICAgIG1lc3NhZ2VzLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIGtleSxcbiAgICBob3N0LCAnc3RyaW5nJywgcGFyc2VkQXJncy5wYXJhbXNcbiAgKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gdHJhbnNsYXRlIHRoZSBrZXlwYXRoICdcIiArIGtleSArIFwiJyB3aXRoIHJvb3QgbG9jYWxlLlwiKSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5fcm9vdCkgeyB0aHJvdyBFcnJvcigndW5leHBlY3RlZCBlcnJvcicpIH1cbiAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3Jvb3QpLiR0LmFwcGx5KHJlZiwgWyBrZXkgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl93YXJuRGVmYXVsdChsb2NhbGUsIGtleSwgcmV0LCBob3N0LCB2YWx1ZXMpXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnQgPSBmdW5jdGlvbiB0IChrZXkpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcbiAgcmV0dXJuIChyZWYgPSB0aGlzKS5fdC5hcHBseShyZWYsIFsga2V5LCB0aGlzLmxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbnVsbCBdLmNvbmNhdCggdmFsdWVzICkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faSA9IGZ1bmN0aW9uIF9pIChrZXksIGxvY2FsZSwgbWVzc2FnZXMsIGhvc3QsIHZhbHVlcykge1xuICB2YXIgcmV0ID1cbiAgICB0aGlzLl90cmFuc2xhdGUobWVzc2FnZXMsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwga2V5LCBob3N0LCAncmF3JywgdmFsdWVzKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gaW50ZXJwb2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmkoa2V5LCBsb2NhbGUsIHZhbHVlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fd2FybkRlZmF1bHQobG9jYWxlLCBrZXksIHJldCwgaG9zdCwgW3ZhbHVlc10pXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmkgPSBmdW5jdGlvbiBpIChrZXksIGxvY2FsZSwgdmFsdWVzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWtleSkgeyByZXR1cm4gJycgfVxuXG4gIGlmICh0eXBlb2YgbG9jYWxlICE9PSAnc3RyaW5nJykge1xuICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2koa2V5LCBsb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIG51bGwsIHZhbHVlcylcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl90YyA9IGZ1bmN0aW9uIF90YyAoXG4gIGtleSxcbiAgX2xvY2FsZSxcbiAgbWVzc2FnZXMsXG4gIGhvc3QsXG4gIGNob2ljZVxuKSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDU7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyA1IF07XG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG4gIGlmIChjaG9pY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIGNob2ljZSA9IDE7XG4gIH1cblxuICB2YXIgcHJlZGVmaW5lZCA9IHsgJ2NvdW50JzogY2hvaWNlLCAnbic6IGNob2ljZSB9O1xuICB2YXIgcGFyc2VkQXJncyA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIHZhbHVlcyk7XG4gIHBhcnNlZEFyZ3MucGFyYW1zID0gT2JqZWN0LmFzc2lnbihwcmVkZWZpbmVkLCBwYXJzZWRBcmdzLnBhcmFtcyk7XG4gIHZhbHVlcyA9IHBhcnNlZEFyZ3MubG9jYWxlID09PSBudWxsID8gW3BhcnNlZEFyZ3MucGFyYW1zXSA6IFtwYXJzZWRBcmdzLmxvY2FsZSwgcGFyc2VkQXJncy5wYXJhbXNdO1xuICByZXR1cm4gdGhpcy5mZXRjaENob2ljZSgocmVmID0gdGhpcykuX3QuYXBwbHkocmVmLCBbIGtleSwgX2xvY2FsZSwgbWVzc2FnZXMsIGhvc3QgXS5jb25jYXQoIHZhbHVlcyApKSwgY2hvaWNlKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZmV0Y2hDaG9pY2UgPSBmdW5jdGlvbiBmZXRjaENob2ljZSAobWVzc2FnZSwgY2hvaWNlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIW1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIGNob2ljZXMgPSBtZXNzYWdlLnNwbGl0KCd8Jyk7XG5cbiAgY2hvaWNlID0gdGhpcy5nZXRDaG9pY2VJbmRleChjaG9pY2UsIGNob2ljZXMubGVuZ3RoKTtcbiAgaWYgKCFjaG9pY2VzW2Nob2ljZV0pIHsgcmV0dXJuIG1lc3NhZ2UgfVxuICByZXR1cm4gY2hvaWNlc1tjaG9pY2VdLnRyaW0oKVxufTtcblxuLyoqXG4gKiBAcGFyYW0gY2hvaWNlIHtudW1iZXJ9IGEgY2hvaWNlIGluZGV4IGdpdmVuIGJ5IHRoZSBpbnB1dCB0byAkdGM6IGAkdGMoJ3BhdGgudG8ucnVsZScsIGNob2ljZUluZGV4KWBcbiAqIEBwYXJhbSBjaG9pY2VzTGVuZ3RoIHtudW1iZXJ9IGFuIG92ZXJhbGwgYW1vdW50IG9mIGF2YWlsYWJsZSBjaG9pY2VzXG4gKiBAcmV0dXJucyBhIGZpbmFsIGNob2ljZSBpbmRleFxuKi9cblZ1ZUkxOG4ucHJvdG90eXBlLmdldENob2ljZUluZGV4ID0gZnVuY3Rpb24gZ2V0Q2hvaWNlSW5kZXggKGNob2ljZSwgY2hvaWNlc0xlbmd0aCkge1xuICAvLyBEZWZhdWx0IChvbGQpIGdldENob2ljZUluZGV4IGltcGxlbWVudGF0aW9uIC0gZW5nbGlzaC1jb21wYXRpYmxlXG4gIHZhciBkZWZhdWx0SW1wbCA9IGZ1bmN0aW9uIChfY2hvaWNlLCBfY2hvaWNlc0xlbmd0aCkge1xuICAgIF9jaG9pY2UgPSBNYXRoLmFicyhfY2hvaWNlKTtcblxuICAgIGlmIChfY2hvaWNlc0xlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIF9jaG9pY2VcbiAgICAgICAgPyBfY2hvaWNlID4gMVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMFxuICAgICAgICA6IDFcbiAgICB9XG5cbiAgICByZXR1cm4gX2Nob2ljZSA/IE1hdGgubWluKF9jaG9pY2UsIDIpIDogMFxuICB9O1xuXG4gIGlmICh0aGlzLmxvY2FsZSBpbiB0aGlzLnBsdXJhbGl6YXRpb25SdWxlcykge1xuICAgIHJldHVybiB0aGlzLnBsdXJhbGl6YXRpb25SdWxlc1t0aGlzLmxvY2FsZV0uYXBwbHkodGhpcywgW2Nob2ljZSwgY2hvaWNlc0xlbmd0aF0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZmF1bHRJbXBsKGNob2ljZSwgY2hvaWNlc0xlbmd0aClcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudGMgPSBmdW5jdGlvbiB0YyAoa2V5LCBjaG9pY2UpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDIgXTtcbiAgcmV0dXJuIChyZWYgPSB0aGlzKS5fdGMuYXBwbHkocmVmLCBbIGtleSwgdGhpcy5sb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIG51bGwsIGNob2ljZSBdLmNvbmNhdCggdmFsdWVzICkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdGUgPSBmdW5jdGlvbiBfdGUgKGtleSwgbG9jYWxlLCBtZXNzYWdlcykge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAzO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDMgXTtcblxuICB2YXIgX2xvY2FsZSA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIGFyZ3MpLmxvY2FsZSB8fCBsb2NhbGU7XG4gIHJldHVybiB0aGlzLl9leGlzdChtZXNzYWdlc1tfbG9jYWxlXSwga2V5KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudGUgPSBmdW5jdGlvbiB0ZSAoa2V5LCBsb2NhbGUpIHtcbiAgcmV0dXJuIHRoaXMuX3RlKGtleSwgdGhpcy5sb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIGxvY2FsZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmdldExvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBnZXRMb2NhbGVNZXNzYWdlIChsb2NhbGUpIHtcbiAgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fdm0ubWVzc2FnZXNbbG9jYWxlXSB8fCB7fSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnNldExvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBzZXRMb2NhbGVNZXNzYWdlIChsb2NhbGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnd2FybicgfHwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICdlcnJvcicpIHtcbiAgICB0aGlzLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7IHJldHVybiB9XG4gIH1cbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5tZXNzYWdlcywgbG9jYWxlLCBtZXNzYWdlKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm1lcmdlTG9jYWxlTWVzc2FnZSA9IGZ1bmN0aW9uIG1lcmdlTG9jYWxlTWVzc2FnZSAobG9jYWxlLCBtZXNzYWdlKSB7XG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgdGhpcy5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UsIG1lc3NhZ2UpO1xuICAgIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ2Vycm9yJykgeyByZXR1cm4gfVxuICB9XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubWVzc2FnZXMsIGxvY2FsZSwgbWVyZ2UodGhpcy5fdm0ubWVzc2FnZXNbbG9jYWxlXSB8fCB7fSwgbWVzc2FnZSkpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZ2V0RGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBnZXREYXRlVGltZUZvcm1hdCAobG9jYWxlKSB7XG4gIHJldHVybiBsb29zZUNsb25lKHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0c1tsb2NhbGVdIHx8IHt9KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuc2V0RGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBzZXREYXRlVGltZUZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5kYXRlVGltZUZvcm1hdHMsIGxvY2FsZSwgZm9ybWF0KTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm1lcmdlRGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBtZXJnZURhdGVUaW1lRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0cywgbG9jYWxlLCBtZXJnZSh0aGlzLl92bS5kYXRlVGltZUZvcm1hdHNbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fbG9jYWxpemVEYXRlVGltZSA9IGZ1bmN0aW9uIF9sb2NhbGl6ZURhdGVUaW1lIChcbiAgdmFsdWUsXG4gIGxvY2FsZSxcbiAgZmFsbGJhY2ssXG4gIGRhdGVUaW1lRm9ybWF0cyxcbiAga2V5XG4pIHtcbiAgdmFyIF9sb2NhbGUgPSBsb2NhbGU7XG4gIHZhciBmb3JtYXRzID0gZGF0ZVRpbWVGb3JtYXRzW19sb2NhbGVdO1xuXG4gIC8vIGZhbGxiYWNrIGxvY2FsZVxuICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvICdcIiArIGZhbGxiYWNrICsgXCInIGRhdGV0aW1lIGZvcm1hdHMgZnJvbSAnXCIgKyBsb2NhbGUgKyBcIicgZGF0ZXRpbWUgZm9ybWF0cy5cIikpO1xuICAgIH1cbiAgICBfbG9jYWxlID0gZmFsbGJhY2s7XG4gICAgZm9ybWF0cyA9IGRhdGVUaW1lRm9ybWF0c1tfbG9jYWxlXTtcbiAgfVxuXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzW2tleV07XG4gICAgdmFyIGlkID0gX2xvY2FsZSArIFwiX19cIiArIGtleTtcbiAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXTtcbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KF9sb2NhbGUsIGZvcm1hdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKVxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZCA9IGZ1bmN0aW9uIF9kICh2YWx1ZSwgbG9jYWxlLCBrZXkpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFWdWVJMThuLmF2YWlsYWJpbGl0aWVzLmRhdGVUaW1lRm9ybWF0KSB7XG4gICAgd2FybignQ2Fubm90IGZvcm1hdCBhIERhdGUgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5EYXRlVGltZUZvcm1hdC4nKTtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICgha2V5KSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSkuZm9ybWF0KHZhbHVlKVxuICB9XG5cbiAgdmFyIHJldCA9XG4gICAgdGhpcy5fbG9jYWxpemVEYXRlVGltZSh2YWx1ZSwgbG9jYWxlLCB0aGlzLmZhbGxiYWNrTG9jYWxlLCB0aGlzLl9nZXREYXRlVGltZUZvcm1hdHMoKSwga2V5KTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gZGF0ZXRpbWUgbG9jYWxpemF0aW9uIG9mIHJvb3Q6IGtleSAnXCIgKyBrZXkgKyBcIicuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmQodmFsdWUsIGtleSwgbG9jYWxlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgJydcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZCA9IGZ1bmN0aW9uIGQgKHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgdmFyIGtleSA9IG51bGw7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICBpZiAoYXJnc1swXS5sb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gYXJnc1swXS5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYXJnc1swXS5rZXkpIHtcbiAgICAgICAga2V5ID0gYXJnc1swXS5rZXk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZCh2YWx1ZSwgbG9jYWxlLCBrZXkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQgKGxvY2FsZSkge1xuICByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl92bS5udW1iZXJGb3JtYXRzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBzZXROdW1iZXJGb3JtYXQgKGxvY2FsZSwgZm9ybWF0KSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubnVtYmVyRm9ybWF0cywgbG9jYWxlLCBmb3JtYXQpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubWVyZ2VOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBtZXJnZU51bWJlckZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5udW1iZXJGb3JtYXRzLCBsb2NhbGUsIG1lcmdlKHRoaXMuX3ZtLm51bWJlckZvcm1hdHNbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TnVtYmVyRm9ybWF0dGVyID0gZnVuY3Rpb24gX2dldE51bWJlckZvcm1hdHRlciAoXG4gIHZhbHVlLFxuICBsb2NhbGUsXG4gIGZhbGxiYWNrLFxuICBudW1iZXJGb3JtYXRzLFxuICBrZXksXG4gIG9wdGlvbnNcbikge1xuICB2YXIgX2xvY2FsZSA9IGxvY2FsZTtcbiAgdmFyIGZvcm1hdHMgPSBudW1iZXJGb3JtYXRzW19sb2NhbGVdO1xuXG4gIC8vIGZhbGxiYWNrIGxvY2FsZVxuICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvICdcIiArIGZhbGxiYWNrICsgXCInIG51bWJlciBmb3JtYXRzIGZyb20gJ1wiICsgbG9jYWxlICsgXCInIG51bWJlciBmb3JtYXRzLlwiKSk7XG4gICAgfVxuICAgIF9sb2NhbGUgPSBmYWxsYmFjaztcbiAgICBmb3JtYXRzID0gbnVtYmVyRm9ybWF0c1tfbG9jYWxlXTtcbiAgfVxuXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzW2tleV07XG5cbiAgICB2YXIgZm9ybWF0dGVyO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAvLyBJZiBvcHRpb25zIHNwZWNpZmllZCAtIGNyZWF0ZSBvbmUgdGltZSBudW1iZXIgZm9ybWF0dGVyXG4gICAgICBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoX2xvY2FsZSwgT2JqZWN0LmFzc2lnbih7fSwgZm9ybWF0LCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpZCA9IF9sb2NhbGUgKyBcIl9fXCIgKyBrZXk7XG4gICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9udW1iZXJGb3JtYXR0ZXJzW2lkXTtcbiAgICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHRlciA9IHRoaXMuX251bWJlckZvcm1hdHRlcnNbaWRdID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KF9sb2NhbGUsIGZvcm1hdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXJcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiBfbiAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIVZ1ZUkxOG4uYXZhaWxhYmlsaXRpZXMubnVtYmVyRm9ybWF0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oJ0Nhbm5vdCBmb3JtYXQgYSBOdW1iZXIgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5OdW1iZXJGb3JtYXQuJyk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFrZXkpIHtcbiAgICB2YXIgbmYgPSAhb3B0aW9ucyA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUpIDogbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5mLmZvcm1hdCh2YWx1ZSlcbiAgfVxuXG4gIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9nZXROdW1iZXJGb3JtYXR0ZXIodmFsdWUsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwgdGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpLCBrZXksIG9wdGlvbnMpO1xuICB2YXIgcmV0ID0gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5mb3JtYXQodmFsdWUpO1xuICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QocmV0KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byBudW1iZXIgbG9jYWxpemF0aW9uIG9mIHJvb3Q6IGtleSAnXCIgKyBrZXkgKyBcIicuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLm4odmFsdWUsIE9iamVjdC5hc3NpZ24oe30sIHsga2V5OiBrZXksIGxvY2FsZTogbG9jYWxlIH0sIG9wdGlvbnMpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgJydcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubiA9IGZ1bmN0aW9uIG4gKHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciBvcHRpb25zID0gbnVsbDtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoYXJnc1swXSkpIHtcbiAgICAgIGlmIChhcmdzWzBdLmxvY2FsZSkge1xuICAgICAgICBsb2NhbGUgPSBhcmdzWzBdLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzWzBdLmtleSkge1xuICAgICAgICBrZXkgPSBhcmdzWzBdLmtleTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsdGVyIG91dCBudW1iZXIgZm9ybWF0IG9wdGlvbnMgb25seVxuICAgICAgb3B0aW9ucyA9IE9iamVjdC5rZXlzKGFyZ3NbMF0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgIGlmIChudW1iZXJGb3JtYXRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYWNjLCAoIG9iaiA9IHt9LCBvYmpba2V5XSA9IGFyZ3NbMF1ba2V5XSwgb2JqICkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwgbnVsbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5fbih2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fbnRwID0gZnVuY3Rpb24gX250cCAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIVZ1ZUkxOG4uYXZhaWxhYmlsaXRpZXMubnVtYmVyRm9ybWF0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oJ0Nhbm5vdCBmb3JtYXQgdG8gcGFydHMgYSBOdW1iZXIgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5OdW1iZXJGb3JtYXQuJyk7XG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9XG5cbiAgaWYgKCFrZXkpIHtcbiAgICB2YXIgbmYgPSAhb3B0aW9ucyA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUpIDogbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5mLmZvcm1hdFRvUGFydHModmFsdWUpXG4gIH1cblxuICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0dGVyKHZhbHVlLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIHRoaXMuX2dldE51bWJlckZvcm1hdHMoKSwga2V5LCBvcHRpb25zKTtcbiAgdmFyIHJldCA9IGZvcm1hdHRlciAmJiBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyh2YWx1ZSk7XG4gIGlmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdChyZXQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvIGZvcm1hdCBudW1iZXIgdG8gcGFydHMgb2Ygcm9vdDoga2V5ICdcIiArIGtleSArIFwiJyAuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLl9udHAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgW11cbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZ1ZUkxOG4ucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGF2YWlsYWJpbGl0aWVzO1xuLy8gJEZsb3dGaXhNZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZUkxOG4sICdhdmFpbGFiaWxpdGllcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIGlmICghYXZhaWxhYmlsaXRpZXMpIHtcbiAgICAgIHZhciBpbnRsRGVmaW5lZCA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcbiAgICAgIGF2YWlsYWJpbGl0aWVzID0ge1xuICAgICAgICBkYXRlVGltZUZvcm1hdDogaW50bERlZmluZWQgJiYgdHlwZW9mIEludGwuRGF0ZVRpbWVGb3JtYXQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICBudW1iZXJGb3JtYXQ6IGludGxEZWZpbmVkICYmIHR5cGVvZiBJbnRsLk51bWJlckZvcm1hdCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF2YWlsYWJpbGl0aWVzXG4gIH1cbn0pO1xuXG5WdWVJMThuLmluc3RhbGwgPSBpbnN0YWxsO1xuVnVlSTE4bi52ZXJzaW9uID0gJzguMTUuMCc7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZUkxOG47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js\n");

/***/ }),

/***/ "./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js ***!
  \***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzPzY2OTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\n");

/***/ }),

/***/ "./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js":
/*!**************************************************************************!*\
  !*** ./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js ***!
  \**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/*!\n  * vue-router v3.1.3\n  * (c) 2019 Evan You\n  * @license MIT\n  */\n/*  */\n\nfunction assert (condition, message) {\n  if (!condition) {\n    throw new Error((\"[vue-router] \" + message))\n  }\n}\n\nfunction warn (condition, message) {\n  if ( true && !condition) {\n    typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n  }\n}\n\nfunction isError (err) {\n  return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isExtendedError (constructor, err) {\n  return (\n    err instanceof constructor ||\n    // _name is to support IE9 too\n    (err && (err.name === constructor.name || err._name === constructor._name))\n  )\n}\n\nfunction extend (a, b) {\n  for (var key in b) {\n    a[key] = b[key];\n  }\n  return a\n}\n\nvar View = {\n  name: 'RouterView',\n  functional: true,\n  props: {\n    name: {\n      type: String,\n      default: 'default'\n    }\n  },\n  render: function render (_, ref) {\n    var props = ref.props;\n    var children = ref.children;\n    var parent = ref.parent;\n    var data = ref.data;\n\n    // used by devtools to display a router-view badge\n    data.routerView = true;\n\n    // directly use parent context's createElement() function\n    // so that components rendered by router-view can resolve named slots\n    var h = parent.$createElement;\n    var name = props.name;\n    var route = parent.$route;\n    var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n    // determine current view depth, also check to see if the tree\n    // has been toggled inactive but kept-alive.\n    var depth = 0;\n    var inactive = false;\n    while (parent && parent._routerRoot !== parent) {\n      var vnodeData = parent.$vnode && parent.$vnode.data;\n      if (vnodeData) {\n        if (vnodeData.routerView) {\n          depth++;\n        }\n        if (vnodeData.keepAlive && parent._inactive) {\n          inactive = true;\n        }\n      }\n      parent = parent.$parent;\n    }\n    data.routerViewDepth = depth;\n\n    // render previous view if the tree is inactive and kept-alive\n    if (inactive) {\n      return h(cache[name], data, children)\n    }\n\n    var matched = route.matched[depth];\n    // render empty node if no matched route\n    if (!matched) {\n      cache[name] = null;\n      return h()\n    }\n\n    var component = cache[name] = matched.components[name];\n\n    // attach instance registration hook\n    // this will be called in the instance's injected lifecycle hooks\n    data.registerRouteInstance = function (vm, val) {\n      // val could be undefined for unregistration\n      var current = matched.instances[name];\n      if (\n        (val && current !== vm) ||\n        (!val && current === vm)\n      ) {\n        matched.instances[name] = val;\n      }\n    }\n\n    // also register instance in prepatch hook\n    // in case the same component instance is reused across different routes\n    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n      matched.instances[name] = vnode.componentInstance;\n    };\n\n    // register instance in init hook\n    // in case kept-alive component be actived when routes changed\n    data.hook.init = function (vnode) {\n      if (vnode.data.keepAlive &&\n        vnode.componentInstance &&\n        vnode.componentInstance !== matched.instances[name]\n      ) {\n        matched.instances[name] = vnode.componentInstance;\n      }\n    };\n\n    // resolve props\n    var propsToPass = data.props = resolveProps(route, matched.props && matched.props[name]);\n    if (propsToPass) {\n      // clone to prevent mutation\n      propsToPass = data.props = extend({}, propsToPass);\n      // pass non-declared props as attrs\n      var attrs = data.attrs = data.attrs || {};\n      for (var key in propsToPass) {\n        if (!component.props || !(key in component.props)) {\n          attrs[key] = propsToPass[key];\n          delete propsToPass[key];\n        }\n      }\n    }\n\n    return h(component, data, children)\n  }\n};\n\nfunction resolveProps (route, config) {\n  switch (typeof config) {\n    case 'undefined':\n      return\n    case 'object':\n      return config\n    case 'function':\n      return config(route)\n    case 'boolean':\n      return config ? route.params : undefined\n    default:\n      if (true) {\n        warn(\n          false,\n          \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n          \"expecting an object, function or boolean.\"\n        );\n      }\n  }\n}\n\n/*  */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n  .replace(encodeReserveRE, encodeReserveReplacer)\n  .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n  query,\n  extraQuery,\n  _parseQuery\n) {\n  if ( extraQuery === void 0 ) extraQuery = {};\n\n  var parse = _parseQuery || parseQuery;\n  var parsedQuery;\n  try {\n    parsedQuery = parse(query || '');\n  } catch (e) {\n     true && warn(false, e.message);\n    parsedQuery = {};\n  }\n  for (var key in extraQuery) {\n    parsedQuery[key] = extraQuery[key];\n  }\n  return parsedQuery\n}\n\nfunction parseQuery (query) {\n  var res = {};\n\n  query = query.trim().replace(/^(\\?|#|&)/, '');\n\n  if (!query) {\n    return res\n  }\n\n  query.split('&').forEach(function (param) {\n    var parts = param.replace(/\\+/g, ' ').split('=');\n    var key = decode(parts.shift());\n    var val = parts.length > 0\n      ? decode(parts.join('='))\n      : null;\n\n    if (res[key] === undefined) {\n      res[key] = val;\n    } else if (Array.isArray(res[key])) {\n      res[key].push(val);\n    } else {\n      res[key] = [res[key], val];\n    }\n  });\n\n  return res\n}\n\nfunction stringifyQuery (obj) {\n  var res = obj ? Object.keys(obj).map(function (key) {\n    var val = obj[key];\n\n    if (val === undefined) {\n      return ''\n    }\n\n    if (val === null) {\n      return encode(key)\n    }\n\n    if (Array.isArray(val)) {\n      var result = [];\n      val.forEach(function (val2) {\n        if (val2 === undefined) {\n          return\n        }\n        if (val2 === null) {\n          result.push(encode(key));\n        } else {\n          result.push(encode(key) + '=' + encode(val2));\n        }\n      });\n      return result.join('&')\n    }\n\n    return encode(key) + '=' + encode(val)\n  }).filter(function (x) { return x.length > 0; }).join('&') : null;\n  return res ? (\"?\" + res) : ''\n}\n\n/*  */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n  record,\n  location,\n  redirectedFrom,\n  router\n) {\n  var stringifyQuery = router && router.options.stringifyQuery;\n\n  var query = location.query || {};\n  try {\n    query = clone(query);\n  } catch (e) {}\n\n  var route = {\n    name: location.name || (record && record.name),\n    meta: (record && record.meta) || {},\n    path: location.path || '/',\n    hash: location.hash || '',\n    query: query,\n    params: location.params || {},\n    fullPath: getFullPath(location, stringifyQuery),\n    matched: record ? formatMatch(record) : []\n  };\n  if (redirectedFrom) {\n    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n  }\n  return Object.freeze(route)\n}\n\nfunction clone (value) {\n  if (Array.isArray(value)) {\n    return value.map(clone)\n  } else if (value && typeof value === 'object') {\n    var res = {};\n    for (var key in value) {\n      res[key] = clone(value[key]);\n    }\n    return res\n  } else {\n    return value\n  }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n  path: '/'\n});\n\nfunction formatMatch (record) {\n  var res = [];\n  while (record) {\n    res.unshift(record);\n    record = record.parent;\n  }\n  return res\n}\n\nfunction getFullPath (\n  ref,\n  _stringifyQuery\n) {\n  var path = ref.path;\n  var query = ref.query; if ( query === void 0 ) query = {};\n  var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n  var stringify = _stringifyQuery || stringifyQuery;\n  return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n  if (b === START) {\n    return a === b\n  } else if (!b) {\n    return false\n  } else if (a.path && b.path) {\n    return (\n      a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n      a.hash === b.hash &&\n      isObjectEqual(a.query, b.query)\n    )\n  } else if (a.name && b.name) {\n    return (\n      a.name === b.name &&\n      a.hash === b.hash &&\n      isObjectEqual(a.query, b.query) &&\n      isObjectEqual(a.params, b.params)\n    )\n  } else {\n    return false\n  }\n}\n\nfunction isObjectEqual (a, b) {\n  if ( a === void 0 ) a = {};\n  if ( b === void 0 ) b = {};\n\n  // handle null value #1566\n  if (!a || !b) { return a === b }\n  var aKeys = Object.keys(a);\n  var bKeys = Object.keys(b);\n  if (aKeys.length !== bKeys.length) {\n    return false\n  }\n  return aKeys.every(function (key) {\n    var aVal = a[key];\n    var bVal = b[key];\n    // check nested equality\n    if (typeof aVal === 'object' && typeof bVal === 'object') {\n      return isObjectEqual(aVal, bVal)\n    }\n    return String(aVal) === String(bVal)\n  })\n}\n\nfunction isIncludedRoute (current, target) {\n  return (\n    current.path.replace(trailingSlashRE, '/').indexOf(\n      target.path.replace(trailingSlashRE, '/')\n    ) === 0 &&\n    (!target.hash || current.hash === target.hash) &&\n    queryIncludes(current.query, target.query)\n  )\n}\n\nfunction queryIncludes (current, target) {\n  for (var key in target) {\n    if (!(key in current)) {\n      return false\n    }\n  }\n  return true\n}\n\n/*  */\n\nfunction resolvePath (\n  relative,\n  base,\n  append\n) {\n  var firstChar = relative.charAt(0);\n  if (firstChar === '/') {\n    return relative\n  }\n\n  if (firstChar === '?' || firstChar === '#') {\n    return base + relative\n  }\n\n  var stack = base.split('/');\n\n  // remove trailing segment if:\n  // - not appending\n  // - appending to trailing slash (last segment is empty)\n  if (!append || !stack[stack.length - 1]) {\n    stack.pop();\n  }\n\n  // resolve relative path\n  var segments = relative.replace(/^\\//, '').split('/');\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n    if (segment === '..') {\n      stack.pop();\n    } else if (segment !== '.') {\n      stack.push(segment);\n    }\n  }\n\n  // ensure leading slash\n  if (stack[0] !== '') {\n    stack.unshift('');\n  }\n\n  return stack.join('/')\n}\n\nfunction parsePath (path) {\n  var hash = '';\n  var query = '';\n\n  var hashIndex = path.indexOf('#');\n  if (hashIndex >= 0) {\n    hash = path.slice(hashIndex);\n    path = path.slice(0, hashIndex);\n  }\n\n  var queryIndex = path.indexOf('?');\n  if (queryIndex >= 0) {\n    query = path.slice(queryIndex + 1);\n    path = path.slice(0, queryIndex);\n  }\n\n  return {\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\nfunction cleanPath (path) {\n  return path.replace(/\\/\\//g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = [];\n  var key = 0;\n  var index = 0;\n  var path = '';\n  var defaultDelimiter = options && options.delimiter || '/';\n  var res;\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0];\n    var escaped = res[1];\n    var offset = res.index;\n    path += str.slice(index, offset);\n    index = offset + m.length;\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1];\n      continue\n    }\n\n    var next = str[index];\n    var prefix = res[2];\n    var name = res[3];\n    var capture = res[4];\n    var group = res[5];\n    var modifier = res[6];\n    var asterisk = res[7];\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path);\n      path = '';\n    }\n\n    var partial = prefix != null && next != null && next !== prefix;\n    var repeat = modifier === '+' || modifier === '*';\n    var optional = modifier === '?' || modifier === '*';\n    var delimiter = res[2] || defaultDelimiter;\n    var pattern = capture || group;\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    });\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index);\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path);\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length);\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n    }\n  }\n\n  return function (obj, opts) {\n    var path = '';\n    var data = obj || {};\n    var options = opts || {};\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n\n      if (typeof token === 'string') {\n        path += token;\n\n        continue\n      }\n\n      var value = data[token.name];\n      var segment;\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix;\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j]);\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment;\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment;\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys;\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g);\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      });\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = [];\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source);\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  var strict = options.strict;\n  var end = options.end !== false;\n  var route = '';\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (typeof token === 'string') {\n      route += escapeString(token);\n    } else {\n      var prefix = escapeString(token.prefix);\n      var capture = '(?:' + token.pattern + ')';\n\n      keys.push(token);\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*';\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?';\n        } else {\n          capture = prefix + '(' + capture + ')?';\n        }\n      } else {\n        capture = prefix + '(' + capture + ')';\n      }\n\n      route += capture;\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/');\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n  }\n\n  if (end) {\n    route += '$';\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/*  */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n  path,\n  params,\n  routeMsg\n) {\n  params = params || {};\n  try {\n    var filler =\n      regexpCompileCache[path] ||\n      (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n    if (params.pathMatch) { params[0] = params.pathMatch; }\n\n    return filler(params, { pretty: true })\n  } catch (e) {\n    if (true) {\n      warn(false, (\"missing param for \" + routeMsg + \": \" + (e.message)));\n    }\n    return ''\n  } finally {\n    // delete the 0 if it was added\n    delete params[0];\n  }\n}\n\n/*  */\n\nfunction normalizeLocation (\n  raw,\n  current,\n  append,\n  router\n) {\n  var next = typeof raw === 'string' ? { path: raw } : raw;\n  // named target\n  if (next._normalized) {\n    return next\n  } else if (next.name) {\n    return extend({}, raw)\n  }\n\n  // relative params\n  if (!next.path && next.params && current) {\n    next = extend({}, next);\n    next._normalized = true;\n    var params = extend(extend({}, current.params), next.params);\n    if (current.name) {\n      next.name = current.name;\n      next.params = params;\n    } else if (current.matched.length) {\n      var rawPath = current.matched[current.matched.length - 1].path;\n      next.path = fillParams(rawPath, params, (\"path \" + (current.path)));\n    } else if (true) {\n      warn(false, \"relative params navigation requires a current route.\");\n    }\n    return next\n  }\n\n  var parsedPath = parsePath(next.path || '');\n  var basePath = (current && current.path) || '/';\n  var path = parsedPath.path\n    ? resolvePath(parsedPath.path, basePath, append || next.append)\n    : basePath;\n\n  var query = resolveQuery(\n    parsedPath.query,\n    next.query,\n    router && router.options.parseQuery\n  );\n\n  var hash = next.hash || parsedPath.hash;\n  if (hash && hash.charAt(0) !== '#') {\n    hash = \"#\" + hash;\n  }\n\n  return {\n    _normalized: true,\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\n/*  */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar Link = {\n  name: 'RouterLink',\n  props: {\n    to: {\n      type: toTypes,\n      required: true\n    },\n    tag: {\n      type: String,\n      default: 'a'\n    },\n    exact: Boolean,\n    append: Boolean,\n    replace: Boolean,\n    activeClass: String,\n    exactActiveClass: String,\n    event: {\n      type: eventTypes,\n      default: 'click'\n    }\n  },\n  render: function render (h) {\n    var this$1 = this;\n\n    var router = this.$router;\n    var current = this.$route;\n    var ref = router.resolve(\n      this.to,\n      current,\n      this.append\n    );\n    var location = ref.location;\n    var route = ref.route;\n    var href = ref.href;\n\n    var classes = {};\n    var globalActiveClass = router.options.linkActiveClass;\n    var globalExactActiveClass = router.options.linkExactActiveClass;\n    // Support global empty active class\n    var activeClassFallback =\n      globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n    var exactActiveClassFallback =\n      globalExactActiveClass == null\n        ? 'router-link-exact-active'\n        : globalExactActiveClass;\n    var activeClass =\n      this.activeClass == null ? activeClassFallback : this.activeClass;\n    var exactActiveClass =\n      this.exactActiveClass == null\n        ? exactActiveClassFallback\n        : this.exactActiveClass;\n\n    var compareTarget = route.redirectedFrom\n      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n      : route;\n\n    classes[exactActiveClass] = isSameRoute(current, compareTarget);\n    classes[activeClass] = this.exact\n      ? classes[exactActiveClass]\n      : isIncludedRoute(current, compareTarget);\n\n    var handler = function (e) {\n      if (guardEvent(e)) {\n        if (this$1.replace) {\n          router.replace(location, noop);\n        } else {\n          router.push(location, noop);\n        }\n      }\n    };\n\n    var on = { click: guardEvent };\n    if (Array.isArray(this.event)) {\n      this.event.forEach(function (e) {\n        on[e] = handler;\n      });\n    } else {\n      on[this.event] = handler;\n    }\n\n    var data = { class: classes };\n\n    var scopedSlot =\n      !this.$scopedSlots.$hasNormal &&\n      this.$scopedSlots.default &&\n      this.$scopedSlots.default({\n        href: href,\n        route: route,\n        navigate: handler,\n        isActive: classes[activeClass],\n        isExactActive: classes[exactActiveClass]\n      });\n\n    if (scopedSlot) {\n      if (scopedSlot.length === 1) {\n        return scopedSlot[0]\n      } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n        if (true) {\n          warn(\n            false,\n            (\"RouterLink with to=\\\"\" + (this.props.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child.\")\n          );\n        }\n        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n      }\n    }\n\n    if (this.tag === 'a') {\n      data.on = on;\n      data.attrs = { href: href };\n    } else {\n      // find the first <a> child and apply listener and href\n      var a = findAnchor(this.$slots.default);\n      if (a) {\n        // in case the <a> is a static node\n        a.isStatic = false;\n        var aData = (a.data = extend({}, a.data));\n        aData.on = aData.on || {};\n        // transform existing events in both objects into arrays so we can push later\n        for (var event in aData.on) {\n          var handler$1 = aData.on[event];\n          if (event in on) {\n            aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n          }\n        }\n        // append new listeners for router-link\n        for (var event$1 in on) {\n          if (event$1 in aData.on) {\n            // on[event] is always a function\n            aData.on[event$1].push(on[event$1]);\n          } else {\n            aData.on[event$1] = handler;\n          }\n        }\n\n        var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n        aAttrs.href = href;\n      } else {\n        // doesn't have <a> child, apply listener to self\n        data.on = on;\n      }\n    }\n\n    return h(this.tag, data, this.$slots.default)\n  }\n};\n\nfunction guardEvent (e) {\n  // don't redirect with control keys\n  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n  // don't redirect when preventDefault called\n  if (e.defaultPrevented) { return }\n  // don't redirect on right click\n  if (e.button !== undefined && e.button !== 0) { return }\n  // don't redirect if `target=\"_blank\"`\n  if (e.currentTarget && e.currentTarget.getAttribute) {\n    var target = e.currentTarget.getAttribute('target');\n    if (/\\b_blank\\b/i.test(target)) { return }\n  }\n  // this may be a Weex event which doesn't have this method\n  if (e.preventDefault) {\n    e.preventDefault();\n  }\n  return true\n}\n\nfunction findAnchor (children) {\n  if (children) {\n    var child;\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      if (child.tag === 'a') {\n        return child\n      }\n      if (child.children && (child = findAnchor(child.children))) {\n        return child\n      }\n    }\n  }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n  if (install.installed && _Vue === Vue) { return }\n  install.installed = true;\n\n  _Vue = Vue;\n\n  var isDef = function (v) { return v !== undefined; };\n\n  var registerInstance = function (vm, callVal) {\n    var i = vm.$options._parentVnode;\n    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n      i(vm, callVal);\n    }\n  };\n\n  Vue.mixin({\n    beforeCreate: function beforeCreate () {\n      if (isDef(this.$options.router)) {\n        this._routerRoot = this;\n        this._router = this.$options.router;\n        this._router.init(this);\n        Vue.util.defineReactive(this, '_route', this._router.history.current);\n      } else {\n        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n      }\n      registerInstance(this, this);\n    },\n    destroyed: function destroyed () {\n      registerInstance(this);\n    }\n  });\n\n  Object.defineProperty(Vue.prototype, '$router', {\n    get: function get () { return this._routerRoot._router }\n  });\n\n  Object.defineProperty(Vue.prototype, '$route', {\n    get: function get () { return this._routerRoot._route }\n  });\n\n  Vue.component('RouterView', View);\n  Vue.component('RouterLink', Link);\n\n  var strats = Vue.config.optionMergeStrategies;\n  // use the same hook merging strategy for route hooks\n  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/*  */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/*  */\n\nfunction createRouteMap (\n  routes,\n  oldPathList,\n  oldPathMap,\n  oldNameMap\n) {\n  // the path list is used to control path matching priority\n  var pathList = oldPathList || [];\n  // $flow-disable-line\n  var pathMap = oldPathMap || Object.create(null);\n  // $flow-disable-line\n  var nameMap = oldNameMap || Object.create(null);\n\n  routes.forEach(function (route) {\n    addRouteRecord(pathList, pathMap, nameMap, route);\n  });\n\n  // ensure wildcard routes are always at the end\n  for (var i = 0, l = pathList.length; i < l; i++) {\n    if (pathList[i] === '*') {\n      pathList.push(pathList.splice(i, 1)[0]);\n      l--;\n      i--;\n    }\n  }\n\n  if (false) { var pathNames, found; }\n\n  return {\n    pathList: pathList,\n    pathMap: pathMap,\n    nameMap: nameMap\n  }\n}\n\nfunction addRouteRecord (\n  pathList,\n  pathMap,\n  nameMap,\n  route,\n  parent,\n  matchAs\n) {\n  var path = route.path;\n  var name = route.name;\n  if (true) {\n    assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n    assert(\n      typeof route.component !== 'string',\n      \"route config \\\"component\\\" for path: \" + (String(\n        path || name\n      )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n    );\n  }\n\n  var pathToRegexpOptions =\n    route.pathToRegexpOptions || {};\n  var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n  if (typeof route.caseSensitive === 'boolean') {\n    pathToRegexpOptions.sensitive = route.caseSensitive;\n  }\n\n  var record = {\n    path: normalizedPath,\n    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n    components: route.components || { default: route.component },\n    instances: {},\n    name: name,\n    parent: parent,\n    matchAs: matchAs,\n    redirect: route.redirect,\n    beforeEnter: route.beforeEnter,\n    meta: route.meta || {},\n    props:\n      route.props == null\n        ? {}\n        : route.components\n          ? route.props\n          : { default: route.props }\n  };\n\n  if (route.children) {\n    // Warn if route is named, does not redirect and has a default child route.\n    // If users navigate to this route by name, the default child will\n    // not be rendered (GH Issue #629)\n    if (true) {\n      if (\n        route.name &&\n        !route.redirect &&\n        route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n      ) {\n        warn(\n          false,\n          \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n            \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n            \"the default child route will not be rendered. Remove the name from \" +\n            \"this route and use the name of the default child route for named \" +\n            \"links instead.\"\n        );\n      }\n    }\n    route.children.forEach(function (child) {\n      var childMatchAs = matchAs\n        ? cleanPath((matchAs + \"/\" + (child.path)))\n        : undefined;\n      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n    });\n  }\n\n  if (!pathMap[record.path]) {\n    pathList.push(record.path);\n    pathMap[record.path] = record;\n  }\n\n  if (route.alias !== undefined) {\n    var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n    for (var i = 0; i < aliases.length; ++i) {\n      var alias = aliases[i];\n      if ( true && alias === path) {\n        warn(\n          false,\n          (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n        );\n        // skip in dev to make it work\n        continue\n      }\n\n      var aliasRoute = {\n        path: alias,\n        children: route.children\n      };\n      addRouteRecord(\n        pathList,\n        pathMap,\n        nameMap,\n        aliasRoute,\n        parent,\n        record.path || '/' // matchAs\n      );\n    }\n  }\n\n  if (name) {\n    if (!nameMap[name]) {\n      nameMap[name] = record;\n    } else if ( true && !matchAs) {\n      warn(\n        false,\n        \"Duplicate named routes definition: \" +\n          \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n      );\n    }\n  }\n}\n\nfunction compileRouteRegex (\n  path,\n  pathToRegexpOptions\n) {\n  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n  if (true) {\n    var keys = Object.create(null);\n    regex.keys.forEach(function (key) {\n      warn(\n        !keys[key.name],\n        (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n      );\n      keys[key.name] = true;\n    });\n  }\n  return regex\n}\n\nfunction normalizePath (\n  path,\n  parent,\n  strict\n) {\n  if (!strict) { path = path.replace(/\\/$/, ''); }\n  if (path[0] === '/') { return path }\n  if (parent == null) { return path }\n  return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/*  */\n\n\n\nfunction createMatcher (\n  routes,\n  router\n) {\n  var ref = createRouteMap(routes);\n  var pathList = ref.pathList;\n  var pathMap = ref.pathMap;\n  var nameMap = ref.nameMap;\n\n  function addRoutes (routes) {\n    createRouteMap(routes, pathList, pathMap, nameMap);\n  }\n\n  function match (\n    raw,\n    currentRoute,\n    redirectedFrom\n  ) {\n    var location = normalizeLocation(raw, currentRoute, false, router);\n    var name = location.name;\n\n    if (name) {\n      var record = nameMap[name];\n      if (true) {\n        warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n      }\n      if (!record) { return _createRoute(null, location) }\n      var paramNames = record.regex.keys\n        .filter(function (key) { return !key.optional; })\n        .map(function (key) { return key.name; });\n\n      if (typeof location.params !== 'object') {\n        location.params = {};\n      }\n\n      if (currentRoute && typeof currentRoute.params === 'object') {\n        for (var key in currentRoute.params) {\n          if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n            location.params[key] = currentRoute.params[key];\n          }\n        }\n      }\n\n      location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n      return _createRoute(record, location, redirectedFrom)\n    } else if (location.path) {\n      location.params = {};\n      for (var i = 0; i < pathList.length; i++) {\n        var path = pathList[i];\n        var record$1 = pathMap[path];\n        if (matchRoute(record$1.regex, location.path, location.params)) {\n          return _createRoute(record$1, location, redirectedFrom)\n        }\n      }\n    }\n    // no match\n    return _createRoute(null, location)\n  }\n\n  function redirect (\n    record,\n    location\n  ) {\n    var originalRedirect = record.redirect;\n    var redirect = typeof originalRedirect === 'function'\n      ? originalRedirect(createRoute(record, location, null, router))\n      : originalRedirect;\n\n    if (typeof redirect === 'string') {\n      redirect = { path: redirect };\n    }\n\n    if (!redirect || typeof redirect !== 'object') {\n      if (true) {\n        warn(\n          false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n        );\n      }\n      return _createRoute(null, location)\n    }\n\n    var re = redirect;\n    var name = re.name;\n    var path = re.path;\n    var query = location.query;\n    var hash = location.hash;\n    var params = location.params;\n    query = re.hasOwnProperty('query') ? re.query : query;\n    hash = re.hasOwnProperty('hash') ? re.hash : hash;\n    params = re.hasOwnProperty('params') ? re.params : params;\n\n    if (name) {\n      // resolved named direct\n      var targetRecord = nameMap[name];\n      if (true) {\n        assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n      }\n      return match({\n        _normalized: true,\n        name: name,\n        query: query,\n        hash: hash,\n        params: params\n      }, undefined, location)\n    } else if (path) {\n      // 1. resolve relative redirect\n      var rawPath = resolveRecordPath(path, record);\n      // 2. resolve params\n      var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n      // 3. rematch with existing query and hash\n      return match({\n        _normalized: true,\n        path: resolvedPath,\n        query: query,\n        hash: hash\n      }, undefined, location)\n    } else {\n      if (true) {\n        warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n      }\n      return _createRoute(null, location)\n    }\n  }\n\n  function alias (\n    record,\n    location,\n    matchAs\n  ) {\n    var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n    var aliasedMatch = match({\n      _normalized: true,\n      path: aliasedPath\n    });\n    if (aliasedMatch) {\n      var matched = aliasedMatch.matched;\n      var aliasedRecord = matched[matched.length - 1];\n      location.params = aliasedMatch.params;\n      return _createRoute(aliasedRecord, location)\n    }\n    return _createRoute(null, location)\n  }\n\n  function _createRoute (\n    record,\n    location,\n    redirectedFrom\n  ) {\n    if (record && record.redirect) {\n      return redirect(record, redirectedFrom || location)\n    }\n    if (record && record.matchAs) {\n      return alias(record, location, record.matchAs)\n    }\n    return createRoute(record, location, redirectedFrom, router)\n  }\n\n  return {\n    match: match,\n    addRoutes: addRoutes\n  }\n}\n\nfunction matchRoute (\n  regex,\n  path,\n  params\n) {\n  var m = path.match(regex);\n\n  if (!m) {\n    return false\n  } else if (!params) {\n    return true\n  }\n\n  for (var i = 1, len = m.length; i < len; ++i) {\n    var key = regex.keys[i - 1];\n    var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n    if (key) {\n      // Fix #1994: using * with props: true generates a param named 0\n      params[key.name || 'pathMatch'] = val;\n    }\n  }\n\n  return true\n}\n\nfunction resolveRecordPath (path, record) {\n  return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/*  */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n  inBrowser && window.performance && window.performance.now\n    ? window.performance\n    : Date;\n\nfunction genStateKey () {\n  return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n  return _key\n}\n\nfunction setStateKey (key) {\n  return (_key = key)\n}\n\n/*  */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n  // Fix for #1585 for Firefox\n  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n  // window.location.protocol + '//' + window.location.host\n  // location.host contains the port and location.hostname doesn't\n  var protocolAndPath = window.location.protocol + '//' + window.location.host;\n  var absolutePath = window.location.href.replace(protocolAndPath, '');\n  window.history.replaceState({ key: getStateKey() }, '', absolutePath);\n  window.addEventListener('popstate', function (e) {\n    saveScrollPosition();\n    if (e.state && e.state.key) {\n      setStateKey(e.state.key);\n    }\n  });\n}\n\nfunction handleScroll (\n  router,\n  to,\n  from,\n  isPop\n) {\n  if (!router.app) {\n    return\n  }\n\n  var behavior = router.options.scrollBehavior;\n  if (!behavior) {\n    return\n  }\n\n  if (true) {\n    assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n  }\n\n  // wait until re-render finishes before scrolling\n  router.app.$nextTick(function () {\n    var position = getScrollPosition();\n    var shouldScroll = behavior.call(\n      router,\n      to,\n      from,\n      isPop ? position : null\n    );\n\n    if (!shouldScroll) {\n      return\n    }\n\n    if (typeof shouldScroll.then === 'function') {\n      shouldScroll\n        .then(function (shouldScroll) {\n          scrollToPosition((shouldScroll), position);\n        })\n        .catch(function (err) {\n          if (true) {\n            assert(false, err.toString());\n          }\n        });\n    } else {\n      scrollToPosition(shouldScroll, position);\n    }\n  });\n}\n\nfunction saveScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    positionStore[key] = {\n      x: window.pageXOffset,\n      y: window.pageYOffset\n    };\n  }\n}\n\nfunction getScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    return positionStore[key]\n  }\n}\n\nfunction getElementPosition (el, offset) {\n  var docEl = document.documentElement;\n  var docRect = docEl.getBoundingClientRect();\n  var elRect = el.getBoundingClientRect();\n  return {\n    x: elRect.left - docRect.left - offset.x,\n    y: elRect.top - docRect.top - offset.y\n  }\n}\n\nfunction isValidPosition (obj) {\n  return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n    y: isNumber(obj.y) ? obj.y : window.pageYOffset\n  }\n}\n\nfunction normalizeOffset (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : 0,\n    y: isNumber(obj.y) ? obj.y : 0\n  }\n}\n\nfunction isNumber (v) {\n  return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n  var isObject = typeof shouldScroll === 'object';\n  if (isObject && typeof shouldScroll.selector === 'string') {\n    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n    var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n      : document.querySelector(shouldScroll.selector);\n\n    if (el) {\n      var offset =\n        shouldScroll.offset && typeof shouldScroll.offset === 'object'\n          ? shouldScroll.offset\n          : {};\n      offset = normalizeOffset(offset);\n      position = getElementPosition(el, offset);\n    } else if (isValidPosition(shouldScroll)) {\n      position = normalizePosition(shouldScroll);\n    }\n  } else if (isObject && isValidPosition(shouldScroll)) {\n    position = normalizePosition(shouldScroll);\n  }\n\n  if (position) {\n    window.scrollTo(position.x, position.y);\n  }\n}\n\n/*  */\n\nvar supportsPushState =\n  inBrowser &&\n  (function () {\n    var ua = window.navigator.userAgent;\n\n    if (\n      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n      ua.indexOf('Mobile Safari') !== -1 &&\n      ua.indexOf('Chrome') === -1 &&\n      ua.indexOf('Windows Phone') === -1\n    ) {\n      return false\n    }\n\n    return window.history && 'pushState' in window.history\n  })();\n\nfunction pushState (url, replace) {\n  saveScrollPosition();\n  // try...catch the pushState call to get around Safari\n  // DOM Exception 18 where it limits to 100 pushState calls\n  var history = window.history;\n  try {\n    if (replace) {\n      history.replaceState({ key: getStateKey() }, '', url);\n    } else {\n      history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n    }\n  } catch (e) {\n    window.location[replace ? 'replace' : 'assign'](url);\n  }\n}\n\nfunction replaceState (url) {\n  pushState(url, true);\n}\n\n/*  */\n\nfunction runQueue (queue, fn, cb) {\n  var step = function (index) {\n    if (index >= queue.length) {\n      cb();\n    } else {\n      if (queue[index]) {\n        fn(queue[index], function () {\n          step(index + 1);\n        });\n      } else {\n        step(index + 1);\n      }\n    }\n  };\n  step(0);\n}\n\n/*  */\n\nfunction resolveAsyncComponents (matched) {\n  return function (to, from, next) {\n    var hasAsync = false;\n    var pending = 0;\n    var error = null;\n\n    flatMapComponents(matched, function (def, _, match, key) {\n      // if it's a function and doesn't have cid attached,\n      // assume it's an async component resolve function.\n      // we are not using Vue's default async resolving mechanism because\n      // we want to halt the navigation until the incoming component has been\n      // resolved.\n      if (typeof def === 'function' && def.cid === undefined) {\n        hasAsync = true;\n        pending++;\n\n        var resolve = once(function (resolvedDef) {\n          if (isESModule(resolvedDef)) {\n            resolvedDef = resolvedDef.default;\n          }\n          // save resolved on async factory in case it's used elsewhere\n          def.resolved = typeof resolvedDef === 'function'\n            ? resolvedDef\n            : _Vue.extend(resolvedDef);\n          match.components[key] = resolvedDef;\n          pending--;\n          if (pending <= 0) {\n            next();\n          }\n        });\n\n        var reject = once(function (reason) {\n          var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n           true && warn(false, msg);\n          if (!error) {\n            error = isError(reason)\n              ? reason\n              : new Error(msg);\n            next(error);\n          }\n        });\n\n        var res;\n        try {\n          res = def(resolve, reject);\n        } catch (e) {\n          reject(e);\n        }\n        if (res) {\n          if (typeof res.then === 'function') {\n            res.then(resolve, reject);\n          } else {\n            // new syntax in Vue 2.3\n            var comp = res.component;\n            if (comp && typeof comp.then === 'function') {\n              comp.then(resolve, reject);\n            }\n          }\n        }\n      }\n    });\n\n    if (!hasAsync) { next(); }\n  }\n}\n\nfunction flatMapComponents (\n  matched,\n  fn\n) {\n  return flatten(matched.map(function (m) {\n    return Object.keys(m.components).map(function (key) { return fn(\n      m.components[key],\n      m.instances[key],\n      m, key\n    ); })\n  }))\n}\n\nfunction flatten (arr) {\n  return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n  typeof Symbol === 'function' &&\n  typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n  var called = false;\n  return function () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    if (called) { return }\n    called = true;\n    return fn.apply(this, args)\n  }\n}\n\nvar NavigationDuplicated = /*@__PURE__*/(function (Error) {\n  function NavigationDuplicated (normalizedLocation) {\n    Error.call(this);\n    this.name = this._name = 'NavigationDuplicated';\n    // passing the message to super() doesn't seem to work in the transpiled version\n    this.message = \"Navigating to current location (\\\"\" + (normalizedLocation.fullPath) + \"\\\") is not allowed\";\n    // add a stack property so services like Sentry can correctly display it\n    Object.defineProperty(this, 'stack', {\n      value: new Error().stack,\n      writable: true,\n      configurable: true\n    });\n    // we could also have used\n    // Error.captureStackTrace(this, this.constructor)\n    // but it only exists on node and chrome\n  }\n\n  if ( Error ) NavigationDuplicated.__proto__ = Error;\n  NavigationDuplicated.prototype = Object.create( Error && Error.prototype );\n  NavigationDuplicated.prototype.constructor = NavigationDuplicated;\n\n  return NavigationDuplicated;\n}(Error));\n\n// support IE9\nNavigationDuplicated._name = 'NavigationDuplicated';\n\n/*  */\n\nvar History = function History (router, base) {\n  this.router = router;\n  this.base = normalizeBase(base);\n  // start with a route object that stands for \"nowhere\"\n  this.current = START;\n  this.pending = null;\n  this.ready = false;\n  this.readyCbs = [];\n  this.readyErrorCbs = [];\n  this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n  this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n  if (this.ready) {\n    cb();\n  } else {\n    this.readyCbs.push(cb);\n    if (errorCb) {\n      this.readyErrorCbs.push(errorCb);\n    }\n  }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n  this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n  location,\n  onComplete,\n  onAbort\n) {\n    var this$1 = this;\n\n  var route = this.router.match(location, this.current);\n  this.confirmTransition(\n    route,\n    function () {\n      this$1.updateRoute(route);\n      onComplete && onComplete(route);\n      this$1.ensureURL();\n\n      // fire ready cbs once\n      if (!this$1.ready) {\n        this$1.ready = true;\n        this$1.readyCbs.forEach(function (cb) {\n          cb(route);\n        });\n      }\n    },\n    function (err) {\n      if (onAbort) {\n        onAbort(err);\n      }\n      if (err && !this$1.ready) {\n        this$1.ready = true;\n        this$1.readyErrorCbs.forEach(function (cb) {\n          cb(err);\n        });\n      }\n    }\n  );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n    var this$1 = this;\n\n  var current = this.current;\n  var abort = function (err) {\n    // after merging https://github.com/vuejs/vue-router/pull/2771 we\n    // When the user navigates through history through back/forward buttons\n    // we do not want to throw the error. We only throw it if directly calling\n    // push/replace. That's why it's not included in isError\n    if (!isExtendedError(NavigationDuplicated, err) && isError(err)) {\n      if (this$1.errorCbs.length) {\n        this$1.errorCbs.forEach(function (cb) {\n          cb(err);\n        });\n      } else {\n        warn(false, 'uncaught error during route navigation:');\n        console.error(err);\n      }\n    }\n    onAbort && onAbort(err);\n  };\n  if (\n    isSameRoute(route, current) &&\n    // in the case the route map has been dynamically appended to\n    route.matched.length === current.matched.length\n  ) {\n    this.ensureURL();\n    return abort(new NavigationDuplicated(route))\n  }\n\n  var ref = resolveQueue(\n    this.current.matched,\n    route.matched\n  );\n    var updated = ref.updated;\n    var deactivated = ref.deactivated;\n    var activated = ref.activated;\n\n  var queue = [].concat(\n    // in-component leave guards\n    extractLeaveGuards(deactivated),\n    // global before hooks\n    this.router.beforeHooks,\n    // in-component update hooks\n    extractUpdateHooks(updated),\n    // in-config enter guards\n    activated.map(function (m) { return m.beforeEnter; }),\n    // async components\n    resolveAsyncComponents(activated)\n  );\n\n  this.pending = route;\n  var iterator = function (hook, next) {\n    if (this$1.pending !== route) {\n      return abort()\n    }\n    try {\n      hook(route, current, function (to) {\n        if (to === false || isError(to)) {\n          // next(false) -> abort navigation, ensure current URL\n          this$1.ensureURL(true);\n          abort(to);\n        } else if (\n          typeof to === 'string' ||\n          (typeof to === 'object' &&\n            (typeof to.path === 'string' || typeof to.name === 'string'))\n        ) {\n          // next('/') or next({ path: '/' }) -> redirect\n          abort();\n          if (typeof to === 'object' && to.replace) {\n            this$1.replace(to);\n          } else {\n            this$1.push(to);\n          }\n        } else {\n          // confirm transition and pass on the value\n          next(to);\n        }\n      });\n    } catch (e) {\n      abort(e);\n    }\n  };\n\n  runQueue(queue, iterator, function () {\n    var postEnterCbs = [];\n    var isValid = function () { return this$1.current === route; };\n    // wait until async components are resolved before\n    // extracting in-component enter guards\n    var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n    var queue = enterGuards.concat(this$1.router.resolveHooks);\n    runQueue(queue, iterator, function () {\n      if (this$1.pending !== route) {\n        return abort()\n      }\n      this$1.pending = null;\n      onComplete(route);\n      if (this$1.router.app) {\n        this$1.router.app.$nextTick(function () {\n          postEnterCbs.forEach(function (cb) {\n            cb();\n          });\n        });\n      }\n    });\n  });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n  var prev = this.current;\n  this.current = route;\n  this.cb && this.cb(route);\n  this.router.afterHooks.forEach(function (hook) {\n    hook && hook(route, prev);\n  });\n};\n\nfunction normalizeBase (base) {\n  if (!base) {\n    if (inBrowser) {\n      // respect <base> tag\n      var baseEl = document.querySelector('base');\n      base = (baseEl && baseEl.getAttribute('href')) || '/';\n      // strip full URL origin\n      base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n    } else {\n      base = '/';\n    }\n  }\n  // make sure there's the starting slash\n  if (base.charAt(0) !== '/') {\n    base = '/' + base;\n  }\n  // remove trailing slash\n  return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n  current,\n  next\n) {\n  var i;\n  var max = Math.max(current.length, next.length);\n  for (i = 0; i < max; i++) {\n    if (current[i] !== next[i]) {\n      break\n    }\n  }\n  return {\n    updated: next.slice(0, i),\n    activated: next.slice(i),\n    deactivated: current.slice(i)\n  }\n}\n\nfunction extractGuards (\n  records,\n  name,\n  bind,\n  reverse\n) {\n  var guards = flatMapComponents(records, function (def, instance, match, key) {\n    var guard = extractGuard(def, name);\n    if (guard) {\n      return Array.isArray(guard)\n        ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n        : bind(guard, instance, match, key)\n    }\n  });\n  return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n  def,\n  key\n) {\n  if (typeof def !== 'function') {\n    // extend now so that global mixins are applied.\n    def = _Vue.extend(def);\n  }\n  return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n  if (instance) {\n    return function boundRouteGuard () {\n      return guard.apply(instance, arguments)\n    }\n  }\n}\n\nfunction extractEnterGuards (\n  activated,\n  cbs,\n  isValid\n) {\n  return extractGuards(\n    activated,\n    'beforeRouteEnter',\n    function (guard, _, match, key) {\n      return bindEnterGuard(guard, match, key, cbs, isValid)\n    }\n  )\n}\n\nfunction bindEnterGuard (\n  guard,\n  match,\n  key,\n  cbs,\n  isValid\n) {\n  return function routeEnterGuard (to, from, next) {\n    return guard(to, from, function (cb) {\n      if (typeof cb === 'function') {\n        cbs.push(function () {\n          // #750\n          // if a router-view is wrapped with an out-in transition,\n          // the instance may not have been registered at this time.\n          // we will need to poll for registration until current route\n          // is no longer valid.\n          poll(cb, match.instances, key, isValid);\n        });\n      }\n      next(cb);\n    })\n  }\n}\n\nfunction poll (\n  cb, // somehow flow cannot infer this is a function\n  instances,\n  key,\n  isValid\n) {\n  if (\n    instances[key] &&\n    !instances[key]._isBeingDestroyed // do not reuse being destroyed instance\n  ) {\n    cb(instances[key]);\n  } else if (isValid()) {\n    setTimeout(function () {\n      poll(cb, instances, key, isValid);\n    }, 16);\n  }\n}\n\n/*  */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n  function HTML5History (router, base) {\n    var this$1 = this;\n\n    History.call(this, router, base);\n\n    var expectScroll = router.options.scrollBehavior;\n    var supportsScroll = supportsPushState && expectScroll;\n\n    if (supportsScroll) {\n      setupScroll();\n    }\n\n    var initLocation = getLocation(this.base);\n    window.addEventListener('popstate', function (e) {\n      var current = this$1.current;\n\n      // Avoiding first `popstate` event dispatched in some browsers but first\n      // history route not updated since async guard at the same time.\n      var location = getLocation(this$1.base);\n      if (this$1.current === START && location === initLocation) {\n        return\n      }\n\n      this$1.transitionTo(location, function (route) {\n        if (supportsScroll) {\n          handleScroll(router, route, current, true);\n        }\n      });\n    });\n  }\n\n  if ( History ) HTML5History.__proto__ = History;\n  HTML5History.prototype = Object.create( History && History.prototype );\n  HTML5History.prototype.constructor = HTML5History;\n\n  HTML5History.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      pushState(cleanPath(this$1.base + route.fullPath));\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      replaceState(cleanPath(this$1.base + route.fullPath));\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.ensureURL = function ensureURL (push) {\n    if (getLocation(this.base) !== this.current.fullPath) {\n      var current = cleanPath(this.base + this.current.fullPath);\n      push ? pushState(current) : replaceState(current);\n    }\n  };\n\n  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getLocation(this.base)\n  };\n\n  return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n  var path = decodeURI(window.location.pathname);\n  if (base && path.indexOf(base) === 0) {\n    path = path.slice(base.length);\n  }\n  return (path || '/') + window.location.search + window.location.hash\n}\n\n/*  */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n  function HashHistory (router, base, fallback) {\n    History.call(this, router, base);\n    // check history fallback deeplinking\n    if (fallback && checkFallback(this.base)) {\n      return\n    }\n    ensureSlash();\n  }\n\n  if ( History ) HashHistory.__proto__ = History;\n  HashHistory.prototype = Object.create( History && History.prototype );\n  HashHistory.prototype.constructor = HashHistory;\n\n  // this is delayed until the app mounts\n  // to avoid the hashchange listener being fired too early\n  HashHistory.prototype.setupListeners = function setupListeners () {\n    var this$1 = this;\n\n    var router = this.router;\n    var expectScroll = router.options.scrollBehavior;\n    var supportsScroll = supportsPushState && expectScroll;\n\n    if (supportsScroll) {\n      setupScroll();\n    }\n\n    window.addEventListener(\n      supportsPushState ? 'popstate' : 'hashchange',\n      function () {\n        var current = this$1.current;\n        if (!ensureSlash()) {\n          return\n        }\n        this$1.transitionTo(getHash(), function (route) {\n          if (supportsScroll) {\n            handleScroll(this$1.router, route, current, true);\n          }\n          if (!supportsPushState) {\n            replaceHash(route.fullPath);\n          }\n        });\n      }\n    );\n  };\n\n  HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(\n      location,\n      function (route) {\n        pushHash(route.fullPath);\n        handleScroll(this$1.router, route, fromRoute, false);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(\n      location,\n      function (route) {\n        replaceHash(route.fullPath);\n        handleScroll(this$1.router, route, fromRoute, false);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  HashHistory.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HashHistory.prototype.ensureURL = function ensureURL (push) {\n    var current = this.current.fullPath;\n    if (getHash() !== current) {\n      push ? pushHash(current) : replaceHash(current);\n    }\n  };\n\n  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getHash()\n  };\n\n  return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n  var location = getLocation(base);\n  if (!/^\\/#/.test(location)) {\n    window.location.replace(cleanPath(base + '/#' + location));\n    return true\n  }\n}\n\nfunction ensureSlash () {\n  var path = getHash();\n  if (path.charAt(0) === '/') {\n    return true\n  }\n  replaceHash('/' + path);\n  return false\n}\n\nfunction getHash () {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var index = href.indexOf('#');\n  // empty path\n  if (index < 0) { return '' }\n\n  href = href.slice(index + 1);\n  // decode the hash but not the search or hash\n  // as search(query) is already decoded\n  // https://github.com/vuejs/vue-router/issues/2708\n  var searchIndex = href.indexOf('?');\n  if (searchIndex < 0) {\n    var hashIndex = href.indexOf('#');\n    if (hashIndex > -1) {\n      href = decodeURI(href.slice(0, hashIndex)) + href.slice(hashIndex);\n    } else { href = decodeURI(href); }\n  } else {\n    if (searchIndex > -1) {\n      href = decodeURI(href.slice(0, searchIndex)) + href.slice(searchIndex);\n    }\n  }\n\n  return href\n}\n\nfunction getUrl (path) {\n  var href = window.location.href;\n  var i = href.indexOf('#');\n  var base = i >= 0 ? href.slice(0, i) : href;\n  return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n  if (supportsPushState) {\n    pushState(getUrl(path));\n  } else {\n    window.location.hash = path;\n  }\n}\n\nfunction replaceHash (path) {\n  if (supportsPushState) {\n    replaceState(getUrl(path));\n  } else {\n    window.location.replace(getUrl(path));\n  }\n}\n\n/*  */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n  function AbstractHistory (router, base) {\n    History.call(this, router, base);\n    this.stack = [];\n    this.index = -1;\n  }\n\n  if ( History ) AbstractHistory.__proto__ = History;\n  AbstractHistory.prototype = Object.create( History && History.prototype );\n  AbstractHistory.prototype.constructor = AbstractHistory;\n\n  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    this.transitionTo(\n      location,\n      function (route) {\n        this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n        this$1.index++;\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    this.transitionTo(\n      location,\n      function (route) {\n        this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n        onComplete && onComplete(route);\n      },\n      onAbort\n    );\n  };\n\n  AbstractHistory.prototype.go = function go (n) {\n    var this$1 = this;\n\n    var targetIndex = this.index + n;\n    if (targetIndex < 0 || targetIndex >= this.stack.length) {\n      return\n    }\n    var route = this.stack[targetIndex];\n    this.confirmTransition(\n      route,\n      function () {\n        this$1.index = targetIndex;\n        this$1.updateRoute(route);\n      },\n      function (err) {\n        if (isExtendedError(NavigationDuplicated, err)) {\n          this$1.index = targetIndex;\n        }\n      }\n    );\n  };\n\n  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    var current = this.stack[this.stack.length - 1];\n    return current ? current.fullPath : '/'\n  };\n\n  AbstractHistory.prototype.ensureURL = function ensureURL () {\n    // noop\n  };\n\n  return AbstractHistory;\n}(History));\n\n/*  */\n\n\n\nvar VueRouter = function VueRouter (options) {\n  if ( options === void 0 ) options = {};\n\n  this.app = null;\n  this.apps = [];\n  this.options = options;\n  this.beforeHooks = [];\n  this.resolveHooks = [];\n  this.afterHooks = [];\n  this.matcher = createMatcher(options.routes || [], this);\n\n  var mode = options.mode || 'hash';\n  this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n  if (this.fallback) {\n    mode = 'hash';\n  }\n  if (!inBrowser) {\n    mode = 'abstract';\n  }\n  this.mode = mode;\n\n  switch (mode) {\n    case 'history':\n      this.history = new HTML5History(this, options.base);\n      break\n    case 'hash':\n      this.history = new HashHistory(this, options.base, this.fallback);\n      break\n    case 'abstract':\n      this.history = new AbstractHistory(this, options.base);\n      break\n    default:\n      if (true) {\n        assert(false, (\"invalid mode: \" + mode));\n      }\n  }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (\n  raw,\n  current,\n  redirectedFrom\n) {\n  return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n  return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n    var this$1 = this;\n\n   true && assert(\n    install.installed,\n    \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n    \"before creating root instance.\"\n  );\n\n  this.apps.push(app);\n\n  // set up app destroyed handler\n  // https://github.com/vuejs/vue-router/issues/2639\n  app.$once('hook:destroyed', function () {\n    // clean out app from this.apps array once destroyed\n    var index = this$1.apps.indexOf(app);\n    if (index > -1) { this$1.apps.splice(index, 1); }\n    // ensure we still have a main app or null if no apps\n    // we do not release the router so it can be reused\n    if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }\n  });\n\n  // main app previously initialized\n  // return as we don't need to set up new history listener\n  if (this.app) {\n    return\n  }\n\n  this.app = app;\n\n  var history = this.history;\n\n  if (history instanceof HTML5History) {\n    history.transitionTo(history.getCurrentLocation());\n  } else if (history instanceof HashHistory) {\n    var setupHashListener = function () {\n      history.setupListeners();\n    };\n    history.transitionTo(\n      history.getCurrentLocation(),\n      setupHashListener,\n      setupHashListener\n    );\n  }\n\n  history.listen(function (route) {\n    this$1.apps.forEach(function (app) {\n      app._route = route;\n    });\n  });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n  return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n  return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n  return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n  this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n  this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n  // $flow-disable-line\n  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve, reject) {\n      this$1.history.push(location, resolve, reject);\n    })\n  } else {\n    this.history.push(location, onComplete, onAbort);\n  }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n  // $flow-disable-line\n  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve, reject) {\n      this$1.history.replace(location, resolve, reject);\n    })\n  } else {\n    this.history.replace(location, onComplete, onAbort);\n  }\n};\n\nVueRouter.prototype.go = function go (n) {\n  this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n  this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n  this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n  var route = to\n    ? to.matched\n      ? to\n      : this.resolve(to).route\n    : this.currentRoute;\n  if (!route) {\n    return []\n  }\n  return [].concat.apply([], route.matched.map(function (m) {\n    return Object.keys(m.components).map(function (key) {\n      return m.components[key]\n    })\n  }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n  to,\n  current,\n  append\n) {\n  current = current || this.history.current;\n  var location = normalizeLocation(\n    to,\n    current,\n    append,\n    this\n  );\n  var route = this.match(location, current);\n  var fullPath = route.redirectedFrom || route.fullPath;\n  var base = this.history.base;\n  var href = createHref(base, fullPath, this.mode);\n  return {\n    location: location,\n    route: route,\n    href: href,\n    // for backwards compat\n    normalizedTo: location,\n    resolved: route\n  }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n  this.matcher.addRoutes(routes);\n  if (this.history.current !== START) {\n    this.history.transitionTo(this.history.getCurrentLocation());\n  }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n  list.push(fn);\n  return function () {\n    var i = list.indexOf(fn);\n    if (i > -1) { list.splice(i, 1); }\n  }\n}\n\nfunction createHref (base, fullPath, mode) {\n  var path = mode === 'hash' ? '#' + fullPath : fullPath;\n  return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.1.3';\n\nif (inBrowser && window.Vue) {\n  window.Vue.use(VueRouter);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VueRouter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1yb3V0ZXJAMy4xLjNAdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtcm91dGVyQDMuMS4zQHZ1ZS1yb3V0ZXIvZGlzdC92dWUtcm91dGVyLmVzbS5qcz9jNDc4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICAqIHZ1ZS1yb3V0ZXIgdjMuMS4zXG4gICogKGMpIDIwMTkgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbi8qICAqL1xuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuIChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmRpdGlvbikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oKFwiW3Z1ZS1yb3V0ZXJdIFwiICsgbWVzc2FnZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IgKGVycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycikuaW5kZXhPZignRXJyb3InKSA+IC0xXG59XG5cbmZ1bmN0aW9uIGlzRXh0ZW5kZWRFcnJvciAoY29uc3RydWN0b3IsIGVycikge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yIHx8XG4gICAgLy8gX25hbWUgaXMgdG8gc3VwcG9ydCBJRTkgdG9vXG4gICAgKGVyciAmJiAoZXJyLm5hbWUgPT09IGNvbnN0cnVjdG9yLm5hbWUgfHwgZXJyLl9uYW1lID09PSBjb25zdHJ1Y3Rvci5fbmFtZSkpXG4gIClcbn1cblxuZnVuY3Rpb24gZXh0ZW5kIChhLCBiKSB7XG4gIGZvciAodmFyIGtleSBpbiBiKSB7XG4gICAgYVtrZXldID0gYltrZXldO1xuICB9XG4gIHJldHVybiBhXG59XG5cbnZhciBWaWV3ID0ge1xuICBuYW1lOiAnUm91dGVyVmlldycsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoXywgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBjaGlsZHJlbiA9IHJlZi5jaGlsZHJlbjtcbiAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICB2YXIgZGF0YSA9IHJlZi5kYXRhO1xuXG4gICAgLy8gdXNlZCBieSBkZXZ0b29scyB0byBkaXNwbGF5IGEgcm91dGVyLXZpZXcgYmFkZ2VcbiAgICBkYXRhLnJvdXRlclZpZXcgPSB0cnVlO1xuXG4gICAgLy8gZGlyZWN0bHkgdXNlIHBhcmVudCBjb250ZXh0J3MgY3JlYXRlRWxlbWVudCgpIGZ1bmN0aW9uXG4gICAgLy8gc28gdGhhdCBjb21wb25lbnRzIHJlbmRlcmVkIGJ5IHJvdXRlci12aWV3IGNhbiByZXNvbHZlIG5hbWVkIHNsb3RzXG4gICAgdmFyIGggPSBwYXJlbnQuJGNyZWF0ZUVsZW1lbnQ7XG4gICAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHZhciByb3V0ZSA9IHBhcmVudC4kcm91dGU7XG4gICAgdmFyIGNhY2hlID0gcGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgfHwgKHBhcmVudC5fcm91dGVyVmlld0NhY2hlID0ge30pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIGN1cnJlbnQgdmlldyBkZXB0aCwgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlIHRyZWVcbiAgICAvLyBoYXMgYmVlbiB0b2dnbGVkIGluYWN0aXZlIGJ1dCBrZXB0LWFsaXZlLlxuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIGluYWN0aXZlID0gZmFsc2U7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuX3JvdXRlclJvb3QgIT09IHBhcmVudCkge1xuICAgICAgdmFyIHZub2RlRGF0YSA9IHBhcmVudC4kdm5vZGUgJiYgcGFyZW50LiR2bm9kZS5kYXRhO1xuICAgICAgaWYgKHZub2RlRGF0YSkge1xuICAgICAgICBpZiAodm5vZGVEYXRhLnJvdXRlclZpZXcpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bm9kZURhdGEua2VlcEFsaXZlICYmIHBhcmVudC5faW5hY3RpdmUpIHtcbiAgICAgICAgICBpbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBkYXRhLnJvdXRlclZpZXdEZXB0aCA9IGRlcHRoO1xuXG4gICAgLy8gcmVuZGVyIHByZXZpb3VzIHZpZXcgaWYgdGhlIHRyZWUgaXMgaW5hY3RpdmUgYW5kIGtlcHQtYWxpdmVcbiAgICBpZiAoaW5hY3RpdmUpIHtcbiAgICAgIHJldHVybiBoKGNhY2hlW25hbWVdLCBkYXRhLCBjaGlsZHJlbilcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZCA9IHJvdXRlLm1hdGNoZWRbZGVwdGhdO1xuICAgIC8vIHJlbmRlciBlbXB0eSBub2RlIGlmIG5vIG1hdGNoZWQgcm91dGVcbiAgICBpZiAoIW1hdGNoZWQpIHtcbiAgICAgIGNhY2hlW25hbWVdID0gbnVsbDtcbiAgICAgIHJldHVybiBoKClcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50ID0gY2FjaGVbbmFtZV0gPSBtYXRjaGVkLmNvbXBvbmVudHNbbmFtZV07XG5cbiAgICAvLyBhdHRhY2ggaW5zdGFuY2UgcmVnaXN0cmF0aW9uIGhvb2tcbiAgICAvLyB0aGlzIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBpbnN0YW5jZSdzIGluamVjdGVkIGxpZmVjeWNsZSBob29rc1xuICAgIGRhdGEucmVnaXN0ZXJSb3V0ZUluc3RhbmNlID0gZnVuY3Rpb24gKHZtLCB2YWwpIHtcbiAgICAgIC8vIHZhbCBjb3VsZCBiZSB1bmRlZmluZWQgZm9yIHVucmVnaXN0cmF0aW9uXG4gICAgICB2YXIgY3VycmVudCA9IG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdO1xuICAgICAgaWYgKFxuICAgICAgICAodmFsICYmIGN1cnJlbnQgIT09IHZtKSB8fFxuICAgICAgICAoIXZhbCAmJiBjdXJyZW50ID09PSB2bSlcbiAgICAgICkge1xuICAgICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbHNvIHJlZ2lzdGVyIGluc3RhbmNlIGluIHByZXBhdGNoIGhvb2tcbiAgICAvLyBpbiBjYXNlIHRoZSBzYW1lIGNvbXBvbmVudCBpbnN0YW5jZSBpcyByZXVzZWQgYWNyb3NzIGRpZmZlcmVudCByb3V0ZXNcbiAgICA7KGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pKS5wcmVwYXRjaCA9IGZ1bmN0aW9uIChfLCB2bm9kZSkge1xuICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gaW5pdCBob29rXG4gICAgLy8gaW4gY2FzZSBrZXB0LWFsaXZlIGNvbXBvbmVudCBiZSBhY3RpdmVkIHdoZW4gcm91dGVzIGNoYW5nZWRcbiAgICBkYXRhLmhvb2suaW5pdCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlICYmXG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICE9PSBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHJlc29sdmUgcHJvcHNcbiAgICB2YXIgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gcmVzb2x2ZVByb3BzKHJvdXRlLCBtYXRjaGVkLnByb3BzICYmIG1hdGNoZWQucHJvcHNbbmFtZV0pO1xuICAgIGlmIChwcm9wc1RvUGFzcykge1xuICAgICAgLy8gY2xvbmUgdG8gcHJldmVudCBtdXRhdGlvblxuICAgICAgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gZXh0ZW5kKHt9LCBwcm9wc1RvUGFzcyk7XG4gICAgICAvLyBwYXNzIG5vbi1kZWNsYXJlZCBwcm9wcyBhcyBhdHRyc1xuICAgICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNUb1Bhc3MpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQucHJvcHMgfHwgIShrZXkgaW4gY29tcG9uZW50LnByb3BzKSkge1xuICAgICAgICAgIGF0dHJzW2tleV0gPSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICAgIGRlbGV0ZSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoY29tcG9uZW50LCBkYXRhLCBjaGlsZHJlbilcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVByb3BzIChyb3V0ZSwgY29uZmlnKSB7XG4gIHN3aXRjaCAodHlwZW9mIGNvbmZpZykge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiBjb25maWcocm91dGUpXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gY29uZmlnID8gcm91dGUucGFyYW1zIDogdW5kZWZpbmVkXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJwcm9wcyBpbiBcXFwiXCIgKyAocm91dGUucGF0aCkgKyBcIlxcXCIgaXMgYSBcIiArICh0eXBlb2YgY29uZmlnKSArIFwiLCBcIiArXG4gICAgICAgICAgXCJleHBlY3RpbmcgYW4gb2JqZWN0LCBmdW5jdGlvbiBvciBib29sZWFuLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBlbmNvZGVSZXNlcnZlUkUgPSAvWyEnKCkqXS9nO1xudmFyIGVuY29kZVJlc2VydmVSZXBsYWNlciA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOyB9O1xudmFyIGNvbW1hUkUgPSAvJTJDL2c7XG5cbi8vIGZpeGVkIGVuY29kZVVSSUNvbXBvbmVudCB3aGljaCBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gUkZDMzk4Njpcbi8vIC0gZXNjYXBlcyBbIScoKSpdXG4vLyAtIHByZXNlcnZlIGNvbW1hc1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpXG4gIC5yZXBsYWNlKGVuY29kZVJlc2VydmVSRSwgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyKVxuICAucmVwbGFjZShjb21tYVJFLCAnLCcpOyB9O1xuXG52YXIgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXG5mdW5jdGlvbiByZXNvbHZlUXVlcnkgKFxuICBxdWVyeSxcbiAgZXh0cmFRdWVyeSxcbiAgX3BhcnNlUXVlcnlcbikge1xuICBpZiAoIGV4dHJhUXVlcnkgPT09IHZvaWQgMCApIGV4dHJhUXVlcnkgPSB7fTtcblxuICB2YXIgcGFyc2UgPSBfcGFyc2VRdWVyeSB8fCBwYXJzZVF1ZXJ5O1xuICB2YXIgcGFyc2VkUXVlcnk7XG4gIHRyeSB7XG4gICAgcGFyc2VkUXVlcnkgPSBwYXJzZShxdWVyeSB8fCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oZmFsc2UsIGUubWVzc2FnZSk7XG4gICAgcGFyc2VkUXVlcnkgPSB7fTtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gZXh0cmFRdWVyeSkge1xuICAgIHBhcnNlZFF1ZXJ5W2tleV0gPSBleHRyYVF1ZXJ5W2tleV07XG4gIH1cbiAgcmV0dXJuIHBhcnNlZFF1ZXJ5XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVlcnkgKHF1ZXJ5KSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBxdWVyeSA9IHF1ZXJ5LnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG4gIGlmICghcXVlcnkpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBxdWVyeS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgdmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRzLnNoaWZ0KCkpO1xuICAgIHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwXG4gICAgICA/IGRlY29kZShwYXJ0cy5qb2luKCc9JykpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAocmVzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc1trZXldKSkge1xuICAgICAgcmVzW2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNba2V5XSA9IFtyZXNba2V5XSwgdmFsXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5UXVlcnkgKG9iaikge1xuICB2YXIgcmVzID0gb2JqID8gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVuY29kZShrZXkpXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgdmFsLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlKGtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbDIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKVxuICAgIH1cblxuICAgIHJldHVybiBlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwpXG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sZW5ndGggPiAwOyB9KS5qb2luKCcmJykgOiBudWxsO1xuICByZXR1cm4gcmVzID8gKFwiP1wiICsgcmVzKSA6ICcnXG59XG5cbi8qICAqL1xuXG52YXIgdHJhaWxpbmdTbGFzaFJFID0gL1xcLz8kLztcblxuZnVuY3Rpb24gY3JlYXRlUm91dGUgKFxuICByZWNvcmQsXG4gIGxvY2F0aW9uLFxuICByZWRpcmVjdGVkRnJvbSxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHN0cmluZ2lmeVF1ZXJ5ID0gcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnN0cmluZ2lmeVF1ZXJ5O1xuXG4gIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5IHx8IHt9O1xuICB0cnkge1xuICAgIHF1ZXJ5ID0gY2xvbmUocXVlcnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByb3V0ZSA9IHtcbiAgICBuYW1lOiBsb2NhdGlvbi5uYW1lIHx8IChyZWNvcmQgJiYgcmVjb3JkLm5hbWUpLFxuICAgIG1ldGE6IChyZWNvcmQgJiYgcmVjb3JkLm1ldGEpIHx8IHt9LFxuICAgIHBhdGg6IGxvY2F0aW9uLnBhdGggfHwgJy8nLFxuICAgIGhhc2g6IGxvY2F0aW9uLmhhc2ggfHwgJycsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIHBhcmFtczogbG9jYXRpb24ucGFyYW1zIHx8IHt9LFxuICAgIGZ1bGxQYXRoOiBnZXRGdWxsUGF0aChsb2NhdGlvbiwgc3RyaW5naWZ5UXVlcnkpLFxuICAgIG1hdGNoZWQ6IHJlY29yZCA/IGZvcm1hdE1hdGNoKHJlY29yZCkgOiBbXVxuICB9O1xuICBpZiAocmVkaXJlY3RlZEZyb20pIHtcbiAgICByb3V0ZS5yZWRpcmVjdGVkRnJvbSA9IGdldEZ1bGxQYXRoKHJlZGlyZWN0ZWRGcm9tLCBzdHJpbmdpZnlRdWVyeSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocm91dGUpXG59XG5cbmZ1bmN0aW9uIGNsb25lICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGNsb25lKVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKHZhbHVlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuLy8gdGhlIHN0YXJ0aW5nIHJvdXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBzdGF0ZVxudmFyIFNUQVJUID0gY3JlYXRlUm91dGUobnVsbCwge1xuICBwYXRoOiAnLydcbn0pO1xuXG5mdW5jdGlvbiBmb3JtYXRNYXRjaCAocmVjb3JkKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgd2hpbGUgKHJlY29yZCkge1xuICAgIHJlcy51bnNoaWZ0KHJlY29yZCk7XG4gICAgcmVjb3JkID0gcmVjb3JkLnBhcmVudDtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoIChcbiAgcmVmLFxuICBfc3RyaW5naWZ5UXVlcnlcbikge1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgcXVlcnkgPSByZWYucXVlcnk7IGlmICggcXVlcnkgPT09IHZvaWQgMCApIHF1ZXJ5ID0ge307XG4gIHZhciBoYXNoID0gcmVmLmhhc2g7IGlmICggaGFzaCA9PT0gdm9pZCAwICkgaGFzaCA9ICcnO1xuXG4gIHZhciBzdHJpbmdpZnkgPSBfc3RyaW5naWZ5UXVlcnkgfHwgc3RyaW5naWZ5UXVlcnk7XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgc3RyaW5naWZ5KHF1ZXJ5KSArIGhhc2hcbn1cblxuZnVuY3Rpb24gaXNTYW1lUm91dGUgKGEsIGIpIHtcbiAgaWYgKGIgPT09IFNUQVJUKSB7XG4gICAgcmV0dXJuIGEgPT09IGJcbiAgfSBlbHNlIGlmICghYikge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKGEucGF0aCAmJiBiLnBhdGgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgPT09IGIucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KVxuICAgIClcbiAgfSBlbHNlIGlmIChhLm5hbWUgJiYgYi5uYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEubmFtZSA9PT0gYi5uYW1lICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KSAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RXF1YWwgKGEsIGIpIHtcbiAgaWYgKCBhID09PSB2b2lkIDAgKSBhID0ge307XG4gIGlmICggYiA9PT0gdm9pZCAwICkgYiA9IHt9O1xuXG4gIC8vIGhhbmRsZSBudWxsIHZhbHVlICMxNTY2XG4gIGlmICghYSB8fCAhYikgeyByZXR1cm4gYSA9PT0gYiB9XG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgYVZhbCA9IGFba2V5XTtcbiAgICB2YXIgYlZhbCA9IGJba2V5XTtcbiAgICAvLyBjaGVjayBuZXN0ZWQgZXF1YWxpdHlcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiVmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0RXF1YWwoYVZhbCwgYlZhbClcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKSA9PT0gU3RyaW5nKGJWYWwpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRSb3V0ZSAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiAoXG4gICAgY3VycmVudC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpLmluZGV4T2YoXG4gICAgICB0YXJnZXQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKVxuICAgICkgPT09IDAgJiZcbiAgICAoIXRhcmdldC5oYXNoIHx8IGN1cnJlbnQuaGFzaCA9PT0gdGFyZ2V0Lmhhc2gpICYmXG4gICAgcXVlcnlJbmNsdWRlcyhjdXJyZW50LnF1ZXJ5LCB0YXJnZXQucXVlcnkpXG4gIClcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlcyAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBpZiAoIShrZXkgaW4gY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGggKFxuICByZWxhdGl2ZSxcbiAgYmFzZSxcbiAgYXBwZW5kXG4pIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHJlbGF0aXZlLmNoYXJBdCgwKTtcbiAgaWYgKGZpcnN0Q2hhciA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoZmlyc3RDaGFyID09PSAnPycgfHwgZmlyc3RDaGFyID09PSAnIycpIHtcbiAgICByZXR1cm4gYmFzZSArIHJlbGF0aXZlXG4gIH1cblxuICB2YXIgc3RhY2sgPSBiYXNlLnNwbGl0KCcvJyk7XG5cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNlZ21lbnQgaWY6XG4gIC8vIC0gbm90IGFwcGVuZGluZ1xuICAvLyAtIGFwcGVuZGluZyB0byB0cmFpbGluZyBzbGFzaCAobGFzdCBzZWdtZW50IGlzIGVtcHR5KVxuICBpZiAoIWFwcGVuZCB8fCAhc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8vIHJlc29sdmUgcmVsYXRpdmUgcGF0aFxuICB2YXIgc2VnbWVudHMgPSByZWxhdGl2ZS5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSAnLi4nKSB7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgIT09ICcuJykge1xuICAgICAgc3RhY2sucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBlbnN1cmUgbGVhZGluZyBzbGFzaFxuICBpZiAoc3RhY2tbMF0gIT09ICcnKSB7XG4gICAgc3RhY2sudW5zaGlmdCgnJyk7XG4gIH1cblxuICByZXR1cm4gc3RhY2suam9pbignLycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICB2YXIgaGFzaCA9ICcnO1xuICB2YXIgcXVlcnkgPSAnJztcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggPj0gMCkge1xuICAgIGhhc2ggPSBwYXRoLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgfVxuXG4gIHZhciBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ID49IDApIHtcbiAgICBxdWVyeSA9IHBhdGguc2xpY2UocXVlcnlJbmRleCArIDEpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHF1ZXJ5SW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG59XG5cbnZhciBpc2FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbnZhciBwYXRoVG9SZWdleHBfMSA9IHBhdGhUb1JlZ2V4cDtcbnZhciBwYXJzZV8xID0gcGFyc2U7XG52YXIgY29tcGlsZV8xID0gY29tcGlsZTtcbnZhciB0b2tlbnNUb0Z1bmN0aW9uXzEgPSB0b2tlbnNUb0Z1bmN0aW9uO1xudmFyIHRva2Vuc1RvUmVnRXhwXzEgPSB0b2tlbnNUb1JlZ0V4cDtcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT98KFxcXFwqKSknXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIga2V5ID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHBhdGggPSAnJztcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJztcbiAgdmFyIHJlcztcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdO1xuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdO1xuICAgIHZhciBvZmZzZXQgPSByZXMuaW5kZXg7XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldCk7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aDtcblxuICAgIC8vIElnbm9yZSBhbHJlYWR5IGVzY2FwZWQgc2VxdWVuY2VzLlxuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBwYXRoICs9IGVzY2FwZWRbMV07XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XTtcbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdO1xuICAgIHZhciBuYW1lID0gcmVzWzNdO1xuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdO1xuICAgIHZhciBncm91cCA9IHJlc1s1XTtcbiAgICB2YXIgbW9kaWZpZXIgPSByZXNbNl07XG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddO1xuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gICAgICBwYXRoID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4O1xuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlcjtcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXA7XG5cbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lIHx8IGtleSsrLFxuICAgICAgcHJlZml4OiBwcmVmaXggfHwgJycsXG4gICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgIHJlcGVhdDogcmVwZWF0LFxuICAgICAgcGFydGlhbDogcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiAhIWFzdGVyaXNrLFxuICAgICAgcGF0dGVybjogcGF0dGVybiA/IGVzY2FwZUdyb3VwKHBhdHRlcm4pIDogKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KTtcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aCk7XG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICB2YXIgcGF0aCA9ICcnO1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9O1xuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZW5jb2RlID0gb3B0aW9ucy5wcmV0dHkgPyBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgOiBlbmNvZGVVUklDb21wb25lbnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuO1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICB2YXIgc2VnbWVudDtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZSh2YWx1ZVtqXSk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKTtcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5cztcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpO1xuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSk7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpO1xuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlO1xuICB2YXIgcm91dGUgPSAnJztcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeCk7XG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJztcblxuICAgICAga2V5cy5wdXNoKHRva2VuKTtcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKic7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJztcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJyk7XG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyO1xuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nO1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJztcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknO1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cbnBhdGhUb1JlZ2V4cF8xLnBhcnNlID0gcGFyc2VfMTtcbnBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUgPSBjb21waWxlXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbl8xO1xucGF0aFRvUmVnZXhwXzEudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cF8xO1xuXG4vKiAgKi9cblxuLy8gJGZsb3ctZGlzYWJsZS1saW5lXG52YXIgcmVnZXhwQ29tcGlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gZmlsbFBhcmFtcyAoXG4gIHBhdGgsXG4gIHBhcmFtcyxcbiAgcm91dGVNc2dcbikge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHRyeSB7XG4gICAgdmFyIGZpbGxlciA9XG4gICAgICByZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gfHxcbiAgICAgIChyZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gPSBwYXRoVG9SZWdleHBfMS5jb21waWxlKHBhdGgpKTtcblxuICAgIC8vIEZpeCAjMjUwNSByZXNvbHZpbmcgYXN0ZXJpc2sgcm91dGVzIHsgbmFtZTogJ25vdC1mb3VuZCcsIHBhcmFtczogeyBwYXRoTWF0Y2g6ICcvbm90LWZvdW5kJyB9fVxuICAgIGlmIChwYXJhbXMucGF0aE1hdGNoKSB7IHBhcmFtc1swXSA9IHBhcmFtcy5wYXRoTWF0Y2g7IH1cblxuICAgIHJldHVybiBmaWxsZXIocGFyYW1zLCB7IHByZXR0eTogdHJ1ZSB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oZmFsc2UsIChcIm1pc3NpbmcgcGFyYW0gZm9yIFwiICsgcm91dGVNc2cgKyBcIjogXCIgKyAoZS5tZXNzYWdlKSkpO1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBkZWxldGUgdGhlIDAgaWYgaXQgd2FzIGFkZGVkXG4gICAgZGVsZXRlIHBhcmFtc1swXTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24gKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIGFwcGVuZCxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIG5leHQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHsgcGF0aDogcmF3IH0gOiByYXc7XG4gIC8vIG5hbWVkIHRhcmdldFxuICBpZiAobmV4dC5fbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBuZXh0XG4gIH0gZWxzZSBpZiAobmV4dC5uYW1lKSB7XG4gICAgcmV0dXJuIGV4dGVuZCh7fSwgcmF3KVxuICB9XG5cbiAgLy8gcmVsYXRpdmUgcGFyYW1zXG4gIGlmICghbmV4dC5wYXRoICYmIG5leHQucGFyYW1zICYmIGN1cnJlbnQpIHtcbiAgICBuZXh0ID0gZXh0ZW5kKHt9LCBuZXh0KTtcbiAgICBuZXh0Ll9ub3JtYWxpemVkID0gdHJ1ZTtcbiAgICB2YXIgcGFyYW1zID0gZXh0ZW5kKGV4dGVuZCh7fSwgY3VycmVudC5wYXJhbXMpLCBuZXh0LnBhcmFtcyk7XG4gICAgaWYgKGN1cnJlbnQubmFtZSkge1xuICAgICAgbmV4dC5uYW1lID0gY3VycmVudC5uYW1lO1xuICAgICAgbmV4dC5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50Lm1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICB2YXIgcmF3UGF0aCA9IGN1cnJlbnQubWF0Y2hlZFtjdXJyZW50Lm1hdGNoZWQubGVuZ3RoIC0gMV0ucGF0aDtcbiAgICAgIG5leHQucGF0aCA9IGZpbGxQYXJhbXMocmF3UGF0aCwgcGFyYW1zLCAoXCJwYXRoIFwiICsgKGN1cnJlbnQucGF0aCkpKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oZmFsc2UsIFwicmVsYXRpdmUgcGFyYW1zIG5hdmlnYXRpb24gcmVxdWlyZXMgYSBjdXJyZW50IHJvdXRlLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRcbiAgfVxuXG4gIHZhciBwYXJzZWRQYXRoID0gcGFyc2VQYXRoKG5leHQucGF0aCB8fCAnJyk7XG4gIHZhciBiYXNlUGF0aCA9IChjdXJyZW50ICYmIGN1cnJlbnQucGF0aCkgfHwgJy8nO1xuICB2YXIgcGF0aCA9IHBhcnNlZFBhdGgucGF0aFxuICAgID8gcmVzb2x2ZVBhdGgocGFyc2VkUGF0aC5wYXRoLCBiYXNlUGF0aCwgYXBwZW5kIHx8IG5leHQuYXBwZW5kKVxuICAgIDogYmFzZVBhdGg7XG5cbiAgdmFyIHF1ZXJ5ID0gcmVzb2x2ZVF1ZXJ5KFxuICAgIHBhcnNlZFBhdGgucXVlcnksXG4gICAgbmV4dC5xdWVyeSxcbiAgICByb3V0ZXIgJiYgcm91dGVyLm9wdGlvbnMucGFyc2VRdWVyeVxuICApO1xuXG4gIHZhciBoYXNoID0gbmV4dC5oYXNoIHx8IHBhcnNlZFBhdGguaGFzaDtcbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykge1xuICAgIGhhc2ggPSBcIiNcIiArIGhhc2g7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgIHBhdGg6IHBhdGgsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIGhhc2g6IGhhc2hcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gd29yayBhcm91bmQgd2VpcmQgZmxvdyBidWdcbnZhciB0b1R5cGVzID0gW1N0cmluZywgT2JqZWN0XTtcbnZhciBldmVudFR5cGVzID0gW1N0cmluZywgQXJyYXldO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgTGluayA9IHtcbiAgbmFtZTogJ1JvdXRlckxpbmsnLFxuICBwcm9wczoge1xuICAgIHRvOiB7XG4gICAgICB0eXBlOiB0b1R5cGVzLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2EnXG4gICAgfSxcbiAgICBleGFjdDogQm9vbGVhbixcbiAgICBhcHBlbmQ6IEJvb2xlYW4sXG4gICAgcmVwbGFjZTogQm9vbGVhbixcbiAgICBhY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGV4YWN0QWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBldmVudDoge1xuICAgICAgdHlwZTogZXZlbnRUeXBlcyxcbiAgICAgIGRlZmF1bHQ6ICdjbGljaydcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy4kcm91dGVyO1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy4kcm91dGU7XG4gICAgdmFyIHJlZiA9IHJvdXRlci5yZXNvbHZlKFxuICAgICAgdGhpcy50byxcbiAgICAgIGN1cnJlbnQsXG4gICAgICB0aGlzLmFwcGVuZFxuICAgICk7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVmLmxvY2F0aW9uO1xuICAgIHZhciByb3V0ZSA9IHJlZi5yb3V0ZTtcbiAgICB2YXIgaHJlZiA9IHJlZi5ocmVmO1xuXG4gICAgdmFyIGNsYXNzZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsQWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rRXhhY3RBY3RpdmVDbGFzcztcbiAgICAvLyBTdXBwb3J0IGdsb2JhbCBlbXB0eSBhY3RpdmUgY2xhc3NcbiAgICB2YXIgYWN0aXZlQ2xhc3NGYWxsYmFjayA9XG4gICAgICBnbG9iYWxBY3RpdmVDbGFzcyA9PSBudWxsID8gJ3JvdXRlci1saW5rLWFjdGl2ZScgOiBnbG9iYWxBY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/ICdyb3V0ZXItbGluay1leGFjdC1hY3RpdmUnXG4gICAgICAgIDogZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5hY3RpdmVDbGFzcyA9PSBudWxsID8gYWN0aXZlQ2xhc3NGYWxsYmFjayA6IHRoaXMuYWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5leGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgPyBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2tcbiAgICAgICAgOiB0aGlzLmV4YWN0QWN0aXZlQ2xhc3M7XG5cbiAgICB2YXIgY29tcGFyZVRhcmdldCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tXG4gICAgICA/IGNyZWF0ZVJvdXRlKG51bGwsIG5vcm1hbGl6ZUxvY2F0aW9uKHJvdXRlLnJlZGlyZWN0ZWRGcm9tKSwgbnVsbCwgcm91dGVyKVxuICAgICAgOiByb3V0ZTtcblxuICAgIGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc10gPSBpc1NhbWVSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0KTtcbiAgICBjbGFzc2VzW2FjdGl2ZUNsYXNzXSA9IHRoaXMuZXhhY3RcbiAgICAgID8gY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXVxuICAgICAgOiBpc0luY2x1ZGVkUm91dGUoY3VycmVudCwgY29tcGFyZVRhcmdldCk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZ3VhcmRFdmVudChlKSkge1xuICAgICAgICBpZiAodGhpcyQxLnJlcGxhY2UpIHtcbiAgICAgICAgICByb3V0ZXIucmVwbGFjZShsb2NhdGlvbiwgbm9vcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm91dGVyLnB1c2gobG9jYXRpb24sIG5vb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbiA9IHsgY2xpY2s6IGd1YXJkRXZlbnQgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV2ZW50KSkge1xuICAgICAgdGhpcy5ldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG9uW2VdID0gaGFuZGxlcjtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblt0aGlzLmV2ZW50XSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7IGNsYXNzOiBjbGFzc2VzIH07XG5cbiAgICB2YXIgc2NvcGVkU2xvdCA9XG4gICAgICAhdGhpcy4kc2NvcGVkU2xvdHMuJGhhc05vcm1hbCAmJlxuICAgICAgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCAmJlxuICAgICAgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgbmF2aWdhdGU6IGhhbmRsZXIsXG4gICAgICAgIGlzQWN0aXZlOiBjbGFzc2VzW2FjdGl2ZUNsYXNzXSxcbiAgICAgICAgaXNFeGFjdEFjdGl2ZTogY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXVxuICAgICAgfSk7XG5cbiAgICBpZiAoc2NvcGVkU2xvdCkge1xuICAgICAgaWYgKHNjb3BlZFNsb3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBzY29wZWRTbG90WzBdXG4gICAgICB9IGVsc2UgaWYgKHNjb3BlZFNsb3QubGVuZ3RoID4gMSB8fCAhc2NvcGVkU2xvdC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoXCJSb3V0ZXJMaW5rIHdpdGggdG89XFxcIlwiICsgKHRoaXMucHJvcHMudG8pICsgXCJcXFwiIGlzIHRyeWluZyB0byB1c2UgYSBzY29wZWQgc2xvdCBidXQgaXQgZGlkbid0IHByb3ZpZGUgZXhhY3RseSBvbmUgY2hpbGQuXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdC5sZW5ndGggPT09IDAgPyBoKCkgOiBoKCdzcGFuJywge30sIHNjb3BlZFNsb3QpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnID09PSAnYScpIHtcbiAgICAgIGRhdGEub24gPSBvbjtcbiAgICAgIGRhdGEuYXR0cnMgPSB7IGhyZWY6IGhyZWYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgZmlyc3QgPGE+IGNoaWxkIGFuZCBhcHBseSBsaXN0ZW5lciBhbmQgaHJlZlxuICAgICAgdmFyIGEgPSBmaW5kQW5jaG9yKHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgICAgaWYgKGEpIHtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgPGE+IGlzIGEgc3RhdGljIG5vZGVcbiAgICAgICAgYS5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICB2YXIgYURhdGEgPSAoYS5kYXRhID0gZXh0ZW5kKHt9LCBhLmRhdGEpKTtcbiAgICAgICAgYURhdGEub24gPSBhRGF0YS5vbiB8fCB7fTtcbiAgICAgICAgLy8gdHJhbnNmb3JtIGV4aXN0aW5nIGV2ZW50cyBpbiBib3RoIG9iamVjdHMgaW50byBhcnJheXMgc28gd2UgY2FuIHB1c2ggbGF0ZXJcbiAgICAgICAgZm9yICh2YXIgZXZlbnQgaW4gYURhdGEub24pIHtcbiAgICAgICAgICB2YXIgaGFuZGxlciQxID0gYURhdGEub25bZXZlbnRdO1xuICAgICAgICAgIGlmIChldmVudCBpbiBvbikge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnRdID0gQXJyYXkuaXNBcnJheShoYW5kbGVyJDEpID8gaGFuZGxlciQxIDogW2hhbmRsZXIkMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGVuZCBuZXcgbGlzdGVuZXJzIGZvciByb3V0ZXItbGlua1xuICAgICAgICBmb3IgKHZhciBldmVudCQxIGluIG9uKSB7XG4gICAgICAgICAgaWYgKGV2ZW50JDEgaW4gYURhdGEub24pIHtcbiAgICAgICAgICAgIC8vIG9uW2V2ZW50XSBpcyBhbHdheXMgYSBmdW5jdGlvblxuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0ucHVzaChvbltldmVudCQxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFEYXRhLm9uW2V2ZW50JDFdID0gaGFuZGxlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYUF0dHJzID0gKGEuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYS5kYXRhLmF0dHJzKSk7XG4gICAgICAgIGFBdHRycy5ocmVmID0gaHJlZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSA8YT4gY2hpbGQsIGFwcGx5IGxpc3RlbmVyIHRvIHNlbGZcbiAgICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKHRoaXMudGFnLCBkYXRhLCB0aGlzLiRzbG90cy5kZWZhdWx0KVxuICB9XG59O1xuXG5mdW5jdGlvbiBndWFyZEV2ZW50IChlKSB7XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdpdGggY29udHJvbCBrZXlzXG4gIGlmIChlLm1ldGFLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2hlbiBwcmV2ZW50RGVmYXVsdCBjYWxsZWRcbiAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBvbiByaWdodCBjbGlja1xuICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gIGlmIChlLmN1cnJlbnRUYXJnZXQgJiYgZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICBpZiAoL1xcYl9ibGFua1xcYi9pLnRlc3QodGFyZ2V0KSkgeyByZXR1cm4gfVxuICB9XG4gIC8vIHRoaXMgbWF5IGJlIGEgV2VleCBldmVudCB3aGljaCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2RcbiAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmluZEFuY2hvciAoY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAnYScpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgKGNoaWxkID0gZmluZEFuY2hvcihjaGlsZC5jaGlsZHJlbikpKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgX1Z1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoVnVlKSB7XG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCAmJiBfVnVlID09PSBWdWUpIHsgcmV0dXJuIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIF9WdWUgPSBWdWU7XG5cbiAgdmFyIGlzRGVmID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgIT09IHVuZGVmaW5lZDsgfTtcblxuICB2YXIgcmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgY2FsbFZhbCkge1xuICAgIHZhciBpID0gdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICAgIGlmIChpc0RlZihpKSAmJiBpc0RlZihpID0gaS5kYXRhKSAmJiBpc0RlZihpID0gaS5yZWdpc3RlclJvdXRlSW5zdGFuY2UpKSB7XG4gICAgICBpKHZtLCBjYWxsVmFsKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLm1peGluKHtcbiAgICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgICBpZiAoaXNEZWYodGhpcy4kb3B0aW9ucy5yb3V0ZXIpKSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSB0aGlzO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLiRvcHRpb25zLnJvdXRlcjtcbiAgICAgICAgdGhpcy5fcm91dGVyLmluaXQodGhpcyk7XG4gICAgICAgIFZ1ZS51dGlsLmRlZmluZVJlYWN0aXZlKHRoaXMsICdfcm91dGUnLCB0aGlzLl9yb3V0ZXIuaGlzdG9yeS5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSAodGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5fcm91dGVyUm9vdCkgfHwgdGhpcztcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcywgdGhpcyk7XG4gICAgfSxcbiAgICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGVyJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlciB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlIH1cbiAgfSk7XG5cbiAgVnVlLmNvbXBvbmVudCgnUm91dGVyVmlldycsIFZpZXcpO1xuICBWdWUuY29tcG9uZW50KCdSb3V0ZXJMaW5rJywgTGluayk7XG5cbiAgdmFyIHN0cmF0cyA9IFZ1ZS5jb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuICAvLyB1c2UgdGhlIHNhbWUgaG9vayBtZXJnaW5nIHN0cmF0ZWd5IGZvciByb3V0ZSBob29rc1xuICBzdHJhdHMuYmVmb3JlUm91dGVFbnRlciA9IHN0cmF0cy5iZWZvcmVSb3V0ZUxlYXZlID0gc3RyYXRzLmJlZm9yZVJvdXRlVXBkYXRlID0gc3RyYXRzLmNyZWF0ZWQ7XG59XG5cbi8qICAqL1xuXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZU1hcCAoXG4gIHJvdXRlcyxcbiAgb2xkUGF0aExpc3QsXG4gIG9sZFBhdGhNYXAsXG4gIG9sZE5hbWVNYXBcbikge1xuICAvLyB0aGUgcGF0aCBsaXN0IGlzIHVzZWQgdG8gY29udHJvbCBwYXRoIG1hdGNoaW5nIHByaW9yaXR5XG4gIHZhciBwYXRoTGlzdCA9IG9sZFBhdGhMaXN0IHx8IFtdO1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHBhdGhNYXAgPSBvbGRQYXRoTWFwIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgbmFtZU1hcCA9IG9sZE5hbWVNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByb3V0ZXMuZm9yRWFjaChmdW5jdGlvbiAocm91dGUpIHtcbiAgICBhZGRSb3V0ZVJlY29yZChwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCwgcm91dGUpO1xuICB9KTtcblxuICAvLyBlbnN1cmUgd2lsZGNhcmQgcm91dGVzIGFyZSBhbHdheXMgYXQgdGhlIGVuZFxuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChwYXRoTGlzdFtpXSA9PT0gJyonKSB7XG4gICAgICBwYXRoTGlzdC5wdXNoKHBhdGhMaXN0LnNwbGljZShpLCAxKVswXSk7XG4gICAgICBsLS07XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgLy8gd2FybiBpZiByb3V0ZXMgZG8gbm90IGluY2x1ZGUgbGVhZGluZyBzbGFzaGVzXG4gICAgdmFyIGZvdW5kID0gcGF0aExpc3RcbiAgICAvLyBjaGVjayBmb3IgbWlzc2luZyBsZWFkaW5nIHNsYXNoXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiBwYXRoICYmIHBhdGguY2hhckF0KDApICE9PSAnKicgJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcvJzsgfSk7XG5cbiAgICBpZiAoZm91bmQubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHBhdGhOYW1lcyA9IGZvdW5kLm1hcChmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gKFwiLSBcIiArIHBhdGgpOyB9KS5qb2luKCdcXG4nKTtcbiAgICAgIHdhcm4oZmFsc2UsIChcIk5vbi1uZXN0ZWQgcm91dGVzIG11c3QgaW5jbHVkZSBhIGxlYWRpbmcgc2xhc2ggY2hhcmFjdGVyLiBGaXggdGhlIGZvbGxvd2luZyByb3V0ZXM6IFxcblwiICsgcGF0aE5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoTGlzdDogcGF0aExpc3QsXG4gICAgcGF0aE1hcDogcGF0aE1hcCxcbiAgICBuYW1lTWFwOiBuYW1lTWFwXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUm91dGVSZWNvcmQgKFxuICBwYXRoTGlzdCxcbiAgcGF0aE1hcCxcbiAgbmFtZU1hcCxcbiAgcm91dGUsXG4gIHBhcmVudCxcbiAgbWF0Y2hBc1xuKSB7XG4gIHZhciBwYXRoID0gcm91dGUucGF0aDtcbiAgdmFyIG5hbWUgPSByb3V0ZS5uYW1lO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChwYXRoICE9IG51bGwsIFwiXFxcInBhdGhcXFwiIGlzIHJlcXVpcmVkIGluIGEgcm91dGUgY29uZmlndXJhdGlvbi5cIik7XG4gICAgYXNzZXJ0KFxuICAgICAgdHlwZW9mIHJvdXRlLmNvbXBvbmVudCAhPT0gJ3N0cmluZycsXG4gICAgICBcInJvdXRlIGNvbmZpZyBcXFwiY29tcG9uZW50XFxcIiBmb3IgcGF0aDogXCIgKyAoU3RyaW5nKFxuICAgICAgICBwYXRoIHx8IG5hbWVcbiAgICAgICkpICsgXCIgY2Fubm90IGJlIGEgXCIgKyBcInN0cmluZyBpZC4gVXNlIGFuIGFjdHVhbCBjb21wb25lbnQgaW5zdGVhZC5cIlxuICAgICk7XG4gIH1cblxuICB2YXIgcGF0aFRvUmVnZXhwT3B0aW9ucyA9XG4gICAgcm91dGUucGF0aFRvUmVnZXhwT3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoLCBwYXJlbnQsIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc3RyaWN0KTtcblxuICBpZiAodHlwZW9mIHJvdXRlLmNhc2VTZW5zaXRpdmUgPT09ICdib29sZWFuJykge1xuICAgIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc2Vuc2l0aXZlID0gcm91dGUuY2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIHZhciByZWNvcmQgPSB7XG4gICAgcGF0aDogbm9ybWFsaXplZFBhdGgsXG4gICAgcmVnZXg6IGNvbXBpbGVSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRQYXRoLCBwYXRoVG9SZWdleHBPcHRpb25zKSxcbiAgICBjb21wb25lbnRzOiByb3V0ZS5jb21wb25lbnRzIHx8IHsgZGVmYXVsdDogcm91dGUuY29tcG9uZW50IH0sXG4gICAgaW5zdGFuY2VzOiB7fSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIG1hdGNoQXM6IG1hdGNoQXMsXG4gICAgcmVkaXJlY3Q6IHJvdXRlLnJlZGlyZWN0LFxuICAgIGJlZm9yZUVudGVyOiByb3V0ZS5iZWZvcmVFbnRlcixcbiAgICBtZXRhOiByb3V0ZS5tZXRhIHx8IHt9LFxuICAgIHByb3BzOlxuICAgICAgcm91dGUucHJvcHMgPT0gbnVsbFxuICAgICAgICA/IHt9XG4gICAgICAgIDogcm91dGUuY29tcG9uZW50c1xuICAgICAgICAgID8gcm91dGUucHJvcHNcbiAgICAgICAgICA6IHsgZGVmYXVsdDogcm91dGUucHJvcHMgfVxuICB9O1xuXG4gIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgIC8vIFdhcm4gaWYgcm91dGUgaXMgbmFtZWQsIGRvZXMgbm90IHJlZGlyZWN0IGFuZCBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLlxuICAgIC8vIElmIHVzZXJzIG5hdmlnYXRlIHRvIHRoaXMgcm91dGUgYnkgbmFtZSwgdGhlIGRlZmF1bHQgY2hpbGQgd2lsbFxuICAgIC8vIG5vdCBiZSByZW5kZXJlZCAoR0ggSXNzdWUgIzYyOSlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5uYW1lICYmXG4gICAgICAgICFyb3V0ZS5yZWRpcmVjdCAmJlxuICAgICAgICByb3V0ZS5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gL15cXC8/JC8udGVzdChjaGlsZC5wYXRoKTsgfSlcbiAgICAgICkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwiTmFtZWQgUm91dGUgJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuIFwiICtcbiAgICAgICAgICAgIFwiV2hlbiBuYXZpZ2F0aW5nIHRvIHRoaXMgbmFtZWQgcm91dGUgKDp0bz1cXFwie25hbWU6ICdcIiArIChyb3V0ZS5uYW1lKSArIFwiJ1xcXCIpLCBcIiArXG4gICAgICAgICAgICBcInRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBSZW1vdmUgdGhlIG5hbWUgZnJvbSBcIiArXG4gICAgICAgICAgICBcInRoaXMgcm91dGUgYW5kIHVzZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBjaGlsZCByb3V0ZSBmb3IgbmFtZWQgXCIgK1xuICAgICAgICAgICAgXCJsaW5rcyBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJvdXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRNYXRjaEFzID0gbWF0Y2hBc1xuICAgICAgICA/IGNsZWFuUGF0aCgobWF0Y2hBcyArIFwiL1wiICsgKGNoaWxkLnBhdGgpKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBhZGRSb3V0ZVJlY29yZChwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCwgY2hpbGQsIHJlY29yZCwgY2hpbGRNYXRjaEFzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICghcGF0aE1hcFtyZWNvcmQucGF0aF0pIHtcbiAgICBwYXRoTGlzdC5wdXNoKHJlY29yZC5wYXRoKTtcbiAgICBwYXRoTWFwW3JlY29yZC5wYXRoXSA9IHJlY29yZDtcbiAgfVxuXG4gIGlmIChyb3V0ZS5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHJvdXRlLmFsaWFzKSA/IHJvdXRlLmFsaWFzIDogW3JvdXRlLmFsaWFzXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsaWFzZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBhbGlhcyA9IGFsaWFzZXNbaV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhbGlhcyA9PT0gcGF0aCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIChcIkZvdW5kIGFuIGFsaWFzIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHBhdGg6IFxcXCJcIiArIHBhdGggKyBcIlxcXCIuIFlvdSBoYXZlIHRvIHJlbW92ZSB0aGF0IGFsaWFzLiBJdCB3aWxsIGJlIGlnbm9yZWQgaW4gZGV2ZWxvcG1lbnQuXCIpXG4gICAgICAgICk7XG4gICAgICAgIC8vIHNraXAgaW4gZGV2IHRvIG1ha2UgaXQgd29ya1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgYWxpYXNSb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogYWxpYXMsXG4gICAgICAgIGNoaWxkcmVuOiByb3V0ZS5jaGlsZHJlblxuICAgICAgfTtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKFxuICAgICAgICBwYXRoTGlzdCxcbiAgICAgICAgcGF0aE1hcCxcbiAgICAgICAgbmFtZU1hcCxcbiAgICAgICAgYWxpYXNSb3V0ZSxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICByZWNvcmQucGF0aCB8fCAnLycgLy8gbWF0Y2hBc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmICghbmFtZU1hcFtuYW1lXSkge1xuICAgICAgbmFtZU1hcFtuYW1lXSA9IHJlY29yZDtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW1hdGNoQXMpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBcIkR1cGxpY2F0ZSBuYW1lZCByb3V0ZXMgZGVmaW5pdGlvbjogXCIgK1xuICAgICAgICAgIFwieyBuYW1lOiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLCBwYXRoOiBcXFwiXCIgKyAocmVjb3JkLnBhdGgpICsgXCJcXFwiIH1cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZVJvdXRlUmVnZXggKFxuICBwYXRoLFxuICBwYXRoVG9SZWdleHBPcHRpb25zXG4pIHtcbiAgdmFyIHJlZ2V4ID0gcGF0aFRvUmVnZXhwXzEocGF0aCwgW10sIHBhdGhUb1JlZ2V4cE9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZWdleC5rZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgd2FybihcbiAgICAgICAgIWtleXNba2V5Lm5hbWVdLFxuICAgICAgICAoXCJEdXBsaWNhdGUgcGFyYW0ga2V5cyBpbiByb3V0ZSB3aXRoIHBhdGg6IFxcXCJcIiArIHBhdGggKyBcIlxcXCJcIilcbiAgICAgICk7XG4gICAgICBrZXlzW2tleS5uYW1lXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlZ2V4XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGggKFxuICBwYXRoLFxuICBwYXJlbnQsXG4gIHN0cmljdFxuKSB7XG4gIGlmICghc3RyaWN0KSB7IHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7IH1cbiAgaWYgKHBhdGhbMF0gPT09ICcvJykgeyByZXR1cm4gcGF0aCB9XG4gIGlmIChwYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gcGF0aCB9XG4gIHJldHVybiBjbGVhblBhdGgoKChwYXJlbnQucGF0aCkgKyBcIi9cIiArIHBhdGgpKVxufVxuXG4vKiAgKi9cblxuXG5cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoZXIgKFxuICByb3V0ZXMsXG4gIHJvdXRlclxuKSB7XG4gIHZhciByZWYgPSBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMpO1xuICB2YXIgcGF0aExpc3QgPSByZWYucGF0aExpc3Q7XG4gIHZhciBwYXRoTWFwID0gcmVmLnBhdGhNYXA7XG4gIHZhciBuYW1lTWFwID0gcmVmLm5hbWVNYXA7XG5cbiAgZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgICBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMsIHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChcbiAgICByYXcsXG4gICAgY3VycmVudFJvdXRlLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHJhdywgY3VycmVudFJvdXRlLCBmYWxzZSwgcm91dGVyKTtcbiAgICB2YXIgbmFtZSA9IGxvY2F0aW9uLm5hbWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKHJlY29yZCwgKFwiUm91dGUgd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIicgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbikgfVxuICAgICAgdmFyIHBhcmFtTmFtZXMgPSByZWNvcmQucmVnZXgua2V5c1xuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFrZXkub3B0aW9uYWw7IH0pXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5Lm5hbWU7IH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Um91dGUgJiYgdHlwZW9mIGN1cnJlbnRSb3V0ZS5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50Um91dGUucGFyYW1zKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGxvY2F0aW9uLnBhcmFtcykgJiYgcGFyYW1OYW1lcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyYW1zW2tleV0gPSBjdXJyZW50Um91dGUucGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2F0aW9uLnBhdGggPSBmaWxsUGFyYW1zKHJlY29yZC5wYXRoLCBsb2NhdGlvbi5wYXJhbXMsIChcIm5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGgpIHtcbiAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGF0aCA9IHBhdGhMaXN0W2ldO1xuICAgICAgICB2YXIgcmVjb3JkJDEgPSBwYXRoTWFwW3BhdGhdO1xuICAgICAgICBpZiAobWF0Y2hSb3V0ZShyZWNvcmQkMS5yZWdleCwgbG9jYXRpb24ucGF0aCwgbG9jYXRpb24ucGFyYW1zKSkge1xuICAgICAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkJDEsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBubyBtYXRjaFxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiByZWRpcmVjdCAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uXG4gICkge1xuICAgIHZhciBvcmlnaW5hbFJlZGlyZWN0ID0gcmVjb3JkLnJlZGlyZWN0O1xuICAgIHZhciByZWRpcmVjdCA9IHR5cGVvZiBvcmlnaW5hbFJlZGlyZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9yaWdpbmFsUmVkaXJlY3QoY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKSlcbiAgICAgIDogb3JpZ2luYWxSZWRpcmVjdDtcblxuICAgIGlmICh0eXBlb2YgcmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWRpcmVjdCA9IHsgcGF0aDogcmVkaXJlY3QgfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZGlyZWN0IHx8IHR5cGVvZiByZWRpcmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICB2YXIgcmUgPSByZWRpcmVjdDtcbiAgICB2YXIgbmFtZSA9IHJlLm5hbWU7XG4gICAgdmFyIHBhdGggPSByZS5wYXRoO1xuICAgIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5O1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGFyYW1zID0gbG9jYXRpb24ucGFyYW1zO1xuICAgIHF1ZXJ5ID0gcmUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyByZS5xdWVyeSA6IHF1ZXJ5O1xuICAgIGhhc2ggPSByZS5oYXNPd25Qcm9wZXJ0eSgnaGFzaCcpID8gcmUuaGFzaCA6IGhhc2g7XG4gICAgcGFyYW1zID0gcmUuaGFzT3duUHJvcGVydHkoJ3BhcmFtcycpID8gcmUucGFyYW1zIDogcGFyYW1zO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIC8vIHJlc29sdmVkIG5hbWVkIGRpcmVjdFxuICAgICAgdmFyIHRhcmdldFJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQodGFyZ2V0UmVjb3JkLCAoXCJyZWRpcmVjdCBmYWlsZWQ6IG5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIC8vIDEuIHJlc29sdmUgcmVsYXRpdmUgcmVkaXJlY3RcbiAgICAgIHZhciByYXdQYXRoID0gcmVzb2x2ZVJlY29yZFBhdGgocGF0aCwgcmVjb3JkKTtcbiAgICAgIC8vIDIuIHJlc29sdmUgcGFyYW1zXG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInJlZGlyZWN0IHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyByYXdQYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIC8vIDMuIHJlbWF0Y2ggd2l0aCBleGlzdGluZyBxdWVyeSBhbmQgaGFzaFxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhbGlhcyAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoQXNcbiAgKSB7XG4gICAgdmFyIGFsaWFzZWRQYXRoID0gZmlsbFBhcmFtcyhtYXRjaEFzLCBsb2NhdGlvbi5wYXJhbXMsIChcImFsaWFzZWQgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIG1hdGNoQXMgKyBcIlxcXCJcIikpO1xuICAgIHZhciBhbGlhc2VkTWF0Y2ggPSBtYXRjaCh7XG4gICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgIHBhdGg6IGFsaWFzZWRQYXRoXG4gICAgfSk7XG4gICAgaWYgKGFsaWFzZWRNYXRjaCkge1xuICAgICAgdmFyIG1hdGNoZWQgPSBhbGlhc2VkTWF0Y2gubWF0Y2hlZDtcbiAgICAgIHZhciBhbGlhc2VkUmVjb3JkID0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdO1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0gYWxpYXNlZE1hdGNoLnBhcmFtcztcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUoYWxpYXNlZFJlY29yZCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlUm91dGUgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5yZWRpcmVjdCkge1xuICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlY29yZCwgcmVkaXJlY3RlZEZyb20gfHwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLm1hdGNoQXMpIHtcbiAgICAgIHJldHVybiBhbGlhcyhyZWNvcmQsIGxvY2F0aW9uLCByZWNvcmQubWF0Y2hBcylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tLCByb3V0ZXIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBhZGRSb3V0ZXM6IGFkZFJvdXRlc1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoUm91dGUgKFxuICByZWdleCxcbiAgcGF0aCxcbiAgcGFyYW1zXG4pIHtcbiAgdmFyIG0gPSBwYXRoLm1hdGNoKHJlZ2V4KTtcblxuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBtLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGtleSA9IHJlZ2V4LmtleXNbaSAtIDFdO1xuICAgIHZhciB2YWwgPSB0eXBlb2YgbVtpXSA9PT0gJ3N0cmluZycgPyBkZWNvZGVVUklDb21wb25lbnQobVtpXSkgOiBtW2ldO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIC8vIEZpeCAjMTk5NDogdXNpbmcgKiB3aXRoIHByb3BzOiB0cnVlIGdlbmVyYXRlcyBhIHBhcmFtIG5hbWVkIDBcbiAgICAgIHBhcmFtc1trZXkubmFtZSB8fCAncGF0aE1hdGNoJ10gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVJlY29yZFBhdGggKHBhdGgsIHJlY29yZCkge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGF0aCwgcmVjb3JkLnBhcmVudCA/IHJlY29yZC5wYXJlbnQucGF0aCA6ICcvJywgdHJ1ZSlcbn1cblxuLyogICovXG5cbi8vIHVzZSBVc2VyIFRpbWluZyBhcGkgKGlmIHByZXNlbnQpIGZvciBtb3JlIGFjY3VyYXRlIGtleSBwcmVjaXNpb25cbnZhciBUaW1lID1cbiAgaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93XG4gICAgPyB3aW5kb3cucGVyZm9ybWFuY2VcbiAgICA6IERhdGU7XG5cbmZ1bmN0aW9uIGdlblN0YXRlS2V5ICgpIHtcbiAgcmV0dXJuIFRpbWUubm93KCkudG9GaXhlZCgzKVxufVxuXG52YXIgX2tleSA9IGdlblN0YXRlS2V5KCk7XG5cbmZ1bmN0aW9uIGdldFN0YXRlS2V5ICgpIHtcbiAgcmV0dXJuIF9rZXlcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGVLZXkgKGtleSkge1xuICByZXR1cm4gKF9rZXkgPSBrZXkpXG59XG5cbi8qICAqL1xuXG52YXIgcG9zaXRpb25TdG9yZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIHNldHVwU2Nyb2xsICgpIHtcbiAgLy8gRml4IGZvciAjMTU4NSBmb3IgRmlyZWZveFxuICAvLyBGaXggZm9yICMyMTk1IEFkZCBvcHRpb25hbCB0aGlyZCBhdHRyaWJ1dGUgdG8gd29ya2Fyb3VuZCBhIGJ1ZyBpbiBzYWZhcmkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjY3OFxuICAvLyBGaXggZm9yICMyNzc0IFN1cHBvcnQgZm9yIGFwcHMgbG9hZGVkIGZyb20gV2luZG93cyBmaWxlIHNoYXJlcyBub3QgbWFwcGVkIHRvIG5ldHdvcmsgZHJpdmVzOiByZXBsYWNlZCBsb2NhdGlvbi5vcmlnaW4gd2l0aFxuICAvLyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgLy8gbG9jYXRpb24uaG9zdCBjb250YWlucyB0aGUgcG9ydCBhbmQgbG9jYXRpb24uaG9zdG5hbWUgZG9lc24ndFxuICB2YXIgcHJvdG9jb2xBbmRQYXRoID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xuICB2YXIgYWJzb2x1dGVQYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZShwcm90b2NvbEFuZFBhdGgsICcnKTtcbiAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBnZXRTdGF0ZUtleSgpIH0sICcnLCBhYnNvbHV0ZVBhdGgpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUua2V5KSB7XG4gICAgICBzZXRTdGF0ZUtleShlLnN0YXRlLmtleSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsIChcbiAgcm91dGVyLFxuICB0byxcbiAgZnJvbSxcbiAgaXNQb3Bcbikge1xuICBpZiAoIXJvdXRlci5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiZWhhdmlvciA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICBpZiAoIWJlaGF2aW9yKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgYmVoYXZpb3IgPT09ICdmdW5jdGlvbicsIFwic2Nyb2xsQmVoYXZpb3IgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgLy8gd2FpdCB1bnRpbCByZS1yZW5kZXIgZmluaXNoZXMgYmVmb3JlIHNjcm9sbGluZ1xuICByb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gYmVoYXZpb3IuY2FsbChcbiAgICAgIHJvdXRlcixcbiAgICAgIHRvLFxuICAgICAgZnJvbSxcbiAgICAgIGlzUG9wID8gcG9zaXRpb24gOiBudWxsXG4gICAgKTtcblxuICAgIGlmICghc2hvdWxkU2Nyb2xsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNob3VsZFNjcm9sbC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzaG91bGRTY3JvbGxcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIHNjcm9sbFRvUG9zaXRpb24oKHNob3VsZFNjcm9sbCksIHBvc2l0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Nyb2xsVG9Qb3NpdGlvbihzaG91bGRTY3JvbGwsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzYXZlU2Nyb2xsUG9zaXRpb24gKCkge1xuICB2YXIga2V5ID0gZ2V0U3RhdGVLZXkoKTtcbiAgaWYgKGtleSkge1xuICAgIHBvc2l0aW9uU3RvcmVba2V5XSA9IHtcbiAgICAgIHg6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgIHk6IHdpbmRvdy5wYWdlWU9mZnNldFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsUG9zaXRpb24gKCkge1xuICB2YXIga2V5ID0gZ2V0U3RhdGVLZXkoKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBwb3NpdGlvblN0b3JlW2tleV1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50UG9zaXRpb24gKGVsLCBvZmZzZXQpIHtcbiAgdmFyIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgZG9jUmVjdCA9IGRvY0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgeDogZWxSZWN0LmxlZnQgLSBkb2NSZWN0LmxlZnQgLSBvZmZzZXQueCxcbiAgICB5OiBlbFJlY3QudG9wIC0gZG9jUmVjdC50b3AgLSBvZmZzZXQueVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRQb3NpdGlvbiAob2JqKSB7XG4gIHJldHVybiBpc051bWJlcihvYmoueCkgfHwgaXNOdW1iZXIob2JqLnkpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICB5OiBpc051bWJlcihvYmoueSkgPyBvYmoueSA6IHdpbmRvdy5wYWdlWU9mZnNldFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgeDogaXNOdW1iZXIob2JqLngpID8gb2JqLnggOiAwLFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogMFxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyICh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ251bWJlcidcbn1cblxudmFyIGhhc2hTdGFydHNXaXRoTnVtYmVyUkUgPSAvXiNcXGQvO1xuXG5mdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uIChzaG91bGRTY3JvbGwsIHBvc2l0aW9uKSB7XG4gIHZhciBpc09iamVjdCA9IHR5cGVvZiBzaG91bGRTY3JvbGwgPT09ICdvYmplY3QnO1xuICBpZiAoaXNPYmplY3QgJiYgdHlwZW9mIHNob3VsZFNjcm9sbC5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBnZXRFbGVtZW50QnlJZCB3b3VsZCBzdGlsbCBmYWlsIGlmIHRoZSBzZWxlY3RvciBjb250YWlucyBhIG1vcmUgY29tcGxpY2F0ZWQgcXVlcnkgbGlrZSAjbWFpbltkYXRhLWF0dHJdXG4gICAgLy8gYnV0IGF0IHRoZSBzYW1lIHRpbWUsIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIHNlbGVjdCBhbiBlbGVtZW50IHdpdGggYW4gaWQgYW5kIGFuIGV4dHJhIHNlbGVjdG9yXG4gICAgdmFyIGVsID0gaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRS50ZXN0KHNob3VsZFNjcm9sbC5zZWxlY3RvcikgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNob3VsZFNjcm9sbC5zZWxlY3Rvci5zbGljZSgxKSkgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKTtcblxuICAgIGlmIChlbCkge1xuICAgICAgdmFyIG9mZnNldCA9XG4gICAgICAgIHNob3VsZFNjcm9sbC5vZmZzZXQgJiYgdHlwZW9mIHNob3VsZFNjcm9sbC5vZmZzZXQgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBzaG91bGRTY3JvbGwub2Zmc2V0XG4gICAgICAgICAgOiB7fTtcbiAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldChvZmZzZXQpO1xuICAgICAgcG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCAmJiBpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgIHBvc2l0aW9uID0gbm9ybWFsaXplUG9zaXRpb24oc2hvdWxkU2Nyb2xsKTtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbikge1xuICAgIHdpbmRvdy5zY3JvbGxUbyhwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHN1cHBvcnRzUHVzaFN0YXRlID1cbiAgaW5Ccm93c2VyICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICBpZiAoXG4gICAgICAodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICAgIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiZcbiAgICAgIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIHdpbmRvdy5oaXN0b3J5XG4gIH0pKCk7XG5cbmZ1bmN0aW9uIHB1c2hTdGF0ZSAodXJsLCByZXBsYWNlKSB7XG4gIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAvLyB0cnkuLi5jYXRjaCB0aGUgcHVzaFN0YXRlIGNhbGwgdG8gZ2V0IGFyb3VuZCBTYWZhcmlcbiAgLy8gRE9NIEV4Y2VwdGlvbiAxOCB3aGVyZSBpdCBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxsc1xuICB2YXIgaGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5O1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IGtleTogZ2V0U3RhdGVLZXkoKSB9LCAnJywgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoeyBrZXk6IHNldFN0YXRlS2V5KGdlblN0YXRlS2V5KCkpIH0sICcnLCB1cmwpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2Fzc2lnbiddKHVybCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVN0YXRlICh1cmwpIHtcbiAgcHVzaFN0YXRlKHVybCwgdHJ1ZSk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBydW5RdWV1ZSAocXVldWUsIGZuLCBjYikge1xuICB2YXIgc3RlcCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmIChpbmRleCA+PSBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWV1ZVtpbmRleF0pIHtcbiAgICAgICAgZm4ocXVldWVbaW5kZXhdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHN0ZXAoMCk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnRzIChtYXRjaGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodG8sIGZyb20sIG5leHQpIHtcbiAgICB2YXIgaGFzQXN5bmMgPSBmYWxzZTtcbiAgICB2YXIgcGVuZGluZyA9IDA7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcblxuICAgIGZsYXRNYXBDb21wb25lbnRzKG1hdGNoZWQsIGZ1bmN0aW9uIChkZWYsIF8sIG1hdGNoLCBrZXkpIHtcbiAgICAgIC8vIGlmIGl0J3MgYSBmdW5jdGlvbiBhbmQgZG9lc24ndCBoYXZlIGNpZCBhdHRhY2hlZCxcbiAgICAgIC8vIGFzc3VtZSBpdCdzIGFuIGFzeW5jIGNvbXBvbmVudCByZXNvbHZlIGZ1bmN0aW9uLlxuICAgICAgLy8gd2UgYXJlIG5vdCB1c2luZyBWdWUncyBkZWZhdWx0IGFzeW5jIHJlc29sdmluZyBtZWNoYW5pc20gYmVjYXVzZVxuICAgICAgLy8gd2Ugd2FudCB0byBoYWx0IHRoZSBuYXZpZ2F0aW9uIHVudGlsIHRoZSBpbmNvbWluZyBjb21wb25lbnQgaGFzIGJlZW5cbiAgICAgIC8vIHJlc29sdmVkLlxuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZGVmLmNpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhc0FzeW5jID0gdHJ1ZTtcbiAgICAgICAgcGVuZGluZysrO1xuXG4gICAgICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzb2x2ZWREZWYpIHtcbiAgICAgICAgICBpZiAoaXNFU01vZHVsZShyZXNvbHZlZERlZikpIHtcbiAgICAgICAgICAgIHJlc29sdmVkRGVmID0gcmVzb2x2ZWREZWYuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2F2ZSByZXNvbHZlZCBvbiBhc3luYyBmYWN0b3J5IGluIGNhc2UgaXQncyB1c2VkIGVsc2V3aGVyZVxuICAgICAgICAgIGRlZi5yZXNvbHZlZCA9IHR5cGVvZiByZXNvbHZlZERlZiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByZXNvbHZlZERlZlxuICAgICAgICAgICAgOiBfVnVlLmV4dGVuZChyZXNvbHZlZERlZik7XG4gICAgICAgICAgbWF0Y2guY29tcG9uZW50c1trZXldID0gcmVzb2x2ZWREZWY7XG4gICAgICAgICAgcGVuZGluZy0tO1xuICAgICAgICAgIGlmIChwZW5kaW5nIDw9IDApIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICB2YXIgbXNnID0gXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQgXCIgKyBrZXkgKyBcIjogXCIgKyByZWFzb247XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKGZhbHNlLCBtc2cpO1xuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gaXNFcnJvcihyZWFzb24pXG4gICAgICAgICAgICAgID8gcmVhc29uXG4gICAgICAgICAgICAgIDogbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzID0gZGVmKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5ldyBzeW50YXggaW4gVnVlIDIuM1xuICAgICAgICAgICAgdmFyIGNvbXAgPSByZXMuY29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGNvbXAgJiYgdHlwZW9mIGNvbXAudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjb21wLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaGFzQXN5bmMpIHsgbmV4dCgpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdE1hcENvbXBvbmVudHMgKFxuICBtYXRjaGVkLFxuICBmblxuKSB7XG4gIHJldHVybiBmbGF0dGVuKG1hdGNoZWQubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZuKFxuICAgICAgbS5jb21wb25lbnRzW2tleV0sXG4gICAgICBtLmluc3RhbmNlc1trZXldLFxuICAgICAgbSwga2V5XG4gICAgKTsgfSlcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4gKGFycikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxuZnVuY3Rpb24gaXNFU01vZHVsZSAob2JqKSB7XG4gIHJldHVybiBvYmouX19lc01vZHVsZSB8fCAoaGFzU3ltYm9sICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbn1cblxuLy8gaW4gV2VicGFjayAyLCByZXF1aXJlLmVuc3VyZSBub3cgYWxzbyByZXR1cm5zIGEgUHJvbWlzZVxuLy8gc28gdGhlIHJlc29sdmUvcmVqZWN0IGZ1bmN0aW9ucyBtYXkgZ2V0IGNhbGxlZCBhbiBleHRyYSB0aW1lXG4vLyBpZiB0aGUgdXNlciB1c2VzIGFuIGFycm93IGZ1bmN0aW9uIHNob3J0aGFuZCB0aGF0IGhhcHBlbnMgdG9cbi8vIHJldHVybiB0aGF0IFByb21pc2UuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgaWYgKGNhbGxlZCkgeyByZXR1cm4gfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gIH1cbn1cblxudmFyIE5hdmlnYXRpb25EdXBsaWNhdGVkID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoRXJyb3IpIHtcbiAgZnVuY3Rpb24gTmF2aWdhdGlvbkR1cGxpY2F0ZWQgKG5vcm1hbGl6ZWRMb2NhdGlvbikge1xuICAgIEVycm9yLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5fbmFtZSA9ICdOYXZpZ2F0aW9uRHVwbGljYXRlZCc7XG4gICAgLy8gcGFzc2luZyB0aGUgbWVzc2FnZSB0byBzdXBlcigpIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIHRoZSB0cmFuc3BpbGVkIHZlcnNpb25cbiAgICB0aGlzLm1lc3NhZ2UgPSBcIk5hdmlnYXRpbmcgdG8gY3VycmVudCBsb2NhdGlvbiAoXFxcIlwiICsgKG5vcm1hbGl6ZWRMb2NhdGlvbi5mdWxsUGF0aCkgKyBcIlxcXCIpIGlzIG5vdCBhbGxvd2VkXCI7XG4gICAgLy8gYWRkIGEgc3RhY2sgcHJvcGVydHkgc28gc2VydmljZXMgbGlrZSBTZW50cnkgY2FuIGNvcnJlY3RseSBkaXNwbGF5IGl0XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdGFjaycsIHtcbiAgICAgIHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLy8gd2UgY291bGQgYWxzbyBoYXZlIHVzZWRcbiAgICAvLyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKVxuICAgIC8vIGJ1dCBpdCBvbmx5IGV4aXN0cyBvbiBub2RlIGFuZCBjaHJvbWVcbiAgfVxuXG4gIGlmICggRXJyb3IgKSBOYXZpZ2F0aW9uRHVwbGljYXRlZC5fX3Byb3RvX18gPSBFcnJvcjtcbiAgTmF2aWdhdGlvbkR1cGxpY2F0ZWQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggRXJyb3IgJiYgRXJyb3IucHJvdG90eXBlICk7XG4gIE5hdmlnYXRpb25EdXBsaWNhdGVkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5hdmlnYXRpb25EdXBsaWNhdGVkO1xuXG4gIHJldHVybiBOYXZpZ2F0aW9uRHVwbGljYXRlZDtcbn0oRXJyb3IpKTtcblxuLy8gc3VwcG9ydCBJRTlcbk5hdmlnYXRpb25EdXBsaWNhdGVkLl9uYW1lID0gJ05hdmlnYXRpb25EdXBsaWNhdGVkJztcblxuLyogICovXG5cbnZhciBIaXN0b3J5ID0gZnVuY3Rpb24gSGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gIHRoaXMucm91dGVyID0gcm91dGVyO1xuICB0aGlzLmJhc2UgPSBub3JtYWxpemVCYXNlKGJhc2UpO1xuICAvLyBzdGFydCB3aXRoIGEgcm91dGUgb2JqZWN0IHRoYXQgc3RhbmRzIGZvciBcIm5vd2hlcmVcIlxuICB0aGlzLmN1cnJlbnQgPSBTVEFSVDtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICB0aGlzLnJlYWR5Q2JzID0gW107XG4gIHRoaXMucmVhZHlFcnJvckNicyA9IFtdO1xuICB0aGlzLmVycm9yQ2JzID0gW107XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5saXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4gKGNiKSB7XG4gIHRoaXMuY2IgPSBjYjtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICBpZiAodGhpcy5yZWFkeSkge1xuICAgIGNiKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZWFkeUNicy5wdXNoKGNiKTtcbiAgICBpZiAoZXJyb3JDYikge1xuICAgICAgdGhpcy5yZWFkeUVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG4gICAgfVxuICB9XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS50cmFuc2l0aW9uVG8gPSBmdW5jdGlvbiB0cmFuc2l0aW9uVG8gKFxuICBsb2NhdGlvbixcbiAgb25Db21wbGV0ZSxcbiAgb25BYm9ydFxuKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHJvdXRlID0gdGhpcy5yb3V0ZXIubWF0Y2gobG9jYXRpb24sIHRoaXMuY3VycmVudCk7XG4gIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgcm91dGUsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLnVwZGF0ZVJvdXRlKHJvdXRlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB0aGlzJDEuZW5zdXJlVVJMKCk7XG5cbiAgICAgIC8vIGZpcmUgcmVhZHkgY2JzIG9uY2VcbiAgICAgIGlmICghdGhpcyQxLnJlYWR5KSB7XG4gICAgICAgIHRoaXMkMS5yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMkMS5yZWFkeUNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKHJvdXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAob25BYm9ydCkge1xuICAgICAgICBvbkFib3J0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoZXJyICYmICF0aGlzJDEucmVhZHkpIHtcbiAgICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcyQxLnJlYWR5RXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5jb25maXJtVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uIChyb3V0ZSwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICB2YXIgYWJvcnQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgLy8gYWZ0ZXIgbWVyZ2luZyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9wdWxsLzI3NzEgd2VcbiAgICAvLyBXaGVuIHRoZSB1c2VyIG5hdmlnYXRlcyB0aHJvdWdoIGhpc3RvcnkgdGhyb3VnaCBiYWNrL2ZvcndhcmQgYnV0dG9uc1xuICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIHRocm93IHRoZSBlcnJvci4gV2Ugb25seSB0aHJvdyBpdCBpZiBkaXJlY3RseSBjYWxsaW5nXG4gICAgLy8gcHVzaC9yZXBsYWNlLiBUaGF0J3Mgd2h5IGl0J3Mgbm90IGluY2x1ZGVkIGluIGlzRXJyb3JcbiAgICBpZiAoIWlzRXh0ZW5kZWRFcnJvcihOYXZpZ2F0aW9uRHVwbGljYXRlZCwgZXJyKSAmJiBpc0Vycm9yKGVycikpIHtcbiAgICAgIGlmICh0aGlzJDEuZXJyb3JDYnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMkMS5lcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybihmYWxzZSwgJ3VuY2F1Z2h0IGVycm9yIGR1cmluZyByb3V0ZSBuYXZpZ2F0aW9uOicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIG9uQWJvcnQgJiYgb25BYm9ydChlcnIpO1xuICB9O1xuICBpZiAoXG4gICAgaXNTYW1lUm91dGUocm91dGUsIGN1cnJlbnQpICYmXG4gICAgLy8gaW4gdGhlIGNhc2UgdGhlIHJvdXRlIG1hcCBoYXMgYmVlbiBkeW5hbWljYWxseSBhcHBlbmRlZCB0b1xuICAgIHJvdXRlLm1hdGNoZWQubGVuZ3RoID09PSBjdXJyZW50Lm1hdGNoZWQubGVuZ3RoXG4gICkge1xuICAgIHRoaXMuZW5zdXJlVVJMKCk7XG4gICAgcmV0dXJuIGFib3J0KG5ldyBOYXZpZ2F0aW9uRHVwbGljYXRlZChyb3V0ZSkpXG4gIH1cblxuICB2YXIgcmVmID0gcmVzb2x2ZVF1ZXVlKFxuICAgIHRoaXMuY3VycmVudC5tYXRjaGVkLFxuICAgIHJvdXRlLm1hdGNoZWRcbiAgKTtcbiAgICB2YXIgdXBkYXRlZCA9IHJlZi51cGRhdGVkO1xuICAgIHZhciBkZWFjdGl2YXRlZCA9IHJlZi5kZWFjdGl2YXRlZDtcbiAgICB2YXIgYWN0aXZhdGVkID0gcmVmLmFjdGl2YXRlZDtcblxuICB2YXIgcXVldWUgPSBbXS5jb25jYXQoXG4gICAgLy8gaW4tY29tcG9uZW50IGxlYXZlIGd1YXJkc1xuICAgIGV4dHJhY3RMZWF2ZUd1YXJkcyhkZWFjdGl2YXRlZCksXG4gICAgLy8gZ2xvYmFsIGJlZm9yZSBob29rc1xuICAgIHRoaXMucm91dGVyLmJlZm9yZUhvb2tzLFxuICAgIC8vIGluLWNvbXBvbmVudCB1cGRhdGUgaG9va3NcbiAgICBleHRyYWN0VXBkYXRlSG9va3ModXBkYXRlZCksXG4gICAgLy8gaW4tY29uZmlnIGVudGVyIGd1YXJkc1xuICAgIGFjdGl2YXRlZC5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG0uYmVmb3JlRW50ZXI7IH0pLFxuICAgIC8vIGFzeW5jIGNvbXBvbmVudHNcbiAgICByZXNvbHZlQXN5bmNDb21wb25lbnRzKGFjdGl2YXRlZClcbiAgKTtcblxuICB0aGlzLnBlbmRpbmcgPSByb3V0ZTtcbiAgdmFyIGl0ZXJhdG9yID0gZnVuY3Rpb24gKGhvb2ssIG5leHQpIHtcbiAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICByZXR1cm4gYWJvcnQoKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaG9vayhyb3V0ZSwgY3VycmVudCwgZnVuY3Rpb24gKHRvKSB7XG4gICAgICAgIGlmICh0byA9PT0gZmFsc2UgfHwgaXNFcnJvcih0bykpIHtcbiAgICAgICAgICAvLyBuZXh0KGZhbHNlKSAtPiBhYm9ydCBuYXZpZ2F0aW9uLCBlbnN1cmUgY3VycmVudCBVUkxcbiAgICAgICAgICB0aGlzJDEuZW5zdXJlVVJMKHRydWUpO1xuICAgICAgICAgIGFib3J0KHRvKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgdG8gPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICh0eXBlb2YgdG8ucGF0aCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRvLm5hbWUgPT09ICdzdHJpbmcnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbmV4dCgnLycpIG9yIG5leHQoeyBwYXRoOiAnLycgfSkgLT4gcmVkaXJlY3RcbiAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmIHRvLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRoaXMkMS5yZXBsYWNlKHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcyQxLnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25maXJtIHRyYW5zaXRpb24gYW5kIHBhc3Mgb24gdGhlIHZhbHVlXG4gICAgICAgICAgbmV4dCh0byk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFib3J0KGUpO1xuICAgIH1cbiAgfTtcblxuICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9zdEVudGVyQ2JzID0gW107XG4gICAgdmFyIGlzVmFsaWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY3VycmVudCA9PT0gcm91dGU7IH07XG4gICAgLy8gd2FpdCB1bnRpbCBhc3luYyBjb21wb25lbnRzIGFyZSByZXNvbHZlZCBiZWZvcmVcbiAgICAvLyBleHRyYWN0aW5nIGluLWNvbXBvbmVudCBlbnRlciBndWFyZHNcbiAgICB2YXIgZW50ZXJHdWFyZHMgPSBleHRyYWN0RW50ZXJHdWFyZHMoYWN0aXZhdGVkLCBwb3N0RW50ZXJDYnMsIGlzVmFsaWQpO1xuICAgIHZhciBxdWV1ZSA9IGVudGVyR3VhcmRzLmNvbmNhdCh0aGlzJDEucm91dGVyLnJlc29sdmVIb29rcyk7XG4gICAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgICB9XG4gICAgICB0aGlzJDEucGVuZGluZyA9IG51bGw7XG4gICAgICBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIGlmICh0aGlzJDEucm91dGVyLmFwcCkge1xuICAgICAgICB0aGlzJDEucm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBvc3RFbnRlckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudXBkYXRlUm91dGUgPSBmdW5jdGlvbiB1cGRhdGVSb3V0ZSAocm91dGUpIHtcbiAgdmFyIHByZXYgPSB0aGlzLmN1cnJlbnQ7XG4gIHRoaXMuY3VycmVudCA9IHJvdXRlO1xuICB0aGlzLmNiICYmIHRoaXMuY2Iocm91dGUpO1xuICB0aGlzLnJvdXRlci5hZnRlckhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBob29rICYmIGhvb2socm91dGUsIHByZXYpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2UgKGJhc2UpIHtcbiAgaWYgKCFiYXNlKSB7XG4gICAgaWYgKGluQnJvd3Nlcikge1xuICAgICAgLy8gcmVzcGVjdCA8YmFzZT4gdGFnXG4gICAgICB2YXIgYmFzZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYmFzZScpO1xuICAgICAgYmFzZSA9IChiYXNlRWwgJiYgYmFzZUVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB8fCAnLyc7XG4gICAgICAvLyBzdHJpcCBmdWxsIFVSTCBvcmlnaW5cbiAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoL15odHRwcz86XFwvXFwvW15cXC9dKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZSA9ICcvJztcbiAgICB9XG4gIH1cbiAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgdGhlIHN0YXJ0aW5nIHNsYXNoXG4gIGlmIChiYXNlLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgYmFzZSA9ICcvJyArIGJhc2U7XG4gIH1cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIHJldHVybiBiYXNlLnJlcGxhY2UoL1xcLyQvLCAnJylcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXVlIChcbiAgY3VycmVudCxcbiAgbmV4dFxuKSB7XG4gIHZhciBpO1xuICB2YXIgbWF4ID0gTWF0aC5tYXgoY3VycmVudC5sZW5ndGgsIG5leHQubGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7XG4gICAgaWYgKGN1cnJlbnRbaV0gIT09IG5leHRbaV0pIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgdXBkYXRlZDogbmV4dC5zbGljZSgwLCBpKSxcbiAgICBhY3RpdmF0ZWQ6IG5leHQuc2xpY2UoaSksXG4gICAgZGVhY3RpdmF0ZWQ6IGN1cnJlbnQuc2xpY2UoaSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmRzIChcbiAgcmVjb3JkcyxcbiAgbmFtZSxcbiAgYmluZCxcbiAgcmV2ZXJzZVxuKSB7XG4gIHZhciBndWFyZHMgPSBmbGF0TWFwQ29tcG9uZW50cyhyZWNvcmRzLCBmdW5jdGlvbiAoZGVmLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSkge1xuICAgIHZhciBndWFyZCA9IGV4dHJhY3RHdWFyZChkZWYsIG5hbWUpO1xuICAgIGlmIChndWFyZCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ3VhcmQpXG4gICAgICAgID8gZ3VhcmQubWFwKGZ1bmN0aW9uIChndWFyZCkgeyByZXR1cm4gYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpOyB9KVxuICAgICAgICA6IGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbGF0dGVuKHJldmVyc2UgPyBndWFyZHMucmV2ZXJzZSgpIDogZ3VhcmRzKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmQgKFxuICBkZWYsXG4gIGtleVxuKSB7XG4gIGlmICh0eXBlb2YgZGVmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXh0ZW5kIG5vdyBzbyB0aGF0IGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQuXG4gICAgZGVmID0gX1Z1ZS5leHRlbmQoZGVmKTtcbiAgfVxuICByZXR1cm4gZGVmLm9wdGlvbnNba2V5XVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TGVhdmVHdWFyZHMgKGRlYWN0aXZhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKGRlYWN0aXZhdGVkLCAnYmVmb3JlUm91dGVMZWF2ZScsIGJpbmRHdWFyZCwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUhvb2tzICh1cGRhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKHVwZGF0ZWQsICdiZWZvcmVSb3V0ZVVwZGF0ZScsIGJpbmRHdWFyZClcbn1cblxuZnVuY3Rpb24gYmluZEd1YXJkIChndWFyZCwgaW5zdGFuY2UpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kUm91dGVHdWFyZCAoKSB7XG4gICAgICByZXR1cm4gZ3VhcmQuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVudGVyR3VhcmRzIChcbiAgYWN0aXZhdGVkLFxuICBjYnMsXG4gIGlzVmFsaWRcbikge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhcbiAgICBhY3RpdmF0ZWQsXG4gICAgJ2JlZm9yZVJvdXRlRW50ZXInLFxuICAgIGZ1bmN0aW9uIChndWFyZCwgXywgbWF0Y2gsIGtleSkge1xuICAgICAgcmV0dXJuIGJpbmRFbnRlckd1YXJkKGd1YXJkLCBtYXRjaCwga2V5LCBjYnMsIGlzVmFsaWQpXG4gICAgfVxuICApXG59XG5cbmZ1bmN0aW9uIGJpbmRFbnRlckd1YXJkIChcbiAgZ3VhcmQsXG4gIG1hdGNoLFxuICBrZXksXG4gIGNicyxcbiAgaXNWYWxpZFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiByb3V0ZUVudGVyR3VhcmQgKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgcmV0dXJuIGd1YXJkKHRvLCBmcm9tLCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2JzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vICM3NTBcbiAgICAgICAgICAvLyBpZiBhIHJvdXRlci12aWV3IGlzIHdyYXBwZWQgd2l0aCBhbiBvdXQtaW4gdHJhbnNpdGlvbixcbiAgICAgICAgICAvLyB0aGUgaW5zdGFuY2UgbWF5IG5vdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhdCB0aGlzIHRpbWUuXG4gICAgICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHBvbGwgZm9yIHJlZ2lzdHJhdGlvbiB1bnRpbCBjdXJyZW50IHJvdXRlXG4gICAgICAgICAgLy8gaXMgbm8gbG9uZ2VyIHZhbGlkLlxuICAgICAgICAgIHBvbGwoY2IsIG1hdGNoLmluc3RhbmNlcywga2V5LCBpc1ZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0KGNiKTtcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvbGwgKFxuICBjYiwgLy8gc29tZWhvdyBmbG93IGNhbm5vdCBpbmZlciB0aGlzIGlzIGEgZnVuY3Rpb25cbiAgaW5zdGFuY2VzLFxuICBrZXksXG4gIGlzVmFsaWRcbikge1xuICBpZiAoXG4gICAgaW5zdGFuY2VzW2tleV0gJiZcbiAgICAhaW5zdGFuY2VzW2tleV0uX2lzQmVpbmdEZXN0cm95ZWQgLy8gZG8gbm90IHJldXNlIGJlaW5nIGRlc3Ryb3llZCBpbnN0YW5jZVxuICApIHtcbiAgICBjYihpbnN0YW5jZXNba2V5XSk7XG4gIH0gZWxzZSBpZiAoaXNWYWxpZCgpKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKGNiLCBpbnN0YW5jZXMsIGtleSwgaXNWYWxpZCk7XG4gICAgfSwgMTYpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgSFRNTDVIaXN0b3J5ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSGlzdG9yeSkge1xuICBmdW5jdGlvbiBIVE1MNUhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG5cbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICBzZXR1cFNjcm9sbCgpO1xuICAgIH1cblxuICAgIHZhciBpbml0TG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzLmJhc2UpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuXG4gICAgICAvLyBBdm9pZGluZyBmaXJzdCBgcG9wc3RhdGVgIGV2ZW50IGRpc3BhdGNoZWQgaW4gc29tZSBicm93c2VycyBidXQgZmlyc3RcbiAgICAgIC8vIGhpc3Rvcnkgcm91dGUgbm90IHVwZGF0ZWQgc2luY2UgYXN5bmMgZ3VhcmQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMkMS5iYXNlKTtcbiAgICAgIGlmICh0aGlzJDEuY3VycmVudCA9PT0gU1RBUlQgJiYgbG9jYXRpb24gPT09IGluaXRMb2NhdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcyQxLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgICAgIGhhbmRsZVNjcm9sbChyb3V0ZXIsIHJvdXRlLCBjdXJyZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBIVE1MNUhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkgJiYgSGlzdG9yeS5wcm90b3R5cGUgKTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhUTUw1SGlzdG9yeTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHB1c2hTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICByZXBsYWNlU3RhdGUoY2xlYW5QYXRoKHRoaXMkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgaWYgKGdldExvY2F0aW9uKHRoaXMuYmFzZSkgIT09IHRoaXMuY3VycmVudC5mdWxsUGF0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBjbGVhblBhdGgodGhpcy5iYXNlICsgdGhpcy5jdXJyZW50LmZ1bGxQYXRoKTtcbiAgICAgIHB1c2ggPyBwdXNoU3RhdGUoY3VycmVudCkgOiByZXBsYWNlU3RhdGUoY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TG9jYXRpb24odGhpcy5iYXNlKVxuICB9O1xuXG4gIHJldHVybiBIVE1MNUhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gZ2V0TG9jYXRpb24gKGJhc2UpIHtcbiAgdmFyIHBhdGggPSBkZWNvZGVVUkkod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgaWYgKGJhc2UgJiYgcGF0aC5pbmRleE9mKGJhc2UpID09PSAwKSB7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoXG59XG5cbi8qICAqL1xuXG52YXIgSGFzaEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhhc2hIaXN0b3J5IChyb3V0ZXIsIGJhc2UsIGZhbGxiYWNrKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgLy8gY2hlY2sgaGlzdG9yeSBmYWxsYmFjayBkZWVwbGlua2luZ1xuICAgIGlmIChmYWxsYmFjayAmJiBjaGVja0ZhbGxiYWNrKHRoaXMuYmFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbnN1cmVTbGFzaCgpO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgSGFzaEhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIYXNoSGlzdG9yeTtcblxuICAvLyB0aGlzIGlzIGRlbGF5ZWQgdW50aWwgdGhlIGFwcCBtb3VudHNcbiAgLy8gdG8gYXZvaWQgdGhlIGhhc2hjaGFuZ2UgbGlzdGVuZXIgYmVpbmcgZmlyZWQgdG9vIGVhcmx5XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5zZXR1cExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjtcbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICBzZXR1cFNjcm9sbCgpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgc3VwcG9ydHNQdXNoU3RhdGUgPyAncG9wc3RhdGUnIDogJ2hhc2hjaGFuZ2UnLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuICAgICAgICBpZiAoIWVuc3VyZVNsYXNoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGdldEhhc2goKSwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHB1c2hIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQuZnVsbFBhdGg7XG4gICAgaWYgKGdldEhhc2goKSAhPT0gY3VycmVudCkge1xuICAgICAgcHVzaCA/IHB1c2hIYXNoKGN1cnJlbnQpIDogcmVwbGFjZUhhc2goY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRIYXNoKClcbiAgfTtcblxuICByZXR1cm4gSGFzaEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gY2hlY2tGYWxsYmFjayAoYmFzZSkge1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihiYXNlKTtcbiAgaWYgKCEvXlxcLyMvLnRlc3QobG9jYXRpb24pKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoY2xlYW5QYXRoKGJhc2UgKyAnLyMnICsgbG9jYXRpb24pKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVNsYXNoICgpIHtcbiAgdmFyIHBhdGggPSBnZXRIYXNoKCk7XG4gIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXBsYWNlSGFzaCgnLycgKyBwYXRoKTtcbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGdldEhhc2ggKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBpbmRleCA9IGhyZWYuaW5kZXhPZignIycpO1xuICAvLyBlbXB0eSBwYXRoXG4gIGlmIChpbmRleCA8IDApIHsgcmV0dXJuICcnIH1cblxuICBocmVmID0gaHJlZi5zbGljZShpbmRleCArIDEpO1xuICAvLyBkZWNvZGUgdGhlIGhhc2ggYnV0IG5vdCB0aGUgc2VhcmNoIG9yIGhhc2hcbiAgLy8gYXMgc2VhcmNoKHF1ZXJ5KSBpcyBhbHJlYWR5IGRlY29kZWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzI3MDhcbiAgdmFyIHNlYXJjaEluZGV4ID0gaHJlZi5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCA8IDApIHtcbiAgICB2YXIgaGFzaEluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICBocmVmID0gZGVjb2RlVVJJKGhyZWYuc2xpY2UoMCwgaGFzaEluZGV4KSkgKyBocmVmLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgfSBlbHNlIHsgaHJlZiA9IGRlY29kZVVSSShocmVmKTsgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzZWFyY2hJbmRleCA+IC0xKSB7XG4gICAgICBocmVmID0gZGVjb2RlVVJJKGhyZWYuc2xpY2UoMCwgc2VhcmNoSW5kZXgpKSArIGhyZWYuc2xpY2Uoc2VhcmNoSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBocmVmXG59XG5cbmZ1bmN0aW9uIGdldFVybCAocGF0aCkge1xuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaSA9IGhyZWYuaW5kZXhPZignIycpO1xuICB2YXIgYmFzZSA9IGkgPj0gMCA/IGhyZWYuc2xpY2UoMCwgaSkgOiBocmVmO1xuICByZXR1cm4gKGJhc2UgKyBcIiNcIiArIHBhdGgpXG59XG5cbmZ1bmN0aW9uIHB1c2hIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHB1c2hTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICByZXBsYWNlU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShnZXRVcmwocGF0aCkpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgQWJzdHJhY3RIaXN0b3J5ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSGlzdG9yeSkge1xuICBmdW5jdGlvbiBBYnN0cmFjdEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICAgIEhpc3RvcnkuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICB0aGlzLmluZGV4ID0gLTE7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBBYnN0cmFjdEhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkgJiYgSGlzdG9yeS5wcm90b3R5cGUgKTtcbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0SGlzdG9yeTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4ICsgMSkuY29uY2F0KHJvdXRlKTtcbiAgICAgICAgdGhpcyQxLmluZGV4Kys7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgdGhpcyQxLnN0YWNrID0gdGhpcyQxLnN0YWNrLnNsaWNlKDAsIHRoaXMkMS5pbmRleCkuY29uY2F0KHJvdXRlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuaW5kZXggKyBuO1xuICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gdGhpcy5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcm91dGUgPSB0aGlzLnN0YWNrW3RhcmdldEluZGV4XTtcbiAgICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKFxuICAgICAgcm91dGUsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5pbmRleCA9IHRhcmdldEluZGV4O1xuICAgICAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRXh0ZW5kZWRFcnJvcihOYXZpZ2F0aW9uRHVwbGljYXRlZCwgZXJyKSkge1xuICAgICAgICAgIHRoaXMkMS5pbmRleCA9IHRhcmdldEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmZ1bGxQYXRoIDogJy8nXG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKCkge1xuICAgIC8vIG5vb3BcbiAgfTtcblxuICByZXR1cm4gQWJzdHJhY3RIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbi8qICAqL1xuXG5cblxudmFyIFZ1ZVJvdXRlciA9IGZ1bmN0aW9uIFZ1ZVJvdXRlciAob3B0aW9ucykge1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICB0aGlzLmFwcCA9IG51bGw7XG4gIHRoaXMuYXBwcyA9IFtdO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLmJlZm9yZUhvb2tzID0gW107XG4gIHRoaXMucmVzb2x2ZUhvb2tzID0gW107XG4gIHRoaXMuYWZ0ZXJIb29rcyA9IFtdO1xuICB0aGlzLm1hdGNoZXIgPSBjcmVhdGVNYXRjaGVyKG9wdGlvbnMucm91dGVzIHx8IFtdLCB0aGlzKTtcblxuICB2YXIgbW9kZSA9IG9wdGlvbnMubW9kZSB8fCAnaGFzaCc7XG4gIHRoaXMuZmFsbGJhY2sgPSBtb2RlID09PSAnaGlzdG9yeScgJiYgIXN1cHBvcnRzUHVzaFN0YXRlICYmIG9wdGlvbnMuZmFsbGJhY2sgIT09IGZhbHNlO1xuICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgIG1vZGUgPSAnaGFzaCc7XG4gIH1cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICBtb2RlID0gJ2Fic3RyYWN0JztcbiAgfVxuICB0aGlzLm1vZGUgPSBtb2RlO1xuXG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ2hpc3RvcnknOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhUTUw1SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdoYXNoJzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIYXNoSGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UsIHRoaXMuZmFsbGJhY2spO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdhYnN0cmFjdCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgQWJzdHJhY3RIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSk7XG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQoZmFsc2UsIChcImludmFsaWQgbW9kZTogXCIgKyBtb2RlKSk7XG4gICAgICB9XG4gIH1cbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGN1cnJlbnRSb3V0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gbWF0Y2ggKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIHJlZGlyZWN0ZWRGcm9tXG4pIHtcbiAgcmV0dXJuIHRoaXMubWF0Y2hlci5tYXRjaChyYXcsIGN1cnJlbnQsIHJlZGlyZWN0ZWRGcm9tKVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmN1cnJlbnRSb3V0ZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhpc3RvcnkgJiYgdGhpcy5oaXN0b3J5LmN1cnJlbnRcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIGluaXQgKGFwcCAvKiBWdWUgY29tcG9uZW50IGluc3RhbmNlICovKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnQoXG4gICAgaW5zdGFsbC5pbnN0YWxsZWQsXG4gICAgXCJub3QgaW5zdGFsbGVkLiBNYWtlIHN1cmUgdG8gY2FsbCBgVnVlLnVzZShWdWVSb3V0ZXIpYCBcIiArXG4gICAgXCJiZWZvcmUgY3JlYXRpbmcgcm9vdCBpbnN0YW5jZS5cIlxuICApO1xuXG4gIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG5cbiAgLy8gc2V0IHVwIGFwcCBkZXN0cm95ZWQgaGFuZGxlclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjYzOVxuICBhcHAuJG9uY2UoJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIGNsZWFuIG91dCBhcHAgZnJvbSB0aGlzLmFwcHMgYXJyYXkgb25jZSBkZXN0cm95ZWRcbiAgICB2YXIgaW5kZXggPSB0aGlzJDEuYXBwcy5pbmRleE9mKGFwcCk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHsgdGhpcyQxLmFwcHMuc3BsaWNlKGluZGV4LCAxKTsgfVxuICAgIC8vIGVuc3VyZSB3ZSBzdGlsbCBoYXZlIGEgbWFpbiBhcHAgb3IgbnVsbCBpZiBubyBhcHBzXG4gICAgLy8gd2UgZG8gbm90IHJlbGVhc2UgdGhlIHJvdXRlciBzbyBpdCBjYW4gYmUgcmV1c2VkXG4gICAgaWYgKHRoaXMkMS5hcHAgPT09IGFwcCkgeyB0aGlzJDEuYXBwID0gdGhpcyQxLmFwcHNbMF0gfHwgbnVsbDsgfVxuICB9KTtcblxuICAvLyBtYWluIGFwcCBwcmV2aW91c2x5IGluaXRpYWxpemVkXG4gIC8vIHJldHVybiBhcyB3ZSBkb24ndCBuZWVkIHRvIHNldCB1cCBuZXcgaGlzdG9yeSBsaXN0ZW5lclxuICBpZiAodGhpcy5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuYXBwID0gYXBwO1xuXG4gIHZhciBoaXN0b3J5ID0gdGhpcy5oaXN0b3J5O1xuXG4gIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSFRNTDVIaXN0b3J5KSB7XG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gIH0gZWxzZSBpZiAoaGlzdG9yeSBpbnN0YW5jZW9mIEhhc2hIaXN0b3J5KSB7XG4gICAgdmFyIHNldHVwSGFzaExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgaGlzdG9yeS5zZXR1cExpc3RlbmVycygpO1xuICAgIH07XG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oXG4gICAgICBoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpLFxuICAgICAgc2V0dXBIYXNoTGlzdGVuZXIsXG4gICAgICBzZXR1cEhhc2hMaXN0ZW5lclxuICAgICk7XG4gIH1cblxuICBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAocm91dGUpIHtcbiAgICB0aGlzJDEuYXBwcy5mb3JFYWNoKGZ1bmN0aW9uIChhcHApIHtcbiAgICAgIGFwcC5fcm91dGUgPSByb3V0ZTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbiBiZWZvcmVFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYmVmb3JlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVSZXNvbHZlID0gZnVuY3Rpb24gYmVmb3JlUmVzb2x2ZSAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLnJlc29sdmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmFmdGVyRWFjaCA9IGZ1bmN0aW9uIGFmdGVyRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmFmdGVySG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uUmVhZHkoY2IsIGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25FcnJvcihlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxLmhpc3RvcnkucHVzaChsb2NhdGlvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFvbkNvbXBsZXRlICYmICFvbkFib3J0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0aGlzJDEuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgdGhpcy5oaXN0b3J5LmdvKG4pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjayAoKSB7XG4gIHRoaXMuZ28oLTEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCAoKSB7XG4gIHRoaXMuZ28oMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldE1hdGNoZWRDb21wb25lbnRzID0gZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHRvKSB7XG4gIHZhciByb3V0ZSA9IHRvXG4gICAgPyB0by5tYXRjaGVkXG4gICAgICA/IHRvXG4gICAgICA6IHRoaXMucmVzb2x2ZSh0bykucm91dGVcbiAgICA6IHRoaXMuY3VycmVudFJvdXRlO1xuICBpZiAoIXJvdXRlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgcm91dGUubWF0Y2hlZC5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobS5jb21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIG0uY29tcG9uZW50c1trZXldXG4gICAgfSlcbiAgfSkpXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlIChcbiAgdG8sXG4gIGN1cnJlbnQsXG4gIGFwcGVuZFxuKSB7XG4gIGN1cnJlbnQgPSBjdXJyZW50IHx8IHRoaXMuaGlzdG9yeS5jdXJyZW50O1xuICB2YXIgbG9jYXRpb24gPSBub3JtYWxpemVMb2NhdGlvbihcbiAgICB0byxcbiAgICBjdXJyZW50LFxuICAgIGFwcGVuZCxcbiAgICB0aGlzXG4gICk7XG4gIHZhciByb3V0ZSA9IHRoaXMubWF0Y2gobG9jYXRpb24sIGN1cnJlbnQpO1xuICB2YXIgZnVsbFBhdGggPSByb3V0ZS5yZWRpcmVjdGVkRnJvbSB8fCByb3V0ZS5mdWxsUGF0aDtcbiAgdmFyIGJhc2UgPSB0aGlzLmhpc3RvcnkuYmFzZTtcbiAgdmFyIGhyZWYgPSBjcmVhdGVIcmVmKGJhc2UsIGZ1bGxQYXRoLCB0aGlzLm1vZGUpO1xuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICByb3V0ZTogcm91dGUsXG4gICAgaHJlZjogaHJlZixcbiAgICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgIG5vcm1hbGl6ZWRUbzogbG9jYXRpb24sXG4gICAgcmVzb2x2ZWQ6IHJvdXRlXG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWRkUm91dGVzID0gZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgdGhpcy5tYXRjaGVyLmFkZFJvdXRlcyhyb3V0ZXMpO1xuICBpZiAodGhpcy5oaXN0b3J5LmN1cnJlbnQgIT09IFNUQVJUKSB7XG4gICAgdGhpcy5oaXN0b3J5LnRyYW5zaXRpb25Ubyh0aGlzLmhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVnVlUm91dGVyLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySG9vayAobGlzdCwgZm4pIHtcbiAgbGlzdC5wdXNoKGZuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IGxpc3QuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkgeyBsaXN0LnNwbGljZShpLCAxKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhyZWYgKGJhc2UsIGZ1bGxQYXRoLCBtb2RlKSB7XG4gIHZhciBwYXRoID0gbW9kZSA9PT0gJ2hhc2gnID8gJyMnICsgZnVsbFBhdGggOiBmdWxsUGF0aDtcbiAgcmV0dXJuIGJhc2UgPyBjbGVhblBhdGgoYmFzZSArICcvJyArIHBhdGgpIDogcGF0aFxufVxuXG5WdWVSb3V0ZXIuaW5zdGFsbCA9IGluc3RhbGw7XG5WdWVSb3V0ZXIudmVyc2lvbiA9ICczLjEuMyc7XG5cbmlmIChpbkJyb3dzZXIgJiYgd2luZG93LlZ1ZSkge1xuICB3aW5kb3cuVnVlLnVzZShWdWVSb3V0ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWdWVSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=style&index=0&lang=scss& ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"07db42f3\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\", function() {\n     var newContent = __webpack_require__(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wNjJmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCIwN2RiNDJmM1wiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4d682107\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\", function() {\n     var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT8xNmNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zYjRmMzVhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjRkNjgyMTA3XCIsIGNvbnRlbnQsIGZhbHNlLCB7XCJzb3VyY2VNYXBcIjpmYWxzZSxcInNoYWRvd01vZGVcIjpmYWxzZX0pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9M2I0ZjM1YWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zYjRmMzVhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"63df74aa\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\", function() {\n     var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/ZDk1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZm9vdGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWY2NzhmYzIyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNjNkZjc0YWFcIiwgY29udGVudCwgZmFsc2UsIHtcInNvdXJjZU1hcFwiOmZhbHNlLFwic2hhZG93TW9kZVwiOmZhbHNlfSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"3568dd4b\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\", function() {\n     var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/OWVlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZmYmE4ZGFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMzU2OGRkNGJcIiwgY29udGVudCwgZmFsc2UsIHtcInNvdXJjZU1hcFwiOmZhbHNlLFwic2hhZG93TW9kZVwiOmZhbHNlfSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"c0b7fb5c\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\", function() {\n     var newContent = __webpack_require__(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n     if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MTEwNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCJjMGI3ZmI1Y1wiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiYWRjODAxJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js":
/*!**************************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js ***!
  \**************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addStylesClient; });\n/* harmony import */ var _listToStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./listToStyles */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js\");\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\n\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nfunction addStylesClient (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = Object(_listToStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = Object(_listToStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcz84NWNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxuaW1wb3J0IGxpc3RUb1N0eWxlcyBmcm9tICcuL2xpc3RUb1N0eWxlcydcblxudmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAodHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG52YXIgb3B0aW9ucyA9IG51bGxcbnZhciBzc3JJZEtleSA9ICdkYXRhLXZ1ZS1zc3ItaWQnXG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFN0eWxlc0NsaWVudCAocGFyZW50SWQsIGxpc3QsIF9pc1Byb2R1Y3Rpb24sIF9vcHRpb25zKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICBvcHRpb25zID0gX29wdGlvbnMgfHwge31cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVsnICsgc3NySWRLZXkgKyAnfj1cIicgKyBvYmouaWQgKyAnXCJdJylcblxuICBpZiAoc3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNpbXBseSBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIENocm9tZSBjYW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlIHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYgdGhlIHN0eWxlIHRhZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2FsbHkuIFNvIHdlIHJlbW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5kIGluamVjdCBuZXcgb25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8vIHVzZSBzaW5nbGV0b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrXG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2luZ2xldG9uRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKVxuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxlLXRhZyBtb2RlIGluIGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpXG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudClcbiAgICByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9iailcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4gICAgICAgICAgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSkoKVxuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05vZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlRWxlbWVudCwgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc3NySWQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKHNzcklkS2V5LCBvYmouaWQpXG4gIH1cblxuICBpZiAoc291cmNlTWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kZXZ0b29scy9kb2NzL2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3VyY2UgbWFwcyBpbnNpZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgJyAqLydcbiAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\n");

/***/ }),

/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js":
/*!***********************************************************************************!*\
  !*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js ***!
  \***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return listToStyles; });\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nfunction listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2xpc3RUb1N0eWxlcy5qcz82MTgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbGlzdCBmb3JtYXQgcHJvZHVjZWQgYnkgY3NzLWxvYWRlciBpbnRvIHNvbWV0aGluZ1xuICogZWFzaWVyIHRvIG1hbmlwdWxhdGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAocGFyZW50SWQsIGxpc3QpIHtcbiAgdmFyIHN0eWxlcyA9IFtdXG4gIHZhciBuZXdTdHlsZXMgPSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICB2YXIgaWQgPSBpdGVtWzBdXG4gICAgdmFyIGNzcyA9IGl0ZW1bMV1cbiAgICB2YXIgbWVkaWEgPSBpdGVtWzJdXG4gICAgdmFyIHNvdXJjZU1hcCA9IGl0ZW1bM11cbiAgICB2YXIgcGFydCA9IHtcbiAgICAgIGlkOiBwYXJlbnRJZCArICc6JyArIGksXG4gICAgICBjc3M6IGNzcyxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwXG4gICAgfVxuICAgIGlmICghbmV3U3R5bGVzW2lkXSkge1xuICAgICAgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHsgaWQ6IGlkLCBwYXJ0czogW3BhcnRdIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVzXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js\n");

/***/ }),

/***/ "./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js":
/*!**************************************************************!*\
  !*** ./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js ***!
  \**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: \"sandbox\" !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"sandbox\" !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\"[Vue warn]: \" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if ( true && !config.async) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if ( true && customSetter) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n       true && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n     true && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (true) {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && \"sandbox\" !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n    warn(\n      'Invalid component name: \"' + name + '\". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (true) {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(props)) + \".\",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(inject)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n      \"but got \" + (toRawType(value)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (true) {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if ( true && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    true\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if ( true && isObject(def)) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  if (!valid) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n    \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  var expectedValue = styleValue(value, expectedType);\n  var receivedValue = styleValue(value, receivedType);\n  // check if we need to specify expected value\n  if (expectedTypes.length === 1 &&\n      isExplicable(expectedType) &&\n      !isBoolean(expectedType, receivedType)) {\n    message += \" with value \" + expectedValue;\n  }\n  message += \", got \" + receivedType + \" \";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \"with value \" + receivedValue + \".\";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\"\\\"\" + value + \"\\\"\")\n  } else if (type === 'Number') {\n    return (\"\" + (Number(value)))\n  } else {\n    return (\"\" + value)\n  }\n}\n\nfunction isExplicable (value) {\n  var explicitTypes = ['string', 'number', 'boolean'];\n  return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (true) {\n    warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \"force\" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Techinically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n      'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\nvar mark;\nvar measure;\n\nif (true) {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n       true && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (true) {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n            \" \\\"\" + key + \"\\\". \" +\n            \"Note that HTML attributes are case-insensitive and camelCased \" +\n            \"props need to use their kebab-case equivalents when using in-DOM \" +\n            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (true) {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \"Avoid mutating an injected value directly since the changes will be \" +\n            \"overwritten whenever the provided component re-renders. \" +\n            \"injection being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        });\n      } else {}\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (true) {\n          warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    return res && (\n      res.length === 0 ||\n      (res.length === 1 && res[0].isComment) // #9658\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if ( true && !isObject(bindObject)) {\n        warn(\n          'slot v-bind without argument expects an Object',\n          this\n        );\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes = scopedSlotFn(props) || fallback;\n  } else {\n    nodes = this.$slots[name] || fallback;\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n       true && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\"update:\" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n       true && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if ( true && key !== '' && key !== null) {\n      // null is a speical value for explicitly removing a binding\n      warn(\n        (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (true) {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (true) {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n     true && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if ( true &&\n    isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (true) {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n    }, true);\n  } else {}\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack becaues all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if ( true && vm.$options.renderError) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \"renderError\");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if ( true && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n       true && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                 true\n                  ? (\"timeout (\" + (res.timeout) + \"ms)\")\n                  : undefined\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (true) {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n          (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n          \"Note that HTML attributes are case-insensitive and you cannot use \" +\n          \"v-on to listen to camelCase events when using in-DOM templates. \" +\n          \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \"event handler for \\\"\" + event + \"\\\"\";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (true) {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if ( true && config.performance && mark) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \"vue-perf-start:\" + id;\n      var endTag = \"vue-perf-end:\" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\"vue \" + name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (true) {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \"$stable\" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (true) {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \" hook\";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (true) {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if ( true && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if ( true && !config.async) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression =  true\n    ? expOrFn.toString()\n    : undefined;\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n       true && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    } else {\n      throw e\n    }\n  } finally {\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (true) {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    } else {}\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n     true && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (true) {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n       true && warn(\n        \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \"_data\", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \"data()\");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if ( true && getter == null) {\n      warn(\n        (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (true) {\n      if (key in vm.$data) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if ( true &&\n      sharedPropertyDefinition.set === noop) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (true) {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n          \"Avoid defining component methods that start with _ or $.\"\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (true) {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      try {\n        cb.call(vm, watcher.value);\n      } catch (error) {\n        handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n      }\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      startTag = \"vue-perf-start:\" + (vm._uid);\n      endTag = \"vue-perf-end:\" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (true) {\n      initProxy(vm);\n    } else {}\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if ( true &&\n    !(this instanceof Vue)\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if ( true && name) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if ( true && type === 'component') {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var cached$$1 = cache[key];\n  if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n    cached$$1.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        cache[key] = vnode;\n        keys.push(key);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (true) {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n       true && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        a.asyncFactory === b.asyncFactory &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (true) {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if ( true && data && data.pre) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (true) {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (true) {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (true) {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (true) {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (true) {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \"inserted\" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes(parentElm, [oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \"true\" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecesarry `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if ( true && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if ( true && isDef(explicitLeaveDuration)) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \"change\" instead of \"input\" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n     true && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if ( true && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if ( true &&\n      mode && mode !== 'in-out' && mode !== 'out-in'\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (true) {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        true\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if ( true &&\n      config.productionTip !== false &&\n      typeof console !== 'undefined'\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \"You are running Vue in development mode.\\n\" +\n        \"Make sure to turn on production mode when deploying for production.\\n\" +\n        \"See more tips at https://vuejs.org/guide/deployment.html\"\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_webpack@4.41.2@webpack/buildin/global.js */ \"./node_modules/_webpack@4.41.2@webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZUAyLjYuMTBAdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWVAMi42LjEwQHZ1ZS9kaXN0L3Z1ZS5ydW50aW1lLmVzbS5qcz82ZTZkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICApXG59XG5cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBPYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwICh2KSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXggKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gKFxuICAgIGlzRGVmKHZhbCkgJiZcbiAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGxcbiAgICA/ICcnXG4gICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3RyLFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKClcbn0pO1xuXG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4gKGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAgID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cblxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVybiBib3VuZEZuXG59XG5cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgcmV0dXJuIGZuLmJpbmQoY3R4KVxufVxuXG52YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gID8gbmF0aXZlQmluZFxuICA6IHBvbHlmaWxsQmluZDtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LykuXG4gKi9cbmZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXSAmJiBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0oKSk7XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gKG5vb3ApOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChub29wKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHByb3RvQXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJvcHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xuXG52YXIgY2FsbGJhY2tzID0gW107XG52YXIgcGVuZGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyAoKSB7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29waWVzW2ldKCk7XG4gIH1cbn1cblxuLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cbi8vIEhvd2V2ZXIsIGl0IGhhcyBzdWJ0bGUgcHJvYmxlbXMgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSByZXBhaW50XG4vLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xuLy8gdGhhdCBjYW5ub3QgYmUgY2lyY3VtdmVudGVkIChlLmcuICM3MTA5LCAjNzE1MywgIzc1NDYsICM3ODM0LCAjODEwOSkuXG4vLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Ncbi8vIHdoZXJlIG1pY3JvdGFza3MgaGF2ZSB0b28gaGlnaCBhIHByaW9yaXR5IGFuZCBmaXJlIGluIGJldHdlZW4gc3VwcG9zZWRseVxuLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXG52YXIgdGltZXJGdW5jO1xuXG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbiAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59IGVsc2UgaWYgKCFpc0lFICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gIGlzTmF0aXZlKE11dGF0aW9uT2JzZXJ2ZXIpIHx8XG4gIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICBNdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0nXG4pKSB7XG4gIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gIHZhciBjb3VudGVyID0gMTtcbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICB2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcikpO1xuICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICB9KTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpICUgMjtcbiAgICB0ZXh0Tm9kZS5kYXRhID0gU3RyaW5nKGNvdW50ZXIpO1xuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gIC8vIFRlY2hpbmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayAoY2IsIGN0eCkge1xuICB2YXIgX3Jlc29sdmU7XG4gIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZShjdHgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgIHRpbWVyRnVuYygpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMgPSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscycgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fFxuICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgfVxuICB9O1xuXG4gIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSAodm0pIHtcbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgPyBnZXRIYW5kbGVyXG4gICAgICAgIDogaGFzSGFuZGxlcjtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8IE9iamVjdC5pc0Zyb3plbih2YWwpIHx8IHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZhbC5fX29iX18pIHtcbiAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Vlbi5hZGQoZGVwSWQpO1xuICB9XG4gIGlmIChpc0EpIHtcbiAgICBpID0gdmFsLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pOyB9XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgfVxufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWljYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVlcyBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjEwJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgIH1cblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgIH0gZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZUtleXMgKGNoaWxkcmVuKSB7XG4gICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV07XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgaWYgKGlzRGVmKGtleSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIiArIGtleSArIFwiJy4gVGhpcyBtYXkgY2F1c2UgYW4gdXBkYXRlIGVycm9yLlwiKSxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZElkeEluT2xkIChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAoXG4gICAgb2xkVm5vZGUsXG4gICAgdm5vZGUsXG4gICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgIG93bmVyQXJyYXksXG4gICAgaW5kZXgsXG4gICAgcmVtb3ZlT25seVxuICApIHtcbiAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gY2xvbmUgcmV1c2VkIHZub2RlXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAvLyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIgcmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkgeyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgY2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgb3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1ciwgb2xkO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKGF0dHJzLl9fb2JfXykpIHtcbiAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICB9XG4gIH1cbiAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgLy8gIzY2NjY6IElFL0VkZ2UgZm9yY2VzIHByb2dyZXNzIHZhbHVlIGRvd24gdG8gMSBiZWZvcmUgc2V0dGluZyBhIG1heFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgID8gJ3RydWUnXG4gICAgICAgIDoga2V5O1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlU2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXG4gICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgaXNJRSAmJiAhaXNJRTkgJiZcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgaWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxIChldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldCQxOyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgIHZhciBvcmlnaW5hbCA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IG9yaWdpbmFsLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBfdGFyZ2V0XG4pIHtcbiAgKF90YXJnZXQgfHwgdGFyZ2V0JDEpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4pIHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJiBpc1NWRyhlbG0udGFnTmFtZSkgJiYgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiICsgY3VyICsgXCI8L3N2Zz5cIjtcbiAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2VzYXJyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldXG4gICAgKSB7XG4gICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICB0cnkge1xuICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKVxuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSlcbiAgICAgICkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbnZhciB3aGl0ZXNwYWNlUkUgPSAvXFxzKy87XG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgdmFyIHRyYW5zaXRpb25EZWxheXMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMgKHMpIHtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9sZWF2ZUNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3M7XG4gIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgdmFyIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3M7XG4gIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICB2YXIgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZDtcbiAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICB2YXIgYXBwZWFyID0gZGF0YS5hcHBlYXI7XG4gIHZhciBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXI7XG4gIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gIH1cblxuICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzc1xuICAgID8gYXBwZWFyQ2xhc3NcbiAgICA6IGVudGVyQ2xhc3M7XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgPyBhcHBlYXJBY3RpdmVDbGFzc1xuICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzXG4gICAgPyBhcHBlYXJUb0NsYXNzXG4gICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyKVxuICAgIDogYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKHR5cGVvZiBhcHBlYXIgPT09ICdmdW5jdGlvbicgPyBhcHBlYXIgOiBlbnRlcilcbiAgICA6IGVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIpXG4gICAgOiBhZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICA/IChhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWQpXG4gICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgY2IgPSBlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICB9XG4gICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgfSBlbHNlIHtcbiAgICBwZXJmb3JtTGVhdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSAoKSB7XG4gICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICBhdHRycyxcbiAga2xhc3MsXG4gIGV2ZW50cyxcbiAgZG9tUHJvcHMsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uXG5dO1xuXG4vKiAgKi9cblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcblxudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZGlyZWN0aXZlID0ge1xuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gIzY5MDNcbiAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2RlLmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSkgeyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAodHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxcbiAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59O1xuXG4vKiAgKi9cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBkYXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3RlbmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxkKSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZ1xufVxuXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xuXG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xuICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICApIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiXG4gICAgICApO1xuICAgIH1cbiAgfSwgMCk7XG59XG5cbi8qICAqL1xuXG5leHBvcnQgZGVmYXVsdCBWdWU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\n");

/***/ }),

/***/ "./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js":
/*!********************************************************!*\
  !*** ./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js ***!
  \********************************************************/
/*! exports provided: default, Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Store\", function() { return Store; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"install\", function() { return install; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapState\", function() { return mapState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapMutations\", function() { return mapMutations; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapGetters\", function() { return mapGetters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapActions\", function() { return mapActions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createNamespacedHelpers\", function() { return createNamespacedHelpers; });\n/**\n * vuex v3.1.1\n * (c) 2019 Evan You\n * @license MIT\n */\nfunction applyMixin (Vue) {\n  var version = Number(Vue.version.split('.')[0]);\n\n  if (version >= 2) {\n    Vue.mixin({ beforeCreate: vuexInit });\n  } else {\n    // override init and inject vuex init procedure\n    // for 1.x backwards compatibility.\n    var _init = Vue.prototype._init;\n    Vue.prototype._init = function (options) {\n      if ( options === void 0 ) options = {};\n\n      options.init = options.init\n        ? [vuexInit].concat(options.init)\n        : vuexInit;\n      _init.call(this, options);\n    };\n  }\n\n  /**\n   * Vuex init hook, injected into each instances init hooks list.\n   */\n\n  function vuexInit () {\n    var options = this.$options;\n    // store injection\n    if (options.store) {\n      this.$store = typeof options.store === 'function'\n        ? options.store()\n        : options.store;\n    } else if (options.parent && options.parent.$store) {\n      this.$store = options.parent.$store;\n    }\n  }\n}\n\nvar target = typeof window !== 'undefined'\n  ? window\n  : typeof global !== 'undefined'\n    ? global\n    : {};\nvar devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n  if (!devtoolHook) { return }\n\n  store._devtoolHook = devtoolHook;\n\n  devtoolHook.emit('vuex:init', store);\n\n  devtoolHook.on('vuex:travel-to-state', function (targetState) {\n    store.replaceState(targetState);\n  });\n\n  store.subscribe(function (mutation, state) {\n    devtoolHook.emit('vuex:mutation', mutation, state);\n  });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\n\n/**\n * forEach for object\n */\nfunction forEachValue (obj, fn) {\n  Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n}\n\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\nfunction isPromise (val) {\n  return val && typeof val.then === 'function'\n}\n\nfunction assert (condition, msg) {\n  if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n}\n\nfunction partial (fn, arg) {\n  return function () {\n    return fn(arg)\n  }\n}\n\n// Base data struct for store's module, package with some attribute and method\nvar Module = function Module (rawModule, runtime) {\n  this.runtime = runtime;\n  // Store some children item\n  this._children = Object.create(null);\n  // Store the origin module object which passed by programmer\n  this._rawModule = rawModule;\n  var rawState = rawModule.state;\n\n  // Store the origin module's state\n  this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n};\n\nvar prototypeAccessors = { namespaced: { configurable: true } };\n\nprototypeAccessors.namespaced.get = function () {\n  return !!this._rawModule.namespaced\n};\n\nModule.prototype.addChild = function addChild (key, module) {\n  this._children[key] = module;\n};\n\nModule.prototype.removeChild = function removeChild (key) {\n  delete this._children[key];\n};\n\nModule.prototype.getChild = function getChild (key) {\n  return this._children[key]\n};\n\nModule.prototype.update = function update (rawModule) {\n  this._rawModule.namespaced = rawModule.namespaced;\n  if (rawModule.actions) {\n    this._rawModule.actions = rawModule.actions;\n  }\n  if (rawModule.mutations) {\n    this._rawModule.mutations = rawModule.mutations;\n  }\n  if (rawModule.getters) {\n    this._rawModule.getters = rawModule.getters;\n  }\n};\n\nModule.prototype.forEachChild = function forEachChild (fn) {\n  forEachValue(this._children, fn);\n};\n\nModule.prototype.forEachGetter = function forEachGetter (fn) {\n  if (this._rawModule.getters) {\n    forEachValue(this._rawModule.getters, fn);\n  }\n};\n\nModule.prototype.forEachAction = function forEachAction (fn) {\n  if (this._rawModule.actions) {\n    forEachValue(this._rawModule.actions, fn);\n  }\n};\n\nModule.prototype.forEachMutation = function forEachMutation (fn) {\n  if (this._rawModule.mutations) {\n    forEachValue(this._rawModule.mutations, fn);\n  }\n};\n\nObject.defineProperties( Module.prototype, prototypeAccessors );\n\nvar ModuleCollection = function ModuleCollection (rawRootModule) {\n  // register root module (Vuex.Store options)\n  this.register([], rawRootModule, false);\n};\n\nModuleCollection.prototype.get = function get (path) {\n  return path.reduce(function (module, key) {\n    return module.getChild(key)\n  }, this.root)\n};\n\nModuleCollection.prototype.getNamespace = function getNamespace (path) {\n  var module = this.root;\n  return path.reduce(function (namespace, key) {\n    module = module.getChild(key);\n    return namespace + (module.namespaced ? key + '/' : '')\n  }, '')\n};\n\nModuleCollection.prototype.update = function update$1 (rawRootModule) {\n  update([], this.root, rawRootModule);\n};\n\nModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n    var this$1 = this;\n    if ( runtime === void 0 ) runtime = true;\n\n  if (true) {\n    assertRawModule(path, rawModule);\n  }\n\n  var newModule = new Module(rawModule, runtime);\n  if (path.length === 0) {\n    this.root = newModule;\n  } else {\n    var parent = this.get(path.slice(0, -1));\n    parent.addChild(path[path.length - 1], newModule);\n  }\n\n  // register nested modules\n  if (rawModule.modules) {\n    forEachValue(rawModule.modules, function (rawChildModule, key) {\n      this$1.register(path.concat(key), rawChildModule, runtime);\n    });\n  }\n};\n\nModuleCollection.prototype.unregister = function unregister (path) {\n  var parent = this.get(path.slice(0, -1));\n  var key = path[path.length - 1];\n  if (!parent.getChild(key).runtime) { return }\n\n  parent.removeChild(key);\n};\n\nfunction update (path, targetModule, newModule) {\n  if (true) {\n    assertRawModule(path, newModule);\n  }\n\n  // update target module\n  targetModule.update(newModule);\n\n  // update nested modules\n  if (newModule.modules) {\n    for (var key in newModule.modules) {\n      if (!targetModule.getChild(key)) {\n        if (true) {\n          console.warn(\n            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n            'manual reload is needed'\n          );\n        }\n        return\n      }\n      update(\n        path.concat(key),\n        targetModule.getChild(key),\n        newModule.modules[key]\n      );\n    }\n  }\n}\n\nvar functionAssert = {\n  assert: function (value) { return typeof value === 'function'; },\n  expected: 'function'\n};\n\nvar objectAssert = {\n  assert: function (value) { return typeof value === 'function' ||\n    (typeof value === 'object' && typeof value.handler === 'function'); },\n  expected: 'function or object with \"handler\" function'\n};\n\nvar assertTypes = {\n  getters: functionAssert,\n  mutations: functionAssert,\n  actions: objectAssert\n};\n\nfunction assertRawModule (path, rawModule) {\n  Object.keys(assertTypes).forEach(function (key) {\n    if (!rawModule[key]) { return }\n\n    var assertOptions = assertTypes[key];\n\n    forEachValue(rawModule[key], function (value, type) {\n      assert(\n        assertOptions.assert(value),\n        makeAssertionMessage(path, key, type, value, assertOptions.expected)\n      );\n    });\n  });\n}\n\nfunction makeAssertionMessage (path, key, type, value, expected) {\n  var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n  if (path.length > 0) {\n    buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n  }\n  buf += \" is \" + (JSON.stringify(value)) + \".\";\n  return buf\n}\n\nvar Vue; // bind on install\n\nvar Store = function Store (options) {\n  var this$1 = this;\n  if ( options === void 0 ) options = {};\n\n  // Auto install if it is not done yet and `window` has `Vue`.\n  // To allow users to avoid auto-installation in some cases,\n  // this code should be placed here. See #731\n  if (!Vue && typeof window !== 'undefined' && window.Vue) {\n    install(window.Vue);\n  }\n\n  if (true) {\n    assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n    assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n    assert(this instanceof Store, \"store must be called with the new operator.\");\n  }\n\n  var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n  var strict = options.strict; if ( strict === void 0 ) strict = false;\n\n  // store internal state\n  this._committing = false;\n  this._actions = Object.create(null);\n  this._actionSubscribers = [];\n  this._mutations = Object.create(null);\n  this._wrappedGetters = Object.create(null);\n  this._modules = new ModuleCollection(options);\n  this._modulesNamespaceMap = Object.create(null);\n  this._subscribers = [];\n  this._watcherVM = new Vue();\n\n  // bind commit and dispatch to self\n  var store = this;\n  var ref = this;\n  var dispatch = ref.dispatch;\n  var commit = ref.commit;\n  this.dispatch = function boundDispatch (type, payload) {\n    return dispatch.call(store, type, payload)\n  };\n  this.commit = function boundCommit (type, payload, options) {\n    return commit.call(store, type, payload, options)\n  };\n\n  // strict mode\n  this.strict = strict;\n\n  var state = this._modules.root.state;\n\n  // init root module.\n  // this also recursively registers all sub-modules\n  // and collects all module getters inside this._wrappedGetters\n  installModule(this, state, [], this._modules.root);\n\n  // initialize the store vm, which is responsible for the reactivity\n  // (also registers _wrappedGetters as computed properties)\n  resetStoreVM(this, state);\n\n  // apply plugins\n  plugins.forEach(function (plugin) { return plugin(this$1); });\n\n  var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n  if (useDevtools) {\n    devtoolPlugin(this);\n  }\n};\n\nvar prototypeAccessors$1 = { state: { configurable: true } };\n\nprototypeAccessors$1.state.get = function () {\n  return this._vm._data.$$state\n};\n\nprototypeAccessors$1.state.set = function (v) {\n  if (true) {\n    assert(false, \"use store.replaceState() to explicit replace store state.\");\n  }\n};\n\nStore.prototype.commit = function commit (_type, _payload, _options) {\n    var this$1 = this;\n\n  // check object-style commit\n  var ref = unifyObjectStyle(_type, _payload, _options);\n    var type = ref.type;\n    var payload = ref.payload;\n    var options = ref.options;\n\n  var mutation = { type: type, payload: payload };\n  var entry = this._mutations[type];\n  if (!entry) {\n    if (true) {\n      console.error((\"[vuex] unknown mutation type: \" + type));\n    }\n    return\n  }\n  this._withCommit(function () {\n    entry.forEach(function commitIterator (handler) {\n      handler(payload);\n    });\n  });\n  this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n\n  if (\n     true &&\n    options && options.silent\n  ) {\n    console.warn(\n      \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n      'Use the filter functionality in the vue-devtools'\n    );\n  }\n};\n\nStore.prototype.dispatch = function dispatch (_type, _payload) {\n    var this$1 = this;\n\n  // check object-style dispatch\n  var ref = unifyObjectStyle(_type, _payload);\n    var type = ref.type;\n    var payload = ref.payload;\n\n  var action = { type: type, payload: payload };\n  var entry = this._actions[type];\n  if (!entry) {\n    if (true) {\n      console.error((\"[vuex] unknown action type: \" + type));\n    }\n    return\n  }\n\n  try {\n    this._actionSubscribers\n      .filter(function (sub) { return sub.before; })\n      .forEach(function (sub) { return sub.before(action, this$1.state); });\n  } catch (e) {\n    if (true) {\n      console.warn(\"[vuex] error in before action subscribers: \");\n      console.error(e);\n    }\n  }\n\n  var result = entry.length > 1\n    ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n    : entry[0](payload);\n\n  return result.then(function (res) {\n    try {\n      this$1._actionSubscribers\n        .filter(function (sub) { return sub.after; })\n        .forEach(function (sub) { return sub.after(action, this$1.state); });\n    } catch (e) {\n      if (true) {\n        console.warn(\"[vuex] error in after action subscribers: \");\n        console.error(e);\n      }\n    }\n    return res\n  })\n};\n\nStore.prototype.subscribe = function subscribe (fn) {\n  return genericSubscribe(fn, this._subscribers)\n};\n\nStore.prototype.subscribeAction = function subscribeAction (fn) {\n  var subs = typeof fn === 'function' ? { before: fn } : fn;\n  return genericSubscribe(subs, this._actionSubscribers)\n};\n\nStore.prototype.watch = function watch (getter, cb, options) {\n    var this$1 = this;\n\n  if (true) {\n    assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n  }\n  return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n};\n\nStore.prototype.replaceState = function replaceState (state) {\n    var this$1 = this;\n\n  this._withCommit(function () {\n    this$1._vm._data.$$state = state;\n  });\n};\n\nStore.prototype.registerModule = function registerModule (path, rawModule, options) {\n    if ( options === void 0 ) options = {};\n\n  if (typeof path === 'string') { path = [path]; }\n\n  if (true) {\n    assert(Array.isArray(path), \"module path must be a string or an Array.\");\n    assert(path.length > 0, 'cannot register the root module by using registerModule.');\n  }\n\n  this._modules.register(path, rawModule);\n  installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n  // reset store to update getters...\n  resetStoreVM(this, this.state);\n};\n\nStore.prototype.unregisterModule = function unregisterModule (path) {\n    var this$1 = this;\n\n  if (typeof path === 'string') { path = [path]; }\n\n  if (true) {\n    assert(Array.isArray(path), \"module path must be a string or an Array.\");\n  }\n\n  this._modules.unregister(path);\n  this._withCommit(function () {\n    var parentState = getNestedState(this$1.state, path.slice(0, -1));\n    Vue.delete(parentState, path[path.length - 1]);\n  });\n  resetStore(this);\n};\n\nStore.prototype.hotUpdate = function hotUpdate (newOptions) {\n  this._modules.update(newOptions);\n  resetStore(this, true);\n};\n\nStore.prototype._withCommit = function _withCommit (fn) {\n  var committing = this._committing;\n  this._committing = true;\n  fn();\n  this._committing = committing;\n};\n\nObject.defineProperties( Store.prototype, prototypeAccessors$1 );\n\nfunction genericSubscribe (fn, subs) {\n  if (subs.indexOf(fn) < 0) {\n    subs.push(fn);\n  }\n  return function () {\n    var i = subs.indexOf(fn);\n    if (i > -1) {\n      subs.splice(i, 1);\n    }\n  }\n}\n\nfunction resetStore (store, hot) {\n  store._actions = Object.create(null);\n  store._mutations = Object.create(null);\n  store._wrappedGetters = Object.create(null);\n  store._modulesNamespaceMap = Object.create(null);\n  var state = store.state;\n  // init all modules\n  installModule(store, state, [], store._modules.root, true);\n  // reset vm\n  resetStoreVM(store, state, hot);\n}\n\nfunction resetStoreVM (store, state, hot) {\n  var oldVm = store._vm;\n\n  // bind store public getters\n  store.getters = {};\n  var wrappedGetters = store._wrappedGetters;\n  var computed = {};\n  forEachValue(wrappedGetters, function (fn, key) {\n    // use computed to leverage its lazy-caching mechanism\n    // direct inline function use will lead to closure preserving oldVm.\n    // using partial to return function with only arguments preserved in closure enviroment.\n    computed[key] = partial(fn, store);\n    Object.defineProperty(store.getters, key, {\n      get: function () { return store._vm[key]; },\n      enumerable: true // for local getters\n    });\n  });\n\n  // use a Vue instance to store the state tree\n  // suppress warnings just in case the user has added\n  // some funky global mixins\n  var silent = Vue.config.silent;\n  Vue.config.silent = true;\n  store._vm = new Vue({\n    data: {\n      $$state: state\n    },\n    computed: computed\n  });\n  Vue.config.silent = silent;\n\n  // enable strict mode for new vm\n  if (store.strict) {\n    enableStrictMode(store);\n  }\n\n  if (oldVm) {\n    if (hot) {\n      // dispatch changes in all subscribed watchers\n      // to force getter re-evaluation for hot reloading.\n      store._withCommit(function () {\n        oldVm._data.$$state = null;\n      });\n    }\n    Vue.nextTick(function () { return oldVm.$destroy(); });\n  }\n}\n\nfunction installModule (store, rootState, path, module, hot) {\n  var isRoot = !path.length;\n  var namespace = store._modules.getNamespace(path);\n\n  // register in namespace map\n  if (module.namespaced) {\n    store._modulesNamespaceMap[namespace] = module;\n  }\n\n  // set state\n  if (!isRoot && !hot) {\n    var parentState = getNestedState(rootState, path.slice(0, -1));\n    var moduleName = path[path.length - 1];\n    store._withCommit(function () {\n      Vue.set(parentState, moduleName, module.state);\n    });\n  }\n\n  var local = module.context = makeLocalContext(store, namespace, path);\n\n  module.forEachMutation(function (mutation, key) {\n    var namespacedType = namespace + key;\n    registerMutation(store, namespacedType, mutation, local);\n  });\n\n  module.forEachAction(function (action, key) {\n    var type = action.root ? key : namespace + key;\n    var handler = action.handler || action;\n    registerAction(store, type, handler, local);\n  });\n\n  module.forEachGetter(function (getter, key) {\n    var namespacedType = namespace + key;\n    registerGetter(store, namespacedType, getter, local);\n  });\n\n  module.forEachChild(function (child, key) {\n    installModule(store, rootState, path.concat(key), child, hot);\n  });\n}\n\n/**\n * make localized dispatch, commit, getters and state\n * if there is no namespace, just use root ones\n */\nfunction makeLocalContext (store, namespace, path) {\n  var noNamespace = namespace === '';\n\n  var local = {\n    dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n      var args = unifyObjectStyle(_type, _payload, _options);\n      var payload = args.payload;\n      var options = args.options;\n      var type = args.type;\n\n      if (!options || !options.root) {\n        type = namespace + type;\n        if ( true && !store._actions[type]) {\n          console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n          return\n        }\n      }\n\n      return store.dispatch(type, payload)\n    },\n\n    commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n      var args = unifyObjectStyle(_type, _payload, _options);\n      var payload = args.payload;\n      var options = args.options;\n      var type = args.type;\n\n      if (!options || !options.root) {\n        type = namespace + type;\n        if ( true && !store._mutations[type]) {\n          console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n          return\n        }\n      }\n\n      store.commit(type, payload, options);\n    }\n  };\n\n  // getters and state object must be gotten lazily\n  // because they will be changed by vm update\n  Object.defineProperties(local, {\n    getters: {\n      get: noNamespace\n        ? function () { return store.getters; }\n        : function () { return makeLocalGetters(store, namespace); }\n    },\n    state: {\n      get: function () { return getNestedState(store.state, path); }\n    }\n  });\n\n  return local\n}\n\nfunction makeLocalGetters (store, namespace) {\n  var gettersProxy = {};\n\n  var splitPos = namespace.length;\n  Object.keys(store.getters).forEach(function (type) {\n    // skip if the target getter is not match this namespace\n    if (type.slice(0, splitPos) !== namespace) { return }\n\n    // extract local getter type\n    var localType = type.slice(splitPos);\n\n    // Add a port to the getters proxy.\n    // Define as getter property because\n    // we do not want to evaluate the getters in this time.\n    Object.defineProperty(gettersProxy, localType, {\n      get: function () { return store.getters[type]; },\n      enumerable: true\n    });\n  });\n\n  return gettersProxy\n}\n\nfunction registerMutation (store, type, handler, local) {\n  var entry = store._mutations[type] || (store._mutations[type] = []);\n  entry.push(function wrappedMutationHandler (payload) {\n    handler.call(store, local.state, payload);\n  });\n}\n\nfunction registerAction (store, type, handler, local) {\n  var entry = store._actions[type] || (store._actions[type] = []);\n  entry.push(function wrappedActionHandler (payload, cb) {\n    var res = handler.call(store, {\n      dispatch: local.dispatch,\n      commit: local.commit,\n      getters: local.getters,\n      state: local.state,\n      rootGetters: store.getters,\n      rootState: store.state\n    }, payload, cb);\n    if (!isPromise(res)) {\n      res = Promise.resolve(res);\n    }\n    if (store._devtoolHook) {\n      return res.catch(function (err) {\n        store._devtoolHook.emit('vuex:error', err);\n        throw err\n      })\n    } else {\n      return res\n    }\n  });\n}\n\nfunction registerGetter (store, type, rawGetter, local) {\n  if (store._wrappedGetters[type]) {\n    if (true) {\n      console.error((\"[vuex] duplicate getter key: \" + type));\n    }\n    return\n  }\n  store._wrappedGetters[type] = function wrappedGetter (store) {\n    return rawGetter(\n      local.state, // local state\n      local.getters, // local getters\n      store.state, // root state\n      store.getters // root getters\n    )\n  };\n}\n\nfunction enableStrictMode (store) {\n  store._vm.$watch(function () { return this._data.$$state }, function () {\n    if (true) {\n      assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n    }\n  }, { deep: true, sync: true });\n}\n\nfunction getNestedState (state, path) {\n  return path.length\n    ? path.reduce(function (state, key) { return state[key]; }, state)\n    : state\n}\n\nfunction unifyObjectStyle (type, payload, options) {\n  if (isObject(type) && type.type) {\n    options = payload;\n    payload = type;\n    type = type.type;\n  }\n\n  if (true) {\n    assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n  }\n\n  return { type: type, payload: payload, options: options }\n}\n\nfunction install (_Vue) {\n  if (Vue && _Vue === Vue) {\n    if (true) {\n      console.error(\n        '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n      );\n    }\n    return\n  }\n  Vue = _Vue;\n  applyMixin(Vue);\n}\n\n/**\n * Reduce the code which written in Vue.js for getting the state.\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n * @param {Object}\n */\nvar mapState = normalizeNamespace(function (namespace, states) {\n  var res = {};\n  normalizeMap(states).forEach(function (ref) {\n    var key = ref.key;\n    var val = ref.val;\n\n    res[key] = function mappedState () {\n      var state = this.$store.state;\n      var getters = this.$store.getters;\n      if (namespace) {\n        var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n        if (!module) {\n          return\n        }\n        state = module.context.state;\n        getters = module.context.getters;\n      }\n      return typeof val === 'function'\n        ? val.call(this, state, getters)\n        : state[val]\n    };\n    // mark vuex getter for devtools\n    res[key].vuex = true;\n  });\n  return res\n});\n\n/**\n * Reduce the code which written in Vue.js for committing the mutation\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapMutations = normalizeNamespace(function (namespace, mutations) {\n  var res = {};\n  normalizeMap(mutations).forEach(function (ref) {\n    var key = ref.key;\n    var val = ref.val;\n\n    res[key] = function mappedMutation () {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n      // Get the commit method from store\n      var commit = this.$store.commit;\n      if (namespace) {\n        var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n        if (!module) {\n          return\n        }\n        commit = module.context.commit;\n      }\n      return typeof val === 'function'\n        ? val.apply(this, [commit].concat(args))\n        : commit.apply(this.$store, [val].concat(args))\n    };\n  });\n  return res\n});\n\n/**\n * Reduce the code which written in Vue.js for getting the getters\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} getters\n * @return {Object}\n */\nvar mapGetters = normalizeNamespace(function (namespace, getters) {\n  var res = {};\n  normalizeMap(getters).forEach(function (ref) {\n    var key = ref.key;\n    var val = ref.val;\n\n    // The namespace has been mutated by normalizeNamespace\n    val = namespace + val;\n    res[key] = function mappedGetter () {\n      if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n        return\n      }\n      if ( true && !(val in this.$store.getters)) {\n        console.error((\"[vuex] unknown getter: \" + val));\n        return\n      }\n      return this.$store.getters[val]\n    };\n    // mark vuex getter for devtools\n    res[key].vuex = true;\n  });\n  return res\n});\n\n/**\n * Reduce the code which written in Vue.js for dispatch the action\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapActions = normalizeNamespace(function (namespace, actions) {\n  var res = {};\n  normalizeMap(actions).forEach(function (ref) {\n    var key = ref.key;\n    var val = ref.val;\n\n    res[key] = function mappedAction () {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n      // get dispatch function from store\n      var dispatch = this.$store.dispatch;\n      if (namespace) {\n        var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n        if (!module) {\n          return\n        }\n        dispatch = module.context.dispatch;\n      }\n      return typeof val === 'function'\n        ? val.apply(this, [dispatch].concat(args))\n        : dispatch.apply(this.$store, [val].concat(args))\n    };\n  });\n  return res\n});\n\n/**\n * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n * @param {String} namespace\n * @return {Object}\n */\nvar createNamespacedHelpers = function (namespace) { return ({\n  mapState: mapState.bind(null, namespace),\n  mapGetters: mapGetters.bind(null, namespace),\n  mapMutations: mapMutations.bind(null, namespace),\n  mapActions: mapActions.bind(null, namespace)\n}); };\n\n/**\n * Normalize the map\n * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n * @param {Array|Object} map\n * @return {Object}\n */\nfunction normalizeMap (map) {\n  return Array.isArray(map)\n    ? map.map(function (key) { return ({ key: key, val: key }); })\n    : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n}\n\n/**\n * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n * @param {Function} fn\n * @return {Function}\n */\nfunction normalizeNamespace (fn) {\n  return function (namespace, map) {\n    if (typeof namespace !== 'string') {\n      map = namespace;\n      namespace = '';\n    } else if (namespace.charAt(namespace.length - 1) !== '/') {\n      namespace += '/';\n    }\n    return fn(namespace, map)\n  }\n}\n\n/**\n * Search a special module from store by namespace. if module not exist, print error message.\n * @param {Object} store\n * @param {String} helper\n * @param {String} namespace\n * @return {Object}\n */\nfunction getModuleByNamespace (store, helper, namespace) {\n  var module = store._modulesNamespaceMap[namespace];\n  if ( true && !module) {\n    console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n  }\n  return module\n}\n\nvar index_esm = {\n  Store: Store,\n  install: install,\n  version: '3.1.1',\n  mapState: mapState,\n  mapMutations: mapMutations,\n  mapGetters: mapGetters,\n  mapActions: mapActions,\n  createNamespacedHelpers: createNamespacedHelpers\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index_esm);\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_webpack@4.41.2@webpack/buildin/global.js */ \"./node_modules/_webpack@4.41.2@webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZXhAMy4xLjFAdnVleC9kaXN0L3Z1ZXguZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWV4QDMuMS4xQHZ1ZXgvZGlzdC92dWV4LmVzbS5qcz81OTFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdnVleCB2My4xLjFcbiAqIChjKSAyMDE5IEV2YW4gWW91XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuZnVuY3Rpb24gYXBwbHlNaXhpbiAoVnVlKSB7XG4gIHZhciB2ZXJzaW9uID0gTnVtYmVyKFZ1ZS52ZXJzaW9uLnNwbGl0KCcuJylbMF0pO1xuXG4gIGlmICh2ZXJzaW9uID49IDIpIHtcbiAgICBWdWUubWl4aW4oeyBiZWZvcmVDcmVhdGU6IHZ1ZXhJbml0IH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG92ZXJyaWRlIGluaXQgYW5kIGluamVjdCB2dWV4IGluaXQgcHJvY2VkdXJlXG4gICAgLy8gZm9yIDEueCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICB2YXIgX2luaXQgPSBWdWUucHJvdG90eXBlLl9pbml0O1xuICAgIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgICAgIG9wdGlvbnMuaW5pdCA9IG9wdGlvbnMuaW5pdFxuICAgICAgICA/IFt2dWV4SW5pdF0uY29uY2F0KG9wdGlvbnMuaW5pdClcbiAgICAgICAgOiB2dWV4SW5pdDtcbiAgICAgIF9pbml0LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWdWV4IGluaXQgaG9vaywgaW5qZWN0ZWQgaW50byBlYWNoIGluc3RhbmNlcyBpbml0IGhvb2tzIGxpc3QuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHZ1ZXhJbml0ICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgLy8gc3RvcmUgaW5qZWN0aW9uXG4gICAgaWYgKG9wdGlvbnMuc3RvcmUpIHtcbiAgICAgIHRoaXMuJHN0b3JlID0gdHlwZW9mIG9wdGlvbnMuc3RvcmUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBvcHRpb25zLnN0b3JlKClcbiAgICAgICAgOiBvcHRpb25zLnN0b3JlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJlbnQgJiYgb3B0aW9ucy5wYXJlbnQuJHN0b3JlKSB7XG4gICAgICB0aGlzLiRzdG9yZSA9IG9wdGlvbnMucGFyZW50LiRzdG9yZTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHRhcmdldCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gID8gd2luZG93XG4gIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGdsb2JhbFxuICAgIDoge307XG52YXIgZGV2dG9vbEhvb2sgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuZnVuY3Rpb24gZGV2dG9vbFBsdWdpbiAoc3RvcmUpIHtcbiAgaWYgKCFkZXZ0b29sSG9vaykgeyByZXR1cm4gfVxuXG4gIHN0b3JlLl9kZXZ0b29sSG9vayA9IGRldnRvb2xIb29rO1xuXG4gIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6aW5pdCcsIHN0b3JlKTtcblxuICBkZXZ0b29sSG9vay5vbigndnVleDp0cmF2ZWwtdG8tc3RhdGUnLCBmdW5jdGlvbiAodGFyZ2V0U3RhdGUpIHtcbiAgICBzdG9yZS5yZXBsYWNlU3RhdGUodGFyZ2V0U3RhdGUpO1xuICB9KTtcblxuICBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZSkge1xuICAgIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6bXV0YXRpb24nLCBtdXRhdGlvbiwgc3RhdGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG5cbi8qKlxuICogZm9yRWFjaCBmb3Igb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hWYWx1ZSAob2JqLCBmbikge1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4ob2JqW2tleV0sIGtleSk7IH0pO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1zZykge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZXhdIFwiICsgbXNnKSkgfVxufVxuXG5mdW5jdGlvbiBwYXJ0aWFsIChmbiwgYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuKGFyZylcbiAgfVxufVxuXG4vLyBCYXNlIGRhdGEgc3RydWN0IGZvciBzdG9yZSdzIG1vZHVsZSwgcGFja2FnZSB3aXRoIHNvbWUgYXR0cmlidXRlIGFuZCBtZXRob2RcbnZhciBNb2R1bGUgPSBmdW5jdGlvbiBNb2R1bGUgKHJhd01vZHVsZSwgcnVudGltZSkge1xuICB0aGlzLnJ1bnRpbWUgPSBydW50aW1lO1xuICAvLyBTdG9yZSBzb21lIGNoaWxkcmVuIGl0ZW1cbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSBvYmplY3Qgd2hpY2ggcGFzc2VkIGJ5IHByb2dyYW1tZXJcbiAgdGhpcy5fcmF3TW9kdWxlID0gcmF3TW9kdWxlO1xuICB2YXIgcmF3U3RhdGUgPSByYXdNb2R1bGUuc3RhdGU7XG5cbiAgLy8gU3RvcmUgdGhlIG9yaWdpbiBtb2R1bGUncyBzdGF0ZVxuICB0aGlzLnN0YXRlID0gKHR5cGVvZiByYXdTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHJhd1N0YXRlKCkgOiByYXdTdGF0ZSkgfHwge307XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBuYW1lc3BhY2VkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5uYW1lc3BhY2VkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEhdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWRcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiBhZGRDaGlsZCAoa2V5LCBtb2R1bGUpIHtcbiAgdGhpcy5fY2hpbGRyZW5ba2V5XSA9IG1vZHVsZTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZCAoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltrZXldO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIGdldENoaWxkIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2tleV1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChyYXdNb2R1bGUpIHtcbiAgdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWQgPSByYXdNb2R1bGUubmFtZXNwYWNlZDtcbiAgaWYgKHJhd01vZHVsZS5hY3Rpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMgPSByYXdNb2R1bGUuYWN0aW9ucztcbiAgfVxuICBpZiAocmF3TW9kdWxlLm11dGF0aW9ucykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMgPSByYXdNb2R1bGUubXV0YXRpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzID0gcmF3TW9kdWxlLmdldHRlcnM7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaENoaWxkID0gZnVuY3Rpb24gZm9yRWFjaENoaWxkIChmbikge1xuICBmb3JFYWNoVmFsdWUodGhpcy5fY2hpbGRyZW4sIGZuKTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEdldHRlciA9IGZ1bmN0aW9uIGZvckVhY2hHZXR0ZXIgKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hBY3Rpb24gPSBmdW5jdGlvbiBmb3JFYWNoQWN0aW9uIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoTXV0YXRpb24gPSBmdW5jdGlvbiBmb3JFYWNoTXV0YXRpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1vZHVsZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgTW9kdWxlQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIE1vZHVsZUNvbGxlY3Rpb24gKHJhd1Jvb3RNb2R1bGUpIHtcbiAgLy8gcmVnaXN0ZXIgcm9vdCBtb2R1bGUgKFZ1ZXguU3RvcmUgb3B0aW9ucylcbiAgdGhpcy5yZWdpc3RlcihbXSwgcmF3Um9vdE1vZHVsZSwgZmFsc2UpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobW9kdWxlLCBrZXkpIHtcbiAgICByZXR1cm4gbW9kdWxlLmdldENoaWxkKGtleSlcbiAgfSwgdGhpcy5yb290KVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24gZ2V0TmFtZXNwYWNlIChwYXRoKSB7XG4gIHZhciBtb2R1bGUgPSB0aGlzLnJvb3Q7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBrZXkpIHtcbiAgICBtb2R1bGUgPSBtb2R1bGUuZ2V0Q2hpbGQoa2V5KTtcbiAgICByZXR1cm4gbmFtZXNwYWNlICsgKG1vZHVsZS5uYW1lc3BhY2VkID8ga2V5ICsgJy8nIDogJycpXG4gIH0sICcnKVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlJDEgKHJhd1Jvb3RNb2R1bGUpIHtcbiAgdXBkYXRlKFtdLCB0aGlzLnJvb3QsIHJhd1Jvb3RNb2R1bGUpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlciAocGF0aCwgcmF3TW9kdWxlLCBydW50aW1lKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgaWYgKCBydW50aW1lID09PSB2b2lkIDAgKSBydW50aW1lID0gdHJ1ZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCByYXdNb2R1bGUpO1xuICB9XG5cbiAgdmFyIG5ld01vZHVsZSA9IG5ldyBNb2R1bGUocmF3TW9kdWxlLCBydW50aW1lKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5yb290ID0gbmV3TW9kdWxlO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgcGFyZW50LmFkZENoaWxkKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgbmV3TW9kdWxlKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChyYXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGUubW9kdWxlcywgZnVuY3Rpb24gKHJhd0NoaWxkTW9kdWxlLCBrZXkpIHtcbiAgICAgIHRoaXMkMS5yZWdpc3RlcihwYXRoLmNvbmNhdChrZXkpLCByYXdDaGlsZE1vZHVsZSwgcnVudGltZSk7XG4gICAgfSk7XG4gIH1cbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyIChwYXRoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gIHZhciBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIGlmICghcGFyZW50LmdldENoaWxkKGtleSkucnVudGltZSkgeyByZXR1cm4gfVxuXG4gIHBhcmVudC5yZW1vdmVDaGlsZChrZXkpO1xufTtcblxuZnVuY3Rpb24gdXBkYXRlIChwYXRoLCB0YXJnZXRNb2R1bGUsIG5ld01vZHVsZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRhcmdldCBtb2R1bGVcbiAgdGFyZ2V0TW9kdWxlLnVwZGF0ZShuZXdNb2R1bGUpO1xuXG4gIC8vIHVwZGF0ZSBuZXN0ZWQgbW9kdWxlc1xuICBpZiAobmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICAgIGlmICghdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlt2dWV4XSB0cnlpbmcgdG8gYWRkIGEgbmV3IG1vZHVsZSAnXCIgKyBrZXkgKyBcIicgb24gaG90IHJlbG9hZGluZywgXCIgK1xuICAgICAgICAgICAgJ21hbnVhbCByZWxvYWQgaXMgbmVlZGVkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUoXG4gICAgICAgIHBhdGguY29uY2F0KGtleSksXG4gICAgICAgIHRhcmdldE1vZHVsZS5nZXRDaGlsZChrZXkpLFxuICAgICAgICBuZXdNb2R1bGUubW9kdWxlc1trZXldXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZnVuY3Rpb25Bc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24nXG59O1xuXG52YXIgb2JqZWN0QXNzZXJ0ID0ge1xuICBhc3NlcnQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLmhhbmRsZXIgPT09ICdmdW5jdGlvbicpOyB9LFxuICBleHBlY3RlZDogJ2Z1bmN0aW9uIG9yIG9iamVjdCB3aXRoIFwiaGFuZGxlclwiIGZ1bmN0aW9uJ1xufTtcblxudmFyIGFzc2VydFR5cGVzID0ge1xuICBnZXR0ZXJzOiBmdW5jdGlvbkFzc2VydCxcbiAgbXV0YXRpb25zOiBmdW5jdGlvbkFzc2VydCxcbiAgYWN0aW9uczogb2JqZWN0QXNzZXJ0XG59O1xuXG5mdW5jdGlvbiBhc3NlcnRSYXdNb2R1bGUgKHBhdGgsIHJhd01vZHVsZSkge1xuICBPYmplY3Qua2V5cyhhc3NlcnRUeXBlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFyYXdNb2R1bGVba2V5XSkgeyByZXR1cm4gfVxuXG4gICAgdmFyIGFzc2VydE9wdGlvbnMgPSBhc3NlcnRUeXBlc1trZXldO1xuXG4gICAgZm9yRWFjaFZhbHVlKHJhd01vZHVsZVtrZXldLCBmdW5jdGlvbiAodmFsdWUsIHR5cGUpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgYXNzZXJ0T3B0aW9ucy5hc3NlcnQodmFsdWUpLFxuICAgICAgICBtYWtlQXNzZXJ0aW9uTWVzc2FnZShwYXRoLCBrZXksIHR5cGUsIHZhbHVlLCBhc3NlcnRPcHRpb25zLmV4cGVjdGVkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VBc3NlcnRpb25NZXNzYWdlIChwYXRoLCBrZXksIHR5cGUsIHZhbHVlLCBleHBlY3RlZCkge1xuICB2YXIgYnVmID0ga2V5ICsgXCIgc2hvdWxkIGJlIFwiICsgZXhwZWN0ZWQgKyBcIiBidXQgXFxcIlwiICsga2V5ICsgXCIuXCIgKyB0eXBlICsgXCJcXFwiXCI7XG4gIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICBidWYgKz0gXCIgaW4gbW9kdWxlIFxcXCJcIiArIChwYXRoLmpvaW4oJy4nKSkgKyBcIlxcXCJcIjtcbiAgfVxuICBidWYgKz0gXCIgaXMgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSArIFwiLlwiO1xuICByZXR1cm4gYnVmXG59XG5cbnZhciBWdWU7IC8vIGJpbmQgb24gaW5zdGFsbFxuXG52YXIgU3RvcmUgPSBmdW5jdGlvbiBTdG9yZSAob3B0aW9ucykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgLy8gQXV0byBpbnN0YWxsIGlmIGl0IGlzIG5vdCBkb25lIHlldCBhbmQgYHdpbmRvd2AgaGFzIGBWdWVgLlxuICAvLyBUbyBhbGxvdyB1c2VycyB0byBhdm9pZCBhdXRvLWluc3RhbGxhdGlvbiBpbiBzb21lIGNhc2VzLFxuICAvLyB0aGlzIGNvZGUgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLiBTZWUgIzczMVxuICBpZiAoIVZ1ZSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gICAgaW5zdGFsbCh3aW5kb3cuVnVlKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KFZ1ZSwgXCJtdXN0IGNhbGwgVnVlLnVzZShWdWV4KSBiZWZvcmUgY3JlYXRpbmcgYSBzdG9yZSBpbnN0YW5jZS5cIik7XG4gICAgYXNzZXJ0KHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJywgXCJ2dWV4IHJlcXVpcmVzIGEgUHJvbWlzZSBwb2x5ZmlsbCBpbiB0aGlzIGJyb3dzZXIuXCIpO1xuICAgIGFzc2VydCh0aGlzIGluc3RhbmNlb2YgU3RvcmUsIFwic3RvcmUgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yLlwiKTtcbiAgfVxuXG4gIHZhciBwbHVnaW5zID0gb3B0aW9ucy5wbHVnaW5zOyBpZiAoIHBsdWdpbnMgPT09IHZvaWQgMCApIHBsdWdpbnMgPSBbXTtcbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0OyBpZiAoIHN0cmljdCA9PT0gdm9pZCAwICkgc3RyaWN0ID0gZmFsc2U7XG5cbiAgLy8gc3RvcmUgaW50ZXJuYWwgc3RhdGVcbiAgdGhpcy5fY29tbWl0dGluZyA9IGZhbHNlO1xuICB0aGlzLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMgPSBbXTtcbiAgdGhpcy5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fd3JhcHBlZEdldHRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9tb2R1bGVzID0gbmV3IE1vZHVsZUNvbGxlY3Rpb24ob3B0aW9ucyk7XG4gIHRoaXMuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl93YXRjaGVyVk0gPSBuZXcgVnVlKCk7XG5cbiAgLy8gYmluZCBjb21taXQgYW5kIGRpc3BhdGNoIHRvIHNlbGZcbiAgdmFyIHN0b3JlID0gdGhpcztcbiAgdmFyIHJlZiA9IHRoaXM7XG4gIHZhciBkaXNwYXRjaCA9IHJlZi5kaXNwYXRjaDtcbiAgdmFyIGNvbW1pdCA9IHJlZi5jb21taXQ7XG4gIHRoaXMuZGlzcGF0Y2ggPSBmdW5jdGlvbiBib3VuZERpc3BhdGNoICh0eXBlLCBwYXlsb2FkKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoLmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQpXG4gIH07XG4gIHRoaXMuY29tbWl0ID0gZnVuY3Rpb24gYm91bmRDb21taXQgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tbWl0LmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpXG4gIH07XG5cbiAgLy8gc3RyaWN0IG1vZGVcbiAgdGhpcy5zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fbW9kdWxlcy5yb290LnN0YXRlO1xuXG4gIC8vIGluaXQgcm9vdCBtb2R1bGUuXG4gIC8vIHRoaXMgYWxzbyByZWN1cnNpdmVseSByZWdpc3RlcnMgYWxsIHN1Yi1tb2R1bGVzXG4gIC8vIGFuZCBjb2xsZWN0cyBhbGwgbW9kdWxlIGdldHRlcnMgaW5zaWRlIHRoaXMuX3dyYXBwZWRHZXR0ZXJzXG4gIGluc3RhbGxNb2R1bGUodGhpcywgc3RhdGUsIFtdLCB0aGlzLl9tb2R1bGVzLnJvb3QpO1xuXG4gIC8vIGluaXRpYWxpemUgdGhlIHN0b3JlIHZtLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlYWN0aXZpdHlcbiAgLy8gKGFsc28gcmVnaXN0ZXJzIF93cmFwcGVkR2V0dGVycyBhcyBjb21wdXRlZCBwcm9wZXJ0aWVzKVxuICByZXNldFN0b3JlVk0odGhpcywgc3RhdGUpO1xuXG4gIC8vIGFwcGx5IHBsdWdpbnNcbiAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHsgcmV0dXJuIHBsdWdpbih0aGlzJDEpOyB9KTtcblxuICB2YXIgdXNlRGV2dG9vbHMgPSBvcHRpb25zLmRldnRvb2xzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRldnRvb2xzIDogVnVlLmNvbmZpZy5kZXZ0b29scztcbiAgaWYgKHVzZURldnRvb2xzKSB7XG4gICAgZGV2dG9vbFBsdWdpbih0aGlzKTtcbiAgfVxufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyQxID0geyBzdGF0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMkMS5zdGF0ZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl92bS5fZGF0YS4kJHN0YXRlXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMkMS5zdGF0ZS5zZXQgPSBmdW5jdGlvbiAodikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChmYWxzZSwgXCJ1c2Ugc3RvcmUucmVwbGFjZVN0YXRlKCkgdG8gZXhwbGljaXQgcmVwbGFjZSBzdG9yZSBzdGF0ZS5cIik7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5jb21taXQgPSBmdW5jdGlvbiBjb21taXQgKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgY29tbWl0XG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgdmFyIHBheWxvYWQgPSByZWYucGF5bG9hZDtcbiAgICB2YXIgb3B0aW9ucyA9IHJlZi5vcHRpb25zO1xuXG4gIHZhciBtdXRhdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9tdXRhdGlvbnNbdHlwZV07XG4gIGlmICghZW50cnkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgZW50cnkuZm9yRWFjaChmdW5jdGlvbiBjb21taXRJdGVyYXRvciAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlcihwYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG4gIHRoaXMuX3N1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViKG11dGF0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcblxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5zaWxlbnRcbiAgKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbdnVleF0gbXV0YXRpb24gdHlwZTogXCIgKyB0eXBlICsgXCIuIFNpbGVudCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gXCIgK1xuICAgICAgJ1VzZSB0aGUgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHZ1ZS1kZXZ0b29scydcbiAgICApO1xuICB9XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCAoX3R5cGUsIF9wYXlsb2FkKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gY2hlY2sgb2JqZWN0LXN0eWxlIGRpc3BhdGNoXG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuXG4gIHZhciBhY3Rpb24gPSB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgfTtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fYWN0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGFjdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmU7IH0pXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYmVmb3JlKGFjdGlvbiwgdGhpcyQxLnN0YXRlKTsgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKFwiW3Z1ZXhdIGVycm9yIGluIGJlZm9yZSBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGVudHJ5Lmxlbmd0aCA+IDFcbiAgICA/IFByb21pc2UuYWxsKGVudHJ5Lm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcihwYXlsb2FkKTsgfSkpXG4gICAgOiBlbnRyeVswXShwYXlsb2FkKTtcblxuICByZXR1cm4gcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzJDEuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmFmdGVyOyB9KVxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYWZ0ZXIoYWN0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYWZ0ZXIgYWN0aW9uIHN1YnNjcmliZXJzOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSlcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUgKGZuKSB7XG4gIHJldHVybiBnZW5lcmljU3Vic2NyaWJlKGZuLCB0aGlzLl9zdWJzY3JpYmVycylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmVBY3Rpb24gPSBmdW5jdGlvbiBzdWJzY3JpYmVBY3Rpb24gKGZuKSB7XG4gIHZhciBzdWJzID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8geyBiZWZvcmU6IGZuIH0gOiBmbjtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoc3VicywgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUud2F0Y2ggPSBmdW5jdGlvbiB3YXRjaCAoZ2V0dGVyLCBjYiwgb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBnZXR0ZXIgPT09ICdmdW5jdGlvbicsIFwic3RvcmUud2F0Y2ggb25seSBhY2NlcHRzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLl93YXRjaGVyVk0uJHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldHRlcih0aGlzJDEuc3RhdGUsIHRoaXMkMS5nZXR0ZXJzKTsgfSwgY2IsIG9wdGlvbnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gcmVwbGFjZVN0YXRlIChzdGF0ZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgIHRoaXMkMS5fdm0uX2RhdGEuJCRzdGF0ZSA9IHN0YXRlO1xuICB9KTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlIChwYXRoLCByYXdNb2R1bGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7IHBhdGggPSBbcGF0aF07IH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICAgIGFzc2VydChwYXRoLmxlbmd0aCA+IDAsICdjYW5ub3QgcmVnaXN0ZXIgdGhlIHJvb3QgbW9kdWxlIGJ5IHVzaW5nIHJlZ2lzdGVyTW9kdWxlLicpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy5yZWdpc3RlcihwYXRoLCByYXdNb2R1bGUpO1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHRoaXMuc3RhdGUsIHBhdGgsIHRoaXMuX21vZHVsZXMuZ2V0KHBhdGgpLCBvcHRpb25zLnByZXNlcnZlU3RhdGUpO1xuICAvLyByZXNldCBzdG9yZSB0byB1cGRhdGUgZ2V0dGVycy4uLlxuICByZXNldFN0b3JlVk0odGhpcywgdGhpcy5zdGF0ZSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUudW5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJNb2R1bGUgKHBhdGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7IHBhdGggPSBbcGF0aF07IH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy51bnJlZ2lzdGVyKHBhdGgpO1xuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZSh0aGlzJDEuc3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBWdWUuZGVsZXRlKHBhcmVudFN0YXRlLCBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pO1xuICB9KTtcbiAgcmVzZXRTdG9yZSh0aGlzKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5ob3RVcGRhdGUgPSBmdW5jdGlvbiBob3RVcGRhdGUgKG5ld09wdGlvbnMpIHtcbiAgdGhpcy5fbW9kdWxlcy51cGRhdGUobmV3T3B0aW9ucyk7XG4gIHJlc2V0U3RvcmUodGhpcywgdHJ1ZSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuX3dpdGhDb21taXQgPSBmdW5jdGlvbiBfd2l0aENvbW1pdCAoZm4pIHtcbiAgdmFyIGNvbW1pdHRpbmcgPSB0aGlzLl9jb21taXR0aW5nO1xuICB0aGlzLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgZm4oKTtcbiAgdGhpcy5fY29tbWl0dGluZyA9IGNvbW1pdHRpbmc7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggU3RvcmUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMkMSApO1xuXG5mdW5jdGlvbiBnZW5lcmljU3Vic2NyaWJlIChmbiwgc3Vicykge1xuICBpZiAoc3Vicy5pbmRleE9mKGZuKSA8IDApIHtcbiAgICBzdWJzLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBzdWJzLmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHN1YnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlIChzdG9yZSwgaG90KSB7XG4gIHN0b3JlLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX211dGF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHN0YXRlID0gc3RvcmUuc3RhdGU7XG4gIC8vIGluaXQgYWxsIG1vZHVsZXNcbiAgaW5zdGFsbE1vZHVsZShzdG9yZSwgc3RhdGUsIFtdLCBzdG9yZS5fbW9kdWxlcy5yb290LCB0cnVlKTtcbiAgLy8gcmVzZXQgdm1cbiAgcmVzZXRTdG9yZVZNKHN0b3JlLCBzdGF0ZSwgaG90KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdG9yZVZNIChzdG9yZSwgc3RhdGUsIGhvdCkge1xuICB2YXIgb2xkVm0gPSBzdG9yZS5fdm07XG5cbiAgLy8gYmluZCBzdG9yZSBwdWJsaWMgZ2V0dGVyc1xuICBzdG9yZS5nZXR0ZXJzID0ge307XG4gIHZhciB3cmFwcGVkR2V0dGVycyA9IHN0b3JlLl93cmFwcGVkR2V0dGVycztcbiAgdmFyIGNvbXB1dGVkID0ge307XG4gIGZvckVhY2hWYWx1ZSh3cmFwcGVkR2V0dGVycywgZnVuY3Rpb24gKGZuLCBrZXkpIHtcbiAgICAvLyB1c2UgY29tcHV0ZWQgdG8gbGV2ZXJhZ2UgaXRzIGxhenktY2FjaGluZyBtZWNoYW5pc21cbiAgICAvLyBkaXJlY3QgaW5saW5lIGZ1bmN0aW9uIHVzZSB3aWxsIGxlYWQgdG8gY2xvc3VyZSBwcmVzZXJ2aW5nIG9sZFZtLlxuICAgIC8vIHVzaW5nIHBhcnRpYWwgdG8gcmV0dXJuIGZ1bmN0aW9uIHdpdGggb25seSBhcmd1bWVudHMgcHJlc2VydmVkIGluIGNsb3N1cmUgZW52aXJvbWVudC5cbiAgICBjb21wdXRlZFtrZXldID0gcGFydGlhbChmbiwgc3RvcmUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdG9yZS5nZXR0ZXJzLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuX3ZtW2tleV07IH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlIC8vIGZvciBsb2NhbCBnZXR0ZXJzXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHVzZSBhIFZ1ZSBpbnN0YW5jZSB0byBzdG9yZSB0aGUgc3RhdGUgdHJlZVxuICAvLyBzdXBwcmVzcyB3YXJuaW5ncyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgaGFzIGFkZGVkXG4gIC8vIHNvbWUgZnVua3kgZ2xvYmFsIG1peGluc1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgc3RvcmUuX3ZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YToge1xuICAgICAgJCRzdGF0ZTogc3RhdGVcbiAgICB9LFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgLy8gZW5hYmxlIHN0cmljdCBtb2RlIGZvciBuZXcgdm1cbiAgaWYgKHN0b3JlLnN0cmljdCkge1xuICAgIGVuYWJsZVN0cmljdE1vZGUoc3RvcmUpO1xuICB9XG5cbiAgaWYgKG9sZFZtKSB7XG4gICAgaWYgKGhvdCkge1xuICAgICAgLy8gZGlzcGF0Y2ggY2hhbmdlcyBpbiBhbGwgc3Vic2NyaWJlZCB3YXRjaGVyc1xuICAgICAgLy8gdG8gZm9yY2UgZ2V0dGVyIHJlLWV2YWx1YXRpb24gZm9yIGhvdCByZWxvYWRpbmcuXG4gICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9sZFZtLl9kYXRhLiQkc3RhdGUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJldHVybiBvbGRWbS4kZGVzdHJveSgpOyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLCBtb2R1bGUsIGhvdCkge1xuICB2YXIgaXNSb290ID0gIXBhdGgubGVuZ3RoO1xuICB2YXIgbmFtZXNwYWNlID0gc3RvcmUuX21vZHVsZXMuZ2V0TmFtZXNwYWNlKHBhdGgpO1xuXG4gIC8vIHJlZ2lzdGVyIGluIG5hbWVzcGFjZSBtYXBcbiAgaWYgKG1vZHVsZS5uYW1lc3BhY2VkKSB7XG4gICAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSA9IG1vZHVsZTtcbiAgfVxuXG4gIC8vIHNldCBzdGF0ZVxuICBpZiAoIWlzUm9vdCAmJiAhaG90KSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUocm9vdFN0YXRlLCBwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgdmFyIG1vZHVsZU5hbWUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgc3RvcmUuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgICAgVnVlLnNldChwYXJlbnRTdGF0ZSwgbW9kdWxlTmFtZSwgbW9kdWxlLnN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBsb2NhbCA9IG1vZHVsZS5jb250ZXh0ID0gbWFrZUxvY2FsQ29udGV4dChzdG9yZSwgbmFtZXNwYWNlLCBwYXRoKTtcblxuICBtb2R1bGUuZm9yRWFjaE11dGF0aW9uKGZ1bmN0aW9uIChtdXRhdGlvbiwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyTXV0YXRpb24oc3RvcmUsIG5hbWVzcGFjZWRUeXBlLCBtdXRhdGlvbiwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaEFjdGlvbihmdW5jdGlvbiAoYWN0aW9uLCBrZXkpIHtcbiAgICB2YXIgdHlwZSA9IGFjdGlvbi5yb290ID8ga2V5IDogbmFtZXNwYWNlICsga2V5O1xuICAgIHZhciBoYW5kbGVyID0gYWN0aW9uLmhhbmRsZXIgfHwgYWN0aW9uO1xuICAgIHJlZ2lzdGVyQWN0aW9uKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoR2V0dGVyKGZ1bmN0aW9uIChnZXR0ZXIsIGtleSkge1xuICAgIHZhciBuYW1lc3BhY2VkVHlwZSA9IG5hbWVzcGFjZSArIGtleTtcbiAgICByZWdpc3RlckdldHRlcihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIGdldHRlciwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIChjaGlsZCwga2V5KSB7XG4gICAgaW5zdGFsbE1vZHVsZShzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLmNvbmNhdChrZXkpLCBjaGlsZCwgaG90KTtcbiAgfSk7XG59XG5cbi8qKlxuICogbWFrZSBsb2NhbGl6ZWQgZGlzcGF0Y2gsIGNvbW1pdCwgZ2V0dGVycyBhbmQgc3RhdGVcbiAqIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSwganVzdCB1c2Ugcm9vdCBvbmVzXG4gKi9cbmZ1bmN0aW9uIG1ha2VMb2NhbENvbnRleHQgKHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpIHtcbiAgdmFyIG5vTmFtZXNwYWNlID0gbmFtZXNwYWNlID09PSAnJztcblxuICB2YXIgbG9jYWwgPSB7XG4gICAgZGlzcGF0Y2g6IG5vTmFtZXNwYWNlID8gc3RvcmUuZGlzcGF0Y2ggOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXN0b3JlLl9hY3Rpb25zW3R5cGVdKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBsb2NhbCBhY3Rpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKHR5cGUsIHBheWxvYWQpXG4gICAgfSxcblxuICAgIGNvbW1pdDogbm9OYW1lc3BhY2UgPyBzdG9yZS5jb21taXQgOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXN0b3JlLl9tdXRhdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIG11dGF0aW9uIHR5cGU6IFwiICsgKGFyZ3MudHlwZSkgKyBcIiwgZ2xvYmFsIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0b3JlLmNvbW1pdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZ2V0dGVycyBhbmQgc3RhdGUgb2JqZWN0IG11c3QgYmUgZ290dGVuIGxhemlseVxuICAvLyBiZWNhdXNlIHRoZXkgd2lsbCBiZSBjaGFuZ2VkIGJ5IHZtIHVwZGF0ZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsb2NhbCwge1xuICAgIGdldHRlcnM6IHtcbiAgICAgIGdldDogbm9OYW1lc3BhY2VcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5nZXR0ZXJzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFrZUxvY2FsR2V0dGVycyhzdG9yZSwgbmFtZXNwYWNlKTsgfVxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0TmVzdGVkU3RhdGUoc3RvcmUuc3RhdGUsIHBhdGgpOyB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbG9jYWxcbn1cblxuZnVuY3Rpb24gbWFrZUxvY2FsR2V0dGVycyAoc3RvcmUsIG5hbWVzcGFjZSkge1xuICB2YXIgZ2V0dGVyc1Byb3h5ID0ge307XG5cbiAgdmFyIHNwbGl0UG9zID0gbmFtZXNwYWNlLmxlbmd0aDtcbiAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIC8vIHNraXAgaWYgdGhlIHRhcmdldCBnZXR0ZXIgaXMgbm90IG1hdGNoIHRoaXMgbmFtZXNwYWNlXG4gICAgaWYgKHR5cGUuc2xpY2UoMCwgc3BsaXRQb3MpICE9PSBuYW1lc3BhY2UpIHsgcmV0dXJuIH1cblxuICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICB2YXIgbG9jYWxUeXBlID0gdHlwZS5zbGljZShzcGxpdFBvcyk7XG5cbiAgICAvLyBBZGQgYSBwb3J0IHRvIHRoZSBnZXR0ZXJzIHByb3h5LlxuICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIGV2YWx1YXRlIHRoZSBnZXR0ZXJzIGluIHRoaXMgdGltZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2V0dGVyc1Byb3h5LCBsb2NhbFR5cGUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGdldHRlcnNQcm94eVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCwgY2IpIHtcbiAgICB2YXIgcmVzID0gaGFuZGxlci5jYWxsKHN0b3JlLCB7XG4gICAgICBkaXNwYXRjaDogbG9jYWwuZGlzcGF0Y2gsXG4gICAgICBjb21taXQ6IGxvY2FsLmNvbW1pdCxcbiAgICAgIGdldHRlcnM6IGxvY2FsLmdldHRlcnMsXG4gICAgICBzdGF0ZTogbG9jYWwuc3RhdGUsXG4gICAgICByb290R2V0dGVyczogc3RvcmUuZ2V0dGVycyxcbiAgICAgIHJvb3RTdGF0ZTogc3RvcmUuc3RhdGVcbiAgICB9LCBwYXlsb2FkLCBjYik7XG4gICAgaWYgKCFpc1Byb21pc2UocmVzKSkge1xuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKHJlcyk7XG4gICAgfVxuICAgIGlmIChzdG9yZS5fZGV2dG9vbEhvb2spIHtcbiAgICAgIHJldHVybiByZXMuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBzdG9yZS5fZGV2dG9vbEhvb2suZW1pdCgndnVleDplcnJvcicsIGVycik7XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyR2V0dGVyIChzdG9yZSwgdHlwZSwgcmF3R2V0dGVyLCBsb2NhbCkge1xuICBpZiAoc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIGR1cGxpY2F0ZSBnZXR0ZXIga2V5OiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdID0gZnVuY3Rpb24gd3JhcHBlZEdldHRlciAoc3RvcmUpIHtcbiAgICByZXR1cm4gcmF3R2V0dGVyKFxuICAgICAgbG9jYWwuc3RhdGUsIC8vIGxvY2FsIHN0YXRlXG4gICAgICBsb2NhbC5nZXR0ZXJzLCAvLyBsb2NhbCBnZXR0ZXJzXG4gICAgICBzdG9yZS5zdGF0ZSwgLy8gcm9vdCBzdGF0ZVxuICAgICAgc3RvcmUuZ2V0dGVycyAvLyByb290IGdldHRlcnNcbiAgICApXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuYWJsZVN0cmljdE1vZGUgKHN0b3JlKSB7XG4gIHN0b3JlLl92bS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YS4kJHN0YXRlIH0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgYXNzZXJ0KHN0b3JlLl9jb21taXR0aW5nLCBcImRvIG5vdCBtdXRhdGUgdnVleCBzdG9yZSBzdGF0ZSBvdXRzaWRlIG11dGF0aW9uIGhhbmRsZXJzLlwiKTtcbiAgICB9XG4gIH0sIHsgZGVlcDogdHJ1ZSwgc3luYzogdHJ1ZSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TmVzdGVkU3RhdGUgKHN0YXRlLCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aFxuICAgID8gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKHN0YXRlLCBrZXkpIHsgcmV0dXJuIHN0YXRlW2tleV07IH0sIHN0YXRlKVxuICAgIDogc3RhdGVcbn1cblxuZnVuY3Rpb24gdW5pZnlPYmplY3RTdHlsZSAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3QodHlwZSkgJiYgdHlwZS50eXBlKSB7XG4gICAgb3B0aW9ucyA9IHBheWxvYWQ7XG4gICAgcGF5bG9hZCA9IHR5cGU7XG4gICAgdHlwZSA9IHR5cGUudHlwZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJywgKFwiZXhwZWN0cyBzdHJpbmcgYXMgdGhlIHR5cGUsIGJ1dCBmb3VuZCBcIiArICh0eXBlb2YgdHlwZSkgKyBcIi5cIikpO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCwgb3B0aW9uczogb3B0aW9ucyB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKF9WdWUpIHtcbiAgaWYgKFZ1ZSAmJiBfVnVlID09PSBWdWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1t2dWV4XSBhbHJlYWR5IGluc3RhbGxlZC4gVnVlLnVzZShWdWV4KSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBWdWUgPSBfVnVlO1xuICBhcHBseU1peGluKFZ1ZSk7XG59XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBnZXR0aW5nIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHN0YXRlcyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IHN0YXRlIGFuZCBnZXR0ZXJzIGZvciBwYXJhbSwgeW91IGNhbiBkbyBzb21ldGhpbmcgZm9yIHN0YXRlIGFuZCBnZXR0ZXJzIGluIGl0LlxuICogQHBhcmFtIHtPYmplY3R9XG4gKi9cbnZhciBtYXBTdGF0ZSA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBzdGF0ZXMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBub3JtYWxpemVNYXAoc3RhdGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkU3RhdGUgKCkge1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy4kc3RvcmUuc3RhdGU7XG4gICAgICB2YXIgZ2V0dGVycyA9IHRoaXMuJHN0b3JlLmdldHRlcnM7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcFN0YXRlJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IG1vZHVsZS5jb250ZXh0LnN0YXRlO1xuICAgICAgICBnZXR0ZXJzID0gbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmNhbGwodGhpcywgc3RhdGUsIGdldHRlcnMpXG4gICAgICAgIDogc3RhdGVbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgY29tbWl0dGluZyB0aGUgbXV0YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG11dGF0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBjb21taXRgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGNvbW1pdCBtdXRhdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBHZXQgdGhlIGNvbW1pdCBtZXRob2QgZnJvbSBzdG9yZVxuICAgICAgdmFyIGNvbW1pdCA9IHRoaXMuJHN0b3JlLmNvbW1pdDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwTXV0YXRpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb21taXQgPSBtb2R1bGUuY29udGV4dC5jb21taXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbY29tbWl0XS5jb25jYXQoYXJncykpXG4gICAgICAgIDogY29tbWl0LmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgZ2V0dGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZ2V0dGVyc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwR2V0dGVycyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBnZXR0ZXJzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKGdldHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgLy8gVGhlIG5hbWVzcGFjZSBoYXMgYmVlbiBtdXRhdGVkIGJ5IG5vcm1hbGl6ZU5hbWVzcGFjZVxuICAgIHZhbCA9IG5hbWVzcGFjZSArIHZhbDtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZEdldHRlciAoKSB7XG4gICAgICBpZiAobmFtZXNwYWNlICYmICFnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEdldHRlcnMnLCBuYW1lc3BhY2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISh2YWwgaW4gdGhpcy4kc3RvcmUuZ2V0dGVycykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBnZXR0ZXI6IFwiICsgdmFsKSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnNbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZGlzcGF0Y2ggdGhlIGFjdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gYWN0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBkaXNwYXRjaGAgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtLCBpdCBjYW4gYWNjZXB0IGFudGhvciBwYXJhbXMuIFlvdSBjYW4gZGlzcGF0Y2ggYWN0aW9uIGFuZCBkbyBhbnkgb3RoZXIgdGhpbmdzIGluIHRoaXMgZnVuY3Rpb24uIHNwZWNpYWxseSwgWW91IG5lZWQgdG8gcGFzcyBhbnRob3IgcGFyYW1zIGZyb20gdGhlIG1hcHBlZCBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcEFjdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgYWN0aW9ucykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChhY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkQWN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBnZXQgZGlzcGF0Y2ggZnVuY3Rpb24gZnJvbSBzdG9yZVxuICAgICAgdmFyIGRpc3BhdGNoID0gdGhpcy4kc3RvcmUuZGlzcGF0Y2g7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEFjdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoID0gbW9kdWxlLmNvbnRleHQuZGlzcGF0Y2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbZGlzcGF0Y2hdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBkaXNwYXRjaC5hcHBseSh0aGlzLiRzdG9yZSwgW3ZhbF0uY29uY2F0KGFyZ3MpKVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWJpbmRpbmcgbmFtZXNwYWNlIHBhcmFtIGZvciBtYXBYWFggZnVuY3Rpb24gaW4gc3BlY2lhbCBzY29wZWQsIGFuZCByZXR1cm4gdGhlbSBieSBzaW1wbGUgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBjcmVhdGVOYW1lc3BhY2VkSGVscGVycyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHsgcmV0dXJuICh7XG4gIG1hcFN0YXRlOiBtYXBTdGF0ZS5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucy5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpXG59KTsgfTtcblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIG1hcFxuICogbm9ybWFsaXplTWFwKFsxLCAyLCAzXSkgPT4gWyB7IGtleTogMSwgdmFsOiAxIH0sIHsga2V5OiAyLCB2YWw6IDIgfSwgeyBrZXk6IDMsIHZhbDogMyB9IF1cbiAqIG5vcm1hbGl6ZU1hcCh7YTogMSwgYjogMiwgYzogM30pID0+IFsgeyBrZXk6ICdhJywgdmFsOiAxIH0sIHsga2V5OiAnYicsIHZhbDogMiB9LCB7IGtleTogJ2MnLCB2YWw6IDMgfSBdXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gbWFwXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnVuY3Rpb24gZXhwZWN0IHR3byBwYXJhbSBjb250YWlucyBuYW1lc3BhY2UgYW5kIG1hcC4gaXQgd2lsbCBub3JtYWxpemUgdGhlIG5hbWVzcGFjZSBhbmQgdGhlbiB0aGUgcGFyYW0ncyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIG1hcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZXNwYWNlIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWFwKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICBtYXAgPSBuYW1lc3BhY2U7XG4gICAgICBuYW1lc3BhY2UgPSAnJztcbiAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZS5jaGFyQXQobmFtZXNwYWNlLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgIG5hbWVzcGFjZSArPSAnLyc7XG4gICAgfVxuICAgIHJldHVybiBmbihuYW1lc3BhY2UsIG1hcClcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaCBhIHNwZWNpYWwgbW9kdWxlIGZyb20gc3RvcmUgYnkgbmFtZXNwYWNlLiBpZiBtb2R1bGUgbm90IGV4aXN0LCBwcmludCBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0b3JlXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVscGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZUJ5TmFtZXNwYWNlIChzdG9yZSwgaGVscGVyLCBuYW1lc3BhY2UpIHtcbiAgdmFyIG1vZHVsZSA9IHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFtb2R1bGUpIHtcbiAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSBtb2R1bGUgbmFtZXNwYWNlIG5vdCBmb3VuZCBpbiBcIiArIGhlbHBlciArIFwiKCk6IFwiICsgbmFtZXNwYWNlKSk7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZVxufVxuXG52YXIgaW5kZXhfZXNtID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjEuMScsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXhfZXNtO1xuZXhwb3J0IHsgU3RvcmUsIGluc3RhbGwsIG1hcFN0YXRlLCBtYXBNdXRhdGlvbnMsIG1hcEdldHRlcnMsIG1hcEFjdGlvbnMsIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\n");

/***/ }),

/***/ "./node_modules/_webpack@4.41.2@webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3dlYnBhY2tANC40MS4yQHdlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_webpack@4.41.2@webpack/buildin/global.js\n");

/***/ }),

/***/ "./src/App.vue":
/*!*********************!*\
  !*** ./src/App.vue ***!
  \*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\");\n/* harmony import */ var _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue?vue&type=script&lang=js& */ \"./src/App.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./App.vue?vue&type=style&index=0&lang=scss& */ \"./src/App.vue?vue&type=style&index=0&lang=scss&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (true) {\n  var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n  api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('7ba5bd90')) {\n      api.createRecord('7ba5bd90', component.options)\n    } else {\n      api.reload('7ba5bd90', component.options)\n    }\n    module.hot.accept(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\");\n(function () {\n      api.rerender('7ba5bd90', {\n        render: _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n        staticRenderFns: _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n      })\n    })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n  }\n}\ncomponent.options.__file = \"src/App.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9BcHAudnVlPzVkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9qb2UvRG9jdW1lbnRzL2dpdC9waW5nYW4vaGtsaWZlL3Bpbmdhbi1saWZlLWluZGV4LXByby9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzdiYTViZDkwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzdiYTViZDkwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzdiYTViZDkwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzdiYTViZDkwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvQXBwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/App.vue\n");

/***/ }),

/***/ "./src/App.vue?vue&type=script&lang=js&":
/*!**********************************************!*\
  !*** ./src/App.vue?vue&type=script&lang=js& ***!
  \**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../node_modules/_babel-loader@8.0.6@babel-loader/lib!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wYzc2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!*******************************************************!*\
  !*** ./src/App.vue?vue&type=style&index=0&lang=scss& ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT84ZjU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMCEuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=style&index=0&lang=scss&\n");

/***/ }),

/***/ "./src/App.vue?vue&type=template&id=7ba5bd90&":
/*!****************************************************!*\
  !*** ./src/App.vue?vue&type=template&id=7ba5bd90& ***!
  \****************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=template&id=7ba5bd90& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YmE1YmQ5MCYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9hNGQzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCItIWNhY2hlLWxvYWRlcj97XFxcImNhY2hlRGlyZWN0b3J5XFxcIjpcXFwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXFxcIixcXFwiY2FjaGVJZGVudGlmaWVyXFxcIjpcXFwiNGNmMDIzMTQtdnVlLWxvYWRlci10ZW1wbGF0ZVxcXCJ9IS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YmE1YmQ5MCZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=template&id=7ba5bd90&\n");

/***/ }),

/***/ "./src/api/api.js":
/*!************************!*\
  !*** ./src/api/api.js ***!
  \************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {\n  load: \"/pingan_hklife_webapi/user/load\",\n  logout: \"/pingan_hklife_webapi/user/logout\",\n  // 是否显示图形验证码接口\n  stdIsShowImageVcode: \"/pingan_hklife_webapi/auth/stdIsShowImageVcode\",\n  // 刷新图形验证码接口\n  stdRefreshVcode: \"/pingan_hklife_webapi/auth/stdRefreshVcode\",\n  // OTP发送接口\n  stdSendOTP: \"/pingan_hklife_webapi/auth/stdSendOTP\",\n  // OTP验证与验重接口\n  stdValidateOTPandRepeat: \"/pingan_hklife_webapi/auth/stdValidateOTPandRepeat\",\n  // 注册手机号验重接口\n  gsRegCheck: \"/pingan_hklife_webapi/auth/gsRegCheck\",\n  // 账户整合登录接口\n  gsLogin: \"/pingan_hklife_webapi/auth/gsLogin\",\n  // 注册接口\n  stdRegister: \"/pingan_hklife_webapi/auth/stdRegister\",\n  // 修改密码\n  changePassword: \"/pingan_hklife_webapi/user/password/change\",\n  // 短信验证码登录\n  otpLogin: \"/pingan_hklife_webapi/user/otpLogin\",\n  // 短信验证码登录\n  otpRegisterAndLogin: \"/pingan_hklife_webapi/user/otpRegisterAndLogin\",\n  // 找回密码:定位用户信息\n  locateUserInfo: \"/pingan_hklife_webapi/reset/locateUserInfo\",\n  // 找回密码:发送验证码\n  sendOtp: \"/pingan_hklife_webapi/reset/sendOtp\",\n  // 找回密码:校验验证码\n  checkOtp: \"/pingan_hklife_webapi/reset/checkOtp\",\n  // 找回密码:重置密码\n  resetPwd: \"/pingan_hklife_webapi/reset/resetPwd\",\n  // 找回密码:重置密码\n  updateInformation: \"/pingan_hklife_webapi/user/updateInformation\",\n  // 读取联系方式\n  getContacts: \"/pingan_hklife_webapi/customService/contacts/get\",\n  // 更新联系方式\n  updateContacts: \"/pingan_hklife_webapi/customService/contacts/update\",\n  // 保存預約服務\n  saveReservation: \"/pingan_hklife_webapi/customService/reservation/save\",\n  // 保存投訴建議\n  saveComplain: \"/pingan_hklife_webapi/customService/complain/save\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXBpL2FwaS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcGkvYXBpLmpzPzRlYzMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvbG9hZFwiLFxuICBsb2dvdXQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvbG9nb3V0XCIsXG4gIC8vIOaYr+WQpuaYvuekuuWbvuW9oumqjOivgeeggeaOpeWPo1xuICBzdGRJc1Nob3dJbWFnZVZjb2RlOiBcIi9waW5nYW5faGtsaWZlX3dlYmFwaS9hdXRoL3N0ZElzU2hvd0ltYWdlVmNvZGVcIixcbiAgLy8g5Yi35paw5Zu+5b2i6aqM6K+B56CB5o6l5Y+jXG4gIHN0ZFJlZnJlc2hWY29kZTogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9zdGRSZWZyZXNoVmNvZGVcIixcbiAgLy8gT1RQ5Y+R6YCB5o6l5Y+jXG4gIHN0ZFNlbmRPVFA6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvc3RkU2VuZE9UUFwiLFxuICAvLyBPVFDpqozor4HkuI7pqozph43mjqXlj6NcbiAgc3RkVmFsaWRhdGVPVFBhbmRSZXBlYXQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvc3RkVmFsaWRhdGVPVFBhbmRSZXBlYXRcIixcbiAgLy8g5rOo5YaM5omL5py65Y+36aqM6YeN5o6l5Y+jXG4gIGdzUmVnQ2hlY2s6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvZ3NSZWdDaGVja1wiLFxuICAvLyDotKbmiLfmlbTlkIjnmbvlvZXmjqXlj6NcbiAgZ3NMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9nc0xvZ2luXCIsXG4gIC8vIOazqOWGjOaOpeWPo1xuICBzdGRSZWdpc3RlcjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9zdGRSZWdpc3RlclwiLFxuICAvLyDkv67mlLnlr4bnoIFcbiAgY2hhbmdlUGFzc3dvcmQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvcGFzc3dvcmQvY2hhbmdlXCIsXG4gIC8vIOefreS/oemqjOivgeeggeeZu+W9lVxuICBvdHBMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci9vdHBMb2dpblwiLFxuICAvLyDnn63kv6Hpqozor4HnoIHnmbvlvZVcbiAgb3RwUmVnaXN0ZXJBbmRMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci9vdHBSZWdpc3RlckFuZExvZ2luXCIsXG4gIC8vIOaJvuWbnuWvhuegge+8muWumuS9jeeUqOaIt+S/oeaBr1xuICBsb2NhdGVVc2VySW5mbzogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvcmVzZXQvbG9jYXRlVXNlckluZm9cIixcbiAgLy8g5om+5Zue5a+G56CB77ya5Y+R6YCB6aqM6K+B56CBXG4gIHNlbmRPdHA6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3Jlc2V0L3NlbmRPdHBcIixcbiAgLy8g5om+5Zue5a+G56CB77ya5qCh6aqM6aqM6K+B56CBXG4gIGNoZWNrT3RwOiBcIi9waW5nYW5faGtsaWZlX3dlYmFwaS9yZXNldC9jaGVja090cFwiLFxuICAvLyDmib7lm57lr4bnoIHvvJrph43nva7lr4bnoIFcbiAgcmVzZXRQd2Q6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3Jlc2V0L3Jlc2V0UHdkXCIsXG4gIC8vIOaJvuWbnuWvhuegge+8mumHjee9ruWvhueggVxuICB1cGRhdGVJbmZvcm1hdGlvbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci91cGRhdGVJbmZvcm1hdGlvblwiLFxuICAvLyDor7vlj5bogZTns7vmlrnlvI9cbiAgZ2V0Q29udGFjdHM6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2N1c3RvbVNlcnZpY2UvY29udGFjdHMvZ2V0XCIsXG4gIC8vIOabtOaWsOiBlOezu+aWueW8j1xuICB1cGRhdGVDb250YWN0czogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvY3VzdG9tU2VydmljZS9jb250YWN0cy91cGRhdGVcIixcbiAgLy8g5L+d5a2Y6aCQ57SE5pyN5YuZXG4gIHNhdmVSZXNlcnZhdGlvbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvY3VzdG9tU2VydmljZS9yZXNlcnZhdGlvbi9zYXZlXCIsXG4gIC8vIOS/neWtmOaKleiotOW7uuitsFxuICBzYXZlQ29tcGxhaW46IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2N1c3RvbVNlcnZpY2UvY29tcGxhaW4vc2F2ZVwiXG5cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/api/api.js\n");

/***/ }),

/***/ "./src/api/fetch-api.js":
/*!******************************!*\
  !*** ./src/api/fetch-api.js ***!
  \******************************/
/*! exports provided: httpGet, httpPost, formdata */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"httpGet\", function() { return httpGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"httpPost\", function() { return httpPost; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formdata\", function() { return formdata; });\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.regexp.replace */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/state.js */ \"./src/store/state.js\");\n\n\n // import {\n//   Toast\n// } from 'vant';\n\nfunction Toast(msg) {\n  console.log(\"msg:\", msg);\n} // axios的默认url\n// axios.defaults.baseURL = \"\"\n// 服务器地址\n// let base = process.env.REQUEST_DOMAIN || \"http://localhost:9101\";\n// let base = COM.baseUrl;\n\n\nconsole.log(Object({\"NODE_ENV\":\"sandbox\",\"VUE_APP_TITLE\":\"sandbox\",\"VUE_APP_BASE_URL\":\"https://ow.go.qudone.com\",\"VUE_APP_RSA_PUBLIC_KEY\":\"B5FE03847F02046C47292AF0FF2DE88977241483DD40C123046EB39CBE4C48167B120096CFF12CD16559322884A3C56FA92B07B89AB51FC8C91A75127622151DDD730DFF1F993D5A290CEAC0BBA7FC88285D8994ACBAFF50101EDE9A0925AD5DFFAFE96D53C370E9C5B37DF2F871F81C4D7CA6B7EC37FF459C07975AD9A74A95\",\"VUE_APP_RSA_KEY_INDEX\":\"10001\",\"BASE_URL\":\"\"}));\nvar base = \"\";\nvar axios = axios__WEBPACK_IMPORTED_MODULE_1___default.a.create({\n  baseURL: \"https://ow.go.qudone.com\",\n  timeout: 5000\n}); // 请求拦截器\n// axios.interceptors.request.use(\n//   config => {\n//     // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了\n//     // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断\n//     const token = \"token\"; //这里写入token\n//     token && (config.headers.Authorization = token);\n//     return config;\n//   },\n//   error => {\n//     return Promise.error(error);\n//   })\n// 响应拦截器\n\naxios.interceptors.response.use(function (response) {\n  if (response.status === 200) {\n    if (response.data.code === 200) {\n      return Promise.resolve(response);\n    } else {\n      // Toast(response.data.bizMsg);\n      return Promise.reject(response.data);\n    }\n  } else {\n    return Promise.reject(response.data);\n  }\n}, // 服务器状态码不是200的情况\nfunction (error) {\n  if (error.response.status) {\n    switch (error.response.status) {\n      // 401: 未登录\n      // 未登录则跳转登录页面,并携带当前页面的路径\n      // 在登录成功后返回当前页面,这一步需要在登录页操作。\n      case 401:\n        router.replace({\n          path: '/login',\n          query: {\n            redirect: router.currentRoute.fullPath\n          }\n        });\n        break;\n      // 403 token过期\n      // 登录过期对用户进行提示\n      // 清除本地token和清空vuex中token对象\n      // 跳转登录页面\n\n      case 403:\n        Toast({\n          message: '登录过期,请重新登录',\n          duration: 1000,\n          forbidClick: true\n        }); // 清除token\n\n        localStorage.removeItem('token');\n        store.commit('loginSuccess', null); // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面\n\n        setTimeout(function () {\n          router.replace({\n            path: '/login',\n            query: {\n              redirect: router.currentRoute.fullPath\n            }\n          });\n        }, 1000);\n        break;\n      // 404请求不存在\n\n      case 404:\n        Toast({\n          message: '网络请求不存在',\n          duration: 1500,\n          forbidClick: true\n        });\n        break;\n      // 其他错误,直接抛出错误提示\n\n      default:\n        Toast({\n          message: error.response.data.message,\n          duration: 1500,\n          forbidClick: true\n        });\n    }\n\n    return Promise.reject(error.response);\n  }\n}); //formDataHeaders设置\n\nvar formDataHeaders = {\n  headers: {\n    \"Content-Type\": \"multipart/form-data\"\n  }\n};\n/**\n * 封装get方法\n * @param {*} params\n */\n\nvar httpGet = function httpGet(params) {\n  var url = params.url,\n      data = params.data,\n      sid = params.sid;\n  var headers = {};\n\n  if (sid) {\n    var sessionId = _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo && _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid ? _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid : \"\";\n    headers = {\n      headers: {\n        sid: sessionId\n      }\n    };\n  }\n\n  return axios.get(\"\".concat(base).concat(url), {\n    params: data\n  }, headers).then(function (res) {\n    return res.data.content;\n  });\n};\n/**\n * 封装post方法\n * @param {*} params\n */\n\nvar httpPost = function httpPost(params) {\n  var url = params.url,\n      data = params.data,\n      sid = params.sid;\n  var headers = {};\n\n  if (sid) {\n    var sessionId = _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo && _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid ? _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid : \"\";\n    headers = {\n      headers: {\n        sid: sessionId\n      }\n    };\n  }\n\n  return axios.post(\"\".concat(base).concat(url), data, headers).then(function (res) {\n    return res.data.content;\n  });\n};\n/**\n * 封装post方法\n * @param {*} params\n * data数据是 formdata格式\n * 例如:\n *          this.file = file\n            let data = new FormData() //使用formData对象\n            data.append('path', '/pro/mzczcradmin/')\n            data.append('file', file.file)\n */\n\nvar formdata = function formdata(params) {\n  var url = params.url,\n      data = params.data;\n  return axios.post(\"\".concat(base).concat(url), data, formDataHeaders).then(function (res) {\n    return res.data;\n  });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXBpL2ZldGNoLWFwaS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcGkvZmV0Y2gtYXBpLmpzP2VkMGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zSW5zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBzdGF0ZSBmcm9tICdAL3N0b3JlL3N0YXRlLmpzJztcbi8vIGltcG9ydCB7XG4vLyAgIFRvYXN0XG4vLyB9IGZyb20gJ3ZhbnQnO1xuXG5mdW5jdGlvbiBUb2FzdChtc2cpIHtcblx0Y29uc29sZS5sb2coXCJtc2c6XCIsIG1zZyk7XG59XG5cbi8vIGF4aW9z55qE6buY6K6kdXJsXG4vLyBheGlvcy5kZWZhdWx0cy5iYXNlVVJMID0gXCJcIlxuXG4vLyDmnI3liqHlmajlnLDlnYBcbi8vIGxldCBiYXNlID0gcHJvY2Vzcy5lbnYuUkVRVUVTVF9ET01BSU4gfHwgXCJodHRwOi8vbG9jYWxob3N0OjkxMDFcIjtcbi8vIGxldCBiYXNlID0gQ09NLmJhc2VVcmw7XG5jb25zb2xlLmxvZyhwcm9jZXNzLmVudik7XG5sZXQgYmFzZSA9IFwiXCI7XG5jb25zdCBheGlvcyA9IGF4aW9zSW5zLmNyZWF0ZSh7XG5cdGJhc2VVUkw6IHByb2Nlc3MuZW52LlZVRV9BUFBfQkFTRV9VUkwsXG5cdHRpbWVvdXQ6IDUwMDBcbn0pXG5cbi8vIOivt+axguaLpuaIquWZqFxuLy8gYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuLy8gICBjb25maWcgPT4ge1xuLy8gICAgIC8vIOavj+asoeWPkemAgeivt+axguS5i+WJjeWIpOaWreaYr+WQpuWtmOWcqHRva2Vu77yM5aaC5p6c5a2Y5Zyo77yM5YiZ57uf5LiA5ZyoaHR0cOivt+axgueahGhlYWRlcumDveWKoOS4inRva2Vu77yM5LiN55So5q+P5qyh6K+35rGC6YO95omL5Yqo5re75Yqg5LqGXG4vLyAgICAgLy8g5Y2z5L2/5pys5Zyw5a2Y5ZyodG9rZW7vvIzkuZ/mnInlj6/og710b2tlbuaYr+i/h+acn+eahO+8jOaJgOS7peWcqOWTjeW6lOaLpuaIquWZqOS4reimgeWvuei/lOWbnueKtuaAgei/m+ihjOWIpOaWrVxuLy8gICAgIGNvbnN0IHRva2VuID0gXCJ0b2tlblwiOyAvL+i/memHjOWGmeWFpXRva2VuXG4vLyAgICAgdG9rZW4gJiYgKGNvbmZpZy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0b2tlbik7XG4vLyAgICAgcmV0dXJuIGNvbmZpZztcbi8vICAgfSxcbi8vICAgZXJyb3IgPT4ge1xuLy8gICAgIHJldHVybiBQcm9taXNlLmVycm9yKGVycm9yKTtcbi8vICAgfSlcblxuLy8g5ZON5bqU5oum5oiq5ZmoXG5heGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuXHRyZXNwb25zZSA9PiB7XG5cdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG5cdFx0XHRpZiAocmVzcG9uc2UuZGF0YS5jb2RlID09PSAyMDApIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUb2FzdChyZXNwb25zZS5kYXRhLmJpek1zZyk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS5kYXRhKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLmRhdGEpO1xuXHRcdH1cblx0fSxcblx0Ly8g5pyN5Yqh5Zmo54q25oCB56CB5LiN5pivMjAw55qE5oOF5Ya1XG5cdGVycm9yID0+IHtcblx0XHRpZiAoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSB7XG5cdFx0XHRzd2l0Y2ggKGVycm9yLnJlc3BvbnNlLnN0YXR1cykge1xuXHRcdFx0XHQvLyA0MDE6IOacqueZu+W9lVxuXHRcdFx0XHQvLyDmnKrnmbvlvZXliJnot7PovaznmbvlvZXpobXpnaLvvIzlubbmkLrluKblvZPliY3pobXpnaLnmoTot6/lvoRcblx0XHRcdFx0Ly8g5Zyo55m75b2V5oiQ5Yqf5ZCO6L+U5Zue5b2T5YmN6aG16Z2i77yM6L+Z5LiA5q2l6ZyA6KaB5Zyo55m75b2V6aG15pON5L2c44CCXG5cdFx0XHRcdGNhc2UgNDAxOlxuXHRcdFx0XHRcdHJvdXRlci5yZXBsYWNlKHtcblx0XHRcdFx0XHRcdHBhdGg6ICcvbG9naW4nLFxuXHRcdFx0XHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0XHRcdFx0cmVkaXJlY3Q6IHJvdXRlci5jdXJyZW50Um91dGUuZnVsbFBhdGhcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gNDAzIHRva2Vu6L+H5pyfXG5cdFx0XHRcdC8vIOeZu+W9lei/h+acn+WvueeUqOaIt+i/m+ihjOaPkOekulxuXHRcdFx0XHQvLyDmuIXpmaTmnKzlnLB0b2tlbuWSjOa4heepunZ1ZXjkuK10b2tlbuWvueixoVxuXHRcdFx0XHQvLyDot7PovaznmbvlvZXpobXpnaJcblx0XHRcdFx0Y2FzZSA0MDM6XG5cdFx0XHRcdFx0VG9hc3Qoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ+eZu+W9lei/h+acn++8jOivt+mHjeaWsOeZu+W9lScsXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMTAwMCxcblx0XHRcdFx0XHRcdGZvcmJpZENsaWNrOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8g5riF6ZmkdG9rZW5cblx0XHRcdFx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndG9rZW4nKTtcblx0XHRcdFx0XHRzdG9yZS5jb21taXQoJ2xvZ2luU3VjY2VzcycsIG51bGwpO1xuXHRcdFx0XHRcdC8vIOi3s+i9rOeZu+W9lemhtemdou+8jOW5tuWwhuimgea1j+iniOeahOmhtemdomZ1bGxQYXRo5Lyg6L+H5Y6777yM55m75b2V5oiQ5Yqf5ZCO6Lez6L2s6ZyA6KaB6K6/6Zeu55qE6aG16Z2iXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRyb3V0ZXIucmVwbGFjZSh7XG5cdFx0XHRcdFx0XHRcdHBhdGg6ICcvbG9naW4nLFxuXHRcdFx0XHRcdFx0XHRxdWVyeToge1xuXHRcdFx0XHRcdFx0XHRcdHJlZGlyZWN0OiByb3V0ZXIuY3VycmVudFJvdXRlLmZ1bGxQYXRoXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sIDEwMDApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyA0MDTor7fmsYLkuI3lrZjlnKhcblx0XHRcdFx0Y2FzZSA0MDQ6XG5cdFx0XHRcdFx0VG9hc3Qoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ+e9kee7nOivt+axguS4jeWtmOWcqCcsXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMTUwMCxcblx0XHRcdFx0XHRcdGZvcmJpZENsaWNrOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIOWFtuS7lumUmeivr++8jOebtOaOpeaKm+WHuumUmeivr+aPkOekulxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFRvYXN0KHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSxcblx0XHRcdFx0XHRcdGR1cmF0aW9uOiAxNTAwLFxuXHRcdFx0XHRcdFx0Zm9yYmlkQ2xpY2s6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXNwb25zZSk7XG5cdFx0fVxuXHR9XG4pO1xuXG4vL2Zvcm1EYXRhSGVhZGVyc+iuvue9rlxubGV0IGZvcm1EYXRhSGVhZGVycyA9IHtcblx0aGVhZGVyczoge1xuXHRcdFwiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiXG5cdH1cbn1cblxuLyoqXG4gKiDlsIHoo4VnZXTmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKi9cbmV4cG9ydCBjb25zdCBodHRwR2V0ID0gcGFyYW1zID0+IHtcblx0bGV0IHtcblx0XHR1cmwsXG5cdFx0ZGF0YSxcblx0XHRzaWRcblx0fSA9IHBhcmFtcztcblx0bGV0IGhlYWRlcnMgPSB7fTtcblx0aWYgKHNpZCkge1xuXHRcdGxldCBzZXNzaW9uSWQgPSBzdGF0ZS51c2VySW5mbyAmJiBzdGF0ZS51c2VySW5mby5zaWQgPyBzdGF0ZS51c2VySW5mby5zaWQgOiBcIlwiO1xuXHRcdGhlYWRlcnMgPSB7XG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdHNpZDogc2Vzc2lvbklkXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBheGlvcy5nZXQoYCR7YmFzZX0ke3VybH1gLCB7XG5cdFx0cGFyYW1zOiBkYXRhXG5cdH0sIGhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhLmNvbnRlbnQpO1xufVxuXG4vKipcbiAqIOWwgeijhXBvc3Tmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKi9cbmV4cG9ydCBjb25zdCBodHRwUG9zdCA9IHBhcmFtcyA9PiB7XG5cdGxldCB7XG5cdFx0dXJsLFxuXHRcdGRhdGEsXG5cdFx0c2lkXG5cdH0gPSBwYXJhbXM7XG5cdGxldCBoZWFkZXJzID0ge307XG5cdGlmIChzaWQpIHtcblx0XHRsZXQgc2Vzc2lvbklkID0gc3RhdGUudXNlckluZm8gJiYgc3RhdGUudXNlckluZm8uc2lkID8gc3RhdGUudXNlckluZm8uc2lkIDogXCJcIjtcblx0XHRoZWFkZXJzID0ge1xuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRzaWQ6IHNlc3Npb25JZFxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYXhpb3MucG9zdChgJHtiYXNlfSR7dXJsfWAsIGRhdGEsIGhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhLmNvbnRlbnQpO1xufVxuXG4vKipcbiAqIOWwgeijhXBvc3Tmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKiBkYXRh5pWw5o2u5pivIGZvcm1kYXRh5qC85byPXG4gKiDkvovlpoLvvJpcbiAqICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICAgICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCkgLy/kvb/nlKhmb3JtRGF0YeWvueixoVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BhdGgnLCAnL3Byby9temN6Y3JhZG1pbi8nKVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLmZpbGUpXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtZGF0YSA9IHBhcmFtcyA9PiB7XG5cdGxldCB7XG5cdFx0dXJsLFxuXHRcdGRhdGFcblx0fSA9IHBhcmFtcztcblx0cmV0dXJuIGF4aW9zLnBvc3QoYCR7YmFzZX0ke3VybH1gLCBkYXRhLCBmb3JtRGF0YUhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBN0NBO0FBQ0E7QUFrREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBTUE7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/api/fetch-api.js\n");

/***/ }),

/***/ "./src/assets/images/common/button-next.png":
/*!**************************************************!*\
  !*** ./src/assets/images/common/button-next.png ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAuCAMAAAAFiil6AAAAPFBMVEUAAAD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQC43r6mAAAAE3RSTlMAKcry1foyDBPhGjsjwT/rsXp75PzLkAAAAGRJREFUOMut1EsOgCAMAFHQivhF7f3v6gVGDC0s5yUkhLThljXgES0se9HlQ0abZJRokUmln6SqzCxakaGfbDY5WE6bXL/AV3Hnh/h7MnX+9NaeoUdP5zHgzkPo7wV6dWU8wv0Fq/cJL8kFDSkAAAAASUVORK5CYII=\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9jb21tb24vYnV0dG9uLW5leHQucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1uZXh0LnBuZz9iZmNkIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQXVDQU1BQUFBRmlpbDZBQUFBUEZCTVZFVUFBQUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FDNDNyNm1BQUFBRTNSU1RsTUFLY3J5MWZveURCUGhHanNqd1QvcnNYcDc1UHpMa0FBQUFHUkpSRUZVT011dDFFc09nQ0FNQUZIUWl2aEY3ZjN2NmdWR0RDMHM1eVVraExUaGxqWGdFUzBzZTlIbFEwYWJaSlJva1VtbG42U3F6Q3hha2FHZmJEWTVXRTZiWEwvQVYzSG5oL2g3TW5YKzlOYWVvVWRQNXpIZ3prUG83d1Y2ZFdVOHd2MEZxL2NKTDhrRkRTa0FBQUFBU1VWT1JLNUNZSUk9XCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/common/button-next.png\n");

/***/ }),

/***/ "./src/assets/images/common/button-prev.png":
/*!**************************************************!*\
  !*** ./src/assets/images/common/button-prev.png ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAuCAMAAAAFiil6AAAAM1BMVEUAAAD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQADIOb6AAAAEHRSTlMAJBM8LPgaDNXH8eQz3bF3c64jtAAAAFZJREFUOMvF1MEVgCAQA1FAkICg9F+tFpAc5K24xz/njaO34+J+DAiv/kMPXXqKbxw2nh9v3Af1YufbD+5O4Trksq40u4KpkiItwbb0qVK9eOVlBXJkbrftCFHy0aPQAAAAAElFTkSuQmCC\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9jb21tb24vYnV0dG9uLXByZXYucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1wcmV2LnBuZz9lYjZlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQXVDQU1BQUFBRmlpbDZBQUFBTTFCTVZFVUFBQUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FBRElPYjZBQUFBRUhSU1RsTUFKQk04TFBnYUROWEg4ZVF6M2JGM2M2NGp0QUFBQUZaSlJFRlVPTXZGMU1FVmdDQVFBMUZBa0lDZzlGK3RGcEFjNUsyNHh6L25qYU8zNCtKK0RBaXYva01QWFhxS2J4dzJuaDl2M0FmMVl1ZmJEKzVPNFRya3NxNDB1NEtwa2lJdHdiYjBxVks5ZU9WbEJYSmticmZ0Q0ZIeTBhUFFBQUFBQUVsRlRrU3VRbUNDXCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/common/button-prev.png\n");

/***/ }),

/***/ "./src/assets/images/home/footer-logo.png":
/*!************************************************!*\
  !*** ./src/assets/images/home/footer-logo.png ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/footer-logo.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2Zvb3Rlci1sb2dvLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hc3NldHMvaW1hZ2VzL2hvbWUvZm9vdGVyLWxvZ28ucG5nP2I2ZWYiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYXNzZXRzL2ltZy9mb290ZXItbG9nby5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/footer-logo.png\n");

/***/ }),

/***/ "./src/assets/images/home/header-logo.png":
/*!************************************************!*\
  !*** ./src/assets/images/home/header-logo.png ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/header-logo.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2hlYWRlci1sb2dvLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hc3NldHMvaW1hZ2VzL2hvbWUvaGVhZGVyLWxvZ28ucG5nPzI0ZWIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYXNzZXRzL2ltZy9oZWFkZXItbG9nby5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/header-logo.png\n");

/***/ }),

/***/ "./src/assets/images/home/icon-user.png":
/*!**********************************************!*\
  !*** ./src/assets/images/home/icon-user.png ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAA40lEQVQokYWRPUpDQRRGjyEP3UAIaGkqUbIDQXQHkk2Ji1AQUwiKhBRaPLSQBxYuwiZNoiABUYLHwjtxjA+98MGd755vfhhUMnXVK/VdfYt+K2dyeFOdBjxQh9G/qBt1gXP1Q93OvJ3wzuoCI/V+4YqoD+pjWjf4rgmwCjQzrwjvORl5oA+sAUfAOtABjoE2cDqnsqML9cbfVcbsxxua6qE6qwnM1INgQF1S+zG8U3fVZXVF3VOrmJ2kQC+Mi7TLggr1Mph91Fv1VW3VwEltv36+JODrP+CkUp02gDFQ8X9VwNMn4rqc0xVlVWkAAAAASUVORK5CYII=\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmc/Nzg1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFOQ0FZQUFBQ2RLWTlDQUFBQTQwbEVRVlFva1lXUlBVcERRUlJHanlFUDNVQUlhR2txVWJJRFFYUUhrazJKaTFBUVV3aUtoQlJhUExTUUJ4WXV3aVpOb2lBQlVZTEh3anR4akErOThNR2Q3NTV2ZmhoVU1uWFZLL1ZkZll0K0syZHllRk9kQmp4UWg5Ry9xQnQxZ1hQMVE5M092SjN3enVvQ0kvVis0WXFvRCtwaldqZjRyZ213Q2pRenJ3anZPUmw1b0Erc0FVZkFPdEFCam9FMmNEcW5zcU1MOWNiZlZjYnN4eHVhNnFFNnF3bk0xSU5nUUYxUyt6RzhVM2ZWWlhWRjNWT3JtSjJrUUMrTWk3VExnZ3IxTXBoOTFGdjFWVzNWd0VsdHYzNitKT0RyUCtDa1VwMDJnREZROFg5VndOTW40cnFjMHhWbFZXa0FBQUFBU1VWT1JLNUNZSUk9XCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/icon-user.png\n");

/***/ }),

/***/ "./src/assets/images/home/qrcode-focus.png":
/*!*************************************************!*\
  !*** ./src/assets/images/home/qrcode-focus.png ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/qrcode-focus.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL3FyY29kZS1mb2N1cy5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL3FyY29kZS1mb2N1cy5wbmc/MDNkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3FyY29kZS1mb2N1cy5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/qrcode-focus.png\n");

/***/ }),

/***/ "./src/assets/images/index sync recursive ^\\.\\/more\\-1\\-.*\\.png$":
/*!*************************************************************!*\
  !*** ./src/assets/images/index sync ^\.\/more\-1\-.*\.png$ ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var map = {\n\t\"./more-1-en.png\": \"./src/assets/images/index/more-1-en.png\",\n\t\"./more-1-tc.png\": \"./src/assets/images/index/more-1-tc.png\",\n\t\"./more-1-zh.png\": \"./src/assets/images/index/more-1-zh.png\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/assets/images/index sync recursive ^\\\\.\\\\/more\\\\-1\\\\-.*\\\\.png$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleCBzeW5jIHJlY3Vyc2l2ZSBeXFwuXFwvbW9yZVxcLTFcXC0uKlxcLnBuZyQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleCBzeW5jIF5cXC5cXC9tb3JlXFwtMVxcLS4qXFwucG5nJD9hYzA0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBtYXAgPSB7XG5cdFwiLi9tb3JlLTEtZW4ucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtZW4ucG5nXCIsXG5cdFwiLi9tb3JlLTEtdGMucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtdGMucG5nXCIsXG5cdFwiLi9tb3JlLTEtemgucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtemgucG5nXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXggc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC9tb3JlXFxcXC0xXFxcXC0uKlxcXFwucG5nJFwiOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index sync recursive ^\\.\\/more\\-1\\-.*\\.png$\n");

/***/ }),

/***/ "./src/assets/images/index/banner.png":
/*!********************************************!*\
  !*** ./src/assets/images/index/banner.png ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/banner.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9iYW5uZXIucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZz8yZDZhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvYmFubmVyLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/banner.png\n");

/***/ }),

/***/ "./src/assets/images/index/linear.png":
/*!********************************************!*\
  !*** ./src/assets/images/index/linear.png ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7YAAAAbBAMAAAC6vg4GAAAAD1BMVEX/MBX/MBX/MBX/MBX/MBVZEpHiAAAABXRSTlMBAwYKDvRkOdAAAALdSURBVGje7NcBroIwDIDh9QarN3jtDdrdAO5/pieDotBtmBfEF7MvikgEpn8mIeDqRs9YvTQOY3c1LRPa+MFVjDGEADHgA20IM+/S6jDen73vVYbM1ZXMpzW5bLiLUK2bD6LOcsre+L3mHzjp3pSEiVppIazQ1zWqJKJFaUw7Y3eCZAZ1eKLUKosxhsmyhFZd4uWIR9IwSSU6bOUt6ZCms9gQ8suWG15h4EeHPlP9ApuzqrTLYq66hU9u5PuqTPRSSbtMMlUqQPO41CLW2yLt2cRl7S5Gy5Qi46esv9TGYGBeuqnriMpMu3cTEWYScTc7PqyZQ8b8MGCvuEE1rGyox34HP1d92HJZCAChDHfoNSqXY4fkWxBb12pZJwTMk7YO/tZWNGPWiSipbZlXjGgdr59heyeNXbmwjbRKHrt50j6ysVHxbgPb+vPefDgk/y1pwe2u3pIU8k1PWXR5qxffNqEz/NPT8ueGhEUAVvYVWHaj7kOwZv0bBmgWzcsIEaC3/W3HDHATiGEg6P3B+Av9/yMrXeLbWFeVFhUKUkYioCS2g70J5F6F/AaW0zZQ3MKTlTf52DyGvAla6qUgfoYtdJjk5qUgsv451cXn13C02rV9GTjqwbzG4iLdx/BkbeyN/B+4FgO5vQ/Vi+goN0+jTt+qLSHFnyFWqSTs2j6UKiOj8a8q8x4Tj4HlKKDt7vnmD8ba0NWf0FCiapgewupielLkqeExWPYQE8BRPJ9lvdmPJ+J6V3SU7kxhOJuxLh0OnJxLZkQmq3WFIPE6D7LFVjwDqCTpq/xR07LS2cAWTSD4K+S0waIwaCmAo2bpwCS9RFfklt4rRpdRF4BX1SSjGa3BqogsgaBFS8gaOSGeByN4KhZqHxm8FZwGZz1VvQROLnbCdAkX1fZQ3SIEChyKqa3UWrm0tM7YSiKy+5SrmFp7oR7epqtjpZaY7CDxqccYndowIjabzWaz2bwZn4kVXoPimRIxAAAAAElFTkSuQmCC\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9saW5lYXIucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbGluZWFyLnBuZz9kMTA5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQTdZQUFBQWJCQU1BQUFDNnZnNEdBQUFBRDFCTVZFWC9NQlgvTUJYL01CWC9NQlgvTUJWWkVwSGlBQUFBQlhSU1RsTUJBd1lLRHZSa09kQUFBQUxkU1VSQlZHamU3TmNCcm9Jd0RJRGg5UWFyTjNqdERkcmRBTzUvcGllRG90QnRtQmZFRjdNdmlrZ0VwbjhtSWVEcVJzOVl2VFFPWTNjMUxSUGErTUZWakRHRUFESGdBMjBJTSsvUzZqRGVuNzN2VlliTTFaWE1welc1YkxpTFVLMmJENkxPY3NyZStMM21IempwM3BTRWlWcHBJYXpRMXpXcUpLSkZhVXc3WTNlQ1pBWjFlS0xVS29zeGhzbXloRlpkNHVXSVI5SXdTU1U2Yk9VdDZaQ21zOWdROHN1V0cxNWg0RWVIUGxQOUFwdXpxclRMWXE2NmhVOXU1UHVxVFBSU1NidE1NbFVxUVBPNDFDTFcyeUx0MmNSbDdTNUd5NVFpNDZlc3Y5VEdZR0JldXFucmlNcE11M2NURVdZU2NUYzdQcXlaUThiOE1HQ3Z1RUUxckd5b3gzNEhQMWQ5MkhKWkNBQ2hESGZvTlNxWFk0ZmtXeEJiMTJwWkp3VE1rN1lPL3RaV05HUFdpU2lwYlpsWGpHZ2RyNTloZXllTlhibXdqYlJLSHJ0NTBqNnlzVkh4YmdQYit2UGVmRGdrL3kxcHdlMnUzcElVOGsxUFdYUjVxeGZmTnFFei9OUFQ4dWVHaEVVQVZ2WVZXSGFqN2tPd1p2MGJCbWdXemNzSUVhQzMvVzNIREhBVGlHRWc2UDNCK0F2OS95TXJYZUxiV0ZlVkZoVUtVa1lpb0NTMmc3MEo1RjZGL0FhVzB6WlEzTUtUbFRmNTJEeUd2QWxhNnFVZ2ZvWXRkSmprNXFVZ3N2NDUxY1huMTNDMDJyVjlHVGpxd2J6RzRpTGR4L0JrYmV5Ti9CKzRGZ081dlEvVmkrZ29OMCtqVHQrcUxTSEZueUZXcVNUczJqNlVLaU9qOGE4cTh4NFRqNEhsS0tEdDd2bm1EOGJhME5XZjBGQ2lhcGdld3VwaWVsTGtxZUV4V1BZUUU4QlJQSjlsdmRtUEorSjZWM1NVN2t4aE9KdXhMaDBPbkp4TFprUW1xM1dGSVBFNkQ3TEZWandEcUNUcHEveFIwN0xTMmNBV1RTRDRLK1Mwd2FJd2FDbUFvMmJwd0NTOVJGZmtsdDRyUnBkUkY0QlgxU1NqR2EzQnFvZ3NnYUJGUzhnYU9TR2VCeU40S2hacUh4bThGWndHWnoxVnZRUk9MbmJDZEFrWDFmWlEzU0lFQ2h5S3FhM1VXcm0wdE03WVNpS3krNVNybUZwN29SN2VwcXRqcFphWTdDRHhxY2NZbmRvd0lqYWJ6V2F6MmJ3Wm40a1ZYb1BpbVJJeEFBQUFBRWxGVGtTdVFtQ0NcIiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/linear.png\n");

/***/ }),

/***/ "./src/assets/images/index/more-1-en.png":
/*!***********************************************!*\
  !*** ./src/assets/images/index/more-1-en.png ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/more-1-en.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtZW4ucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLWVuLnBuZz9iNzM4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLWVuLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-en.png\n");

/***/ }),

/***/ "./src/assets/images/index/more-1-tc.png":
/*!***********************************************!*\
  !*** ./src/assets/images/index/more-1-tc.png ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/more-1-tc.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtdGMucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLXRjLnBuZz82NzExIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLXRjLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-tc.png\n");

/***/ }),

/***/ "./src/assets/images/index/more-1-zh.png":
/*!***********************************************!*\
  !*** ./src/assets/images/index/more-1-zh.png ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/more-1-zh.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtemgucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLXpoLnBuZz8wNzFlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLXpoLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-zh.png\n");

/***/ }),

/***/ "./src/assets/images/index/recommend-1.png":
/*!*************************************************!*\
  !*** ./src/assets/images/index/recommend-1.png ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/recommend-1.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMS5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMS5wbmc/M2E2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0xLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-1.png\n");

/***/ }),

/***/ "./src/assets/images/index/recommend-2.png":
/*!*************************************************!*\
  !*** ./src/assets/images/index/recommend-2.png ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/recommend-2.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmc/YzM0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0yLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-2.png\n");

/***/ }),

/***/ "./src/assets/images/index/recommend-3.png":
/*!*************************************************!*\
  !*** ./src/assets/images/index/recommend-3.png ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__.p + \"assets/img/recommend-3.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMy5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMy5wbmc/NTIzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0zLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-3.png\n");

/***/ }),

/***/ "./src/common/lang/en.js":
/*!*******************************!*\
  !*** ./src/common/lang/en.js ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {\n  message: {\n    login: 'Login',\n    Username: 'Username',\n    Password: 'Password',\n    Captcha: 'Captcha',\n    Language: 'Language',\n    zh: 'Chinese',\n    en: 'English'\n  },\n  glbalTips: {\n    sessionLost: \"为了更好的体验,需要您登录后再进行此操作\"\n  },\n  nav: {\n    loginData: {\n      name: \"login\",\n      path: \"\",\n      list: [{\n        name: \"register\",\n        path: \"/register\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"login\",\n        path: \"/login\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"modify password\",\n        path: \"/password/reset\",\n        type: \"auth\",\n        value: \"\"\n      }, {\n        name: \"logout\",\n        path: \"\",\n        type: \"auth\",\n        value: \"logout\"\n      }]\n    },\n    navList: [{\n      name: \"Product description\",\n      path: \"/product\",\n      list: []\n    }, {\n      name: \"Customer service\",\n      path: \"/custom/product\",\n      list: [{\n        name: \"Contact us\",\n        path: \"/custom/service?q=m1\"\n      }, {\n        name: \"Pay premium\",\n        path: \"/custom/service?q=m2\"\n      }, {\n        name: \"Query policy\",\n        path: \"/custom/service?q=m3\"\n      }, {\n        name: \"Change policy\",\n        path: \"/custom/service?q=m41\"\n      }, {\n        name: \"Claim report\",\n        path: \"/custom/service?q=m5\"\n      }, {\n        name: \"Reservation service\",\n        path: \"/custom/service?q=m6\"\n      }, {\n        name: \"Suggestions\",\n        path: \"/custom/service?q=m7\"\n      }, {\n        name: \"Common form\",\n        path: \"/custom/service?q=m8\"\n      }]\n    }, {\n      name: \"News\",\n      path: \"/news/list\",\n      list: []\n    }, {\n      name: \"About\",\n      path: \"\",\n      list: [{\n        name: \"Company\",\n        path: \"/profile\"\n      }, {\n        name: \"Leaders\",\n        path: \"\"\n      }]\n    }]\n  },\n  footer: {\n    hkPhone: \"HK Tel\",\n    cnPhone: \"CN Tel\",\n    aboutUs: \"About us\",\n    companyIntroduction: \"Company introduction\",\n    news: \"News\",\n    joinUs: \"Join us\",\n    helpCenter: \"Help center\",\n    privacy: \"Privacy\",\n    terms: \"Terms\",\n    map: \"Map\",\n    contactUs: \"Contact us\",\n    contactInformation: \"Contact Information\",\n    service: \"Service\",\n    qrcode: \"Official Accounts\",\n    copyright: \"版權所有 © 中國平安保險(集團)股份有限公司未經許可不得復制、轉載或摘編,違者必究!\"\n  },\n  login: {\n    title: \"平安一賬通\",\n    loginType1: \"账密登录\",\n    loginType2: \"動態密碼登录\",\n    account: \"賬號\",\n    accountPlaceholder: \"請輸入證件號/一账通用户名/手机号\",\n    password: \"密碼\",\n    passwordPlaceholder: \"輸入登錄密碼\",\n    verifyPlaceholder: \"請輸入驗證碼\",\n    agree: \"同意\",\n    protocol: \"《平安一账通会员服务协议》\",\n    login: \"登入\",\n    register: \"註冊\",\n    forget: \"忘記密碼\",\n    mobile: \"手機號\",\n    mobilePlaceholder: \"手機號\",\n    verifyCode: \"驗證碼\",\n    verifyCodePlaceholder: \"驗證碼\",\n    verifyCodeGet: \"獲取驗證碼\",\n    tips: {\n      e1: \"请输入账号信息\",\n      e2: \"请输入密码\",\n      e3: \"请输入图像验证码\",\n      e4: \"请同意《平安一账通会员服务协议》\",\n      e5: \"账号/密码不正确\",\n      oe0: \"请输入正确的手机号\",\n      oe1: \"请先获取短信验证码\",\n      oe2: \"请输入图片验证码\",\n      oe3: \"请输入短信验证码\",\n      oe4: \"短信验证码不正确\"\n    }\n  },\n  session: {\n    sidExpire: \"長時間未操作,為了您賬戶的安全,請登錄後再操作\"\n  },\n  register: {\n    mobileOptions: [{\n      type: \"hk\",\n      name: \"香港手機號\",\n      placeHolder: \"請輸入8位手機號碼\",\n      areaCode: \"+852\"\n    }, {\n      type: \"zh\",\n      name: \"大陸手機號\",\n      placeHolder: \"請輸入11位手機號碼\",\n      areaCode: \"+86\"\n    }],\n    coutTips: \"{second}秒後重新獲取\",\n    title: \"歡迎註冊\",\n    title2: \"請設置新的密碼\",\n    mobilePlaceholder: \"请输入8位手机号码\",\n    verifyCodePlaceholder: \"請輸入驗證碼\",\n    verifyCodeGet: \"獲取驗證碼\",\n    agree: \"同意\",\n    protocol: \"《平安一账通会员服务协议》\",\n    register: \"點擊註冊\",\n    newPassword: \"新密碼\",\n    newPasswordPlaceholder: \"輸入登錄密碼\",\n    newPasswordSure: \"確認密碼\",\n    newPasswordSurePlaceholder: \"輸入登錄密碼\",\n    sure: \"確認\",\n    tips: {\n      e1: \"手機號不正確,請輸入正確的手機號\",\n      e2: \"請同意《平安一賬通會員服務協議》\",\n      e3: \"短信驗證碼不正確\",\n      e4: \"請先獲取短信驗證碼\",\n      e5: \"手機號已經被註冊,請使用其他手機號註冊或直接登錄\",\n      e6: \"請輸入圖片驗證碼\",\n      e7: \"密碼長度不能少於8位\",\n      e8: \"密碼中必須包含數字、字符以及特殊號碼\",\n      e9: \"兩次密碼不一致,請確認後重新輸入\",\n      e10: \"驗證碼過期,請重新申請驗證碼\",\n      e11: \"註冊失敗,請聯繫工作人員\",\n      e12: \"註冊成功\"\n    }\n  },\n  passwordCheck: {\n    error1: \"密碼長度不少於8位\",\n    error2: \"密碼中必須包含數字、字符以及特殊號碼\",\n    error3: \"两次密码不一致,请确认后重新输入\",\n    error4: \"密碼修改失敗,請稍後再試,或拨打客服电话95511解决\",\n    error5: \"舊密碼不正確,請重新輸入\",\n    success: \"密码修改成功\"\n  },\n  passwordReset: {\n    oldPwd: \"旧密码\",\n    oldPwdPlaceholde: \"請輸入舊密碼\",\n    cidExpire: \"長時間未操作,為了您賬戶的安全,請重新開始\",\n    type1: {\n      title: \"密碼找回\",\n      t1: \"用戶輸入信息\",\n      t1Placeholder: \"手機號/一賬通用戶名\",\n      submit: \"確認\",\n      error: \"您的手機號或證件號輸入錯誤,請核對后重新輸入\"\n    },\n    type2: {\n      title: \"密碼找回\",\n      t1: \"手機短信驗證碼\",\n      t1Placeholder: \"請輸入驗證碼\",\n      submit: \"確認\",\n      error1: \"短信驗證碼輸入錯誤,請核對後重新輸入\",\n      error2: \"短信驗證碼已經過期,請重新獲取驗證碼\",\n      error3: \"短信验证码发放时间少于1分钟,请稍后再试\"\n    },\n    type3: {\n      title: \"密碼找回\",\n      t1: \"核對身份證信息\",\n      t1Placeholder: \"\",\n      submit: \"確認\"\n    },\n    type4: {\n      title: \"請設置新的密碼\",\n      t1: \"新密碼\",\n      t1Placeholder: \"請輸入新密碼\",\n      t2: \"確認密碼\",\n      t2Placeholder: \"請重新輸入新密碼\",\n      submit: \"確認\",\n      error1: \"密碼長度不少於8位\",\n      error2: \"密碼中必須包含數字、字符以及特殊號碼\"\n    }\n  },\n  infomationImprove: {\n    title: \"請完善您的信息\",\n    t1: \"姓名\",\n    t1Placeholder: \"\",\n    t2: \"性別\",\n    t2Placeholder: \"\",\n    t3: \"出生日期\",\n    t3Placeholder: \"\",\n    t4: \"證件類型\",\n    t4Placeholder: \"\",\n    t5: \"證件號碼\",\n    t5Placeholder: \"\",\n    submit: \"確認\",\n    cancel: \"跳過\",\n    candidates: {\n      sex: [{\n        name: \"男\",\n        value: \"M\"\n      }, {\n        name: \"女\",\n        value: \"F\"\n      }],\n      idType: [{\n        name: \"身份證\",\n        value: \"1\"\n      }, {\n        name: \"護照\",\n        value: \"2\"\n      }, {\n        name: \"軍官證或士兵證\",\n        value: \"3\"\n      }, {\n        name: \"港澳通行證/回鄉證或台胞證\",\n        value: \"6\"\n      }, {\n        name: \"外國人永久居留身份證\",\n        value: \"0\"\n      }, {\n        name: \"港澳台居民居住證\",\n        value: \"V\"\n      }, {\n        name: \"台灣居民居住證\",\n        value: \"W\"\n      }]\n    },\n    successMsg: \"更新成功\",\n    errorTips: {\n      e1: \"請填寫姓名信息\",\n      e2: \"請選擇性別\",\n      e3: \"請選擇生日\",\n      e4: \"請選擇證件類型\",\n      e5: \"請填寫證件號碼\",\n      e6: \"您填寫的證件號碼有誤\",\n      e7: \"您填寫的信息有誤,請核實後重新提交\"\n    }\n  },\n  index: {\n    news: \"新聞資訊\",\n    newMore: \"查看更多\",\n    recommend: {\n      item1: {\n        btn: \"了解更多產品\",\n        t1: \"為自己和家人尋找壹份保障\"\n      },\n      item2: {\n        btn: \"立即預約\",\n        t1: \"在線預約 專業服務\"\n      },\n      item3: {\n        btn: \"客户服务\",\n        t1: \"專業客服為妳服務\",\n        t2: \"想了解更多,可致電\",\n        t3: \"95511\",\n        t4: \"聯絡我們,或進入\"\n      }\n    }\n  },\n  complaintAcceptance: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"聯絡方式\",\n    email: \"電郵地址\",\n    question: \"問題或意見\",\n    questionPlaceHolder: \"(字數不超過500字)\",\n    orderNo: \"保單編號\",\n    orderNoPlaceHolder: \"如您為平安客戶,請提供保單編號\",\n    contactTime: \"期望聯絡時間\",\n    notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n    notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\",\n    contactTypes: ['電話', '電郵'],\n    errorTips: {\n      e1: \"請填寫該項內容\",\n      e2: \"請填寫正確的聯繫方式\"\n    }\n  },\n  reservation: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"聯絡方式\",\n    contact: \"聯絡电话\",\n    contactPlaceholder: \"香港號碼/內地號碼\",\n    reservationType: \"預約類型\",\n    reservationRemark: \"預約說明\",\n    reservationRemarkPlaceholder: \"請簡單說明您想要咨詢的產品或業務\",\n    hkClient: \"是否平安香港客戶\",\n    yes: \"是\",\n    no: \"否\",\n    contactTime: \"期望联络时间\",\n    notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n    notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\"\n  },\n  paymentType: {\n    menu1: \"親臨客服中心付款\",\n    menu2: \"网银付款\",\n    menu3: \"电汇付款\",\n    menu4: \"柜员机付款\",\n    menu5: \"「缴费灵」付款\",\n    menu6: \"香港邮政局\"\n  },\n  product: {\n    btnPosition: \"Booking service\",\n    iconProblem: \"Common problem\",\n    iconProcess: \"Insurance process\",\n    iconProduct: \"Product details\"\n  },\n  customProduct: {\n    menu1: \"Contact us\",\n    menu2: \"Pay premium\",\n    menu3: \"Query policy\",\n    menu4: \"Change policy\",\n    menu5: \"Claim report\",\n    menu6: \"Reservation service\",\n    menu7: \"Suggestions\",\n    menu8: \"Common form\"\n  },\n  commonForm: {\n    head1: \"表格類型\",\n    head2: \"表格名稱\",\n    head3: \"使用說明\",\n    head4: \"附件\",\n    download: \"下載文檔\",\n    form: [{\n      type: \"繳費類\",\n      list: [{\n        name: \"「電子入賬服務」及銀行戶口<br>直接付款授權申請\",\n        desc: \"申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供\",\n        download: \"\"\n      }, {\n        name: \"信用卡戶口直接付款授權書\",\n        desc: \"申請信用卡戶口直接付款授權時須提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"保單變更類\",\n      list: [{\n        name: \"保險合同解除申請書\",\n        desc: \"退保、猶豫期退保業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 保單貸款還款類)\",\n        desc: \"保單貸款、還款業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 保險合同計劃變更類)\",\n        desc: \"加保、減保、新增附險、復效等業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 客戶信息變更類)\",\n        desc: \"基本信息變更業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 客戶權益變更類)\",\n        desc: \"交費方式、自墊選擇權變更、補發等業務適用\",\n        download: \"\"\n      }, {\n        name: \"授權委托書\",\n        desc: \"委托他人代辦時須提供\",\n        download: \"\"\n      }, {\n        name: \"稅收聲明\",\n        desc: \"CRS要求\",\n        download: \"\"\n      }, {\n        name: \"健康告知\",\n        desc: \"須二次核保的業務須提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"理賠類\",\n      list: [{\n        name: \"理賠申請書\",\n        desc: \"紙質申請的應備文件\",\n        download: \"\"\n      }]\n    }]\n  },\n  policyChangeGuide: {\n    notice: \"如需做其他保單變更聯繫客服(聯繫客服超鏈接跳轉公司聯繫信息頁)\",\n    head1: \"項目\",\n    head2: \"具體內容\",\n    head3: \"申請資格人\",\n    head4: \"受理時間\",\n    head5: \"應備材料\",\n    download: \"下載文檔\",\n    form: [{\n      project: \"退保\",\n      content: \"在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)\",\n      applicant: \"投保人\",\n      receptionTime: \"保單效力終止前\",\n      materialList: [{\n        name: \"保險單\"\n      }, {\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }]\n    }, {\n      project: \"猶豫期退保\",\n      content: \"在猶豫期內提出解除合同,公司會無息退還全部保費\",\n      applicant: \"投保人\",\n      receptionTime: \"猶豫期結束前\",\n      materialList: [{\n        name: \"保險單\"\n      }, {\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }, {\n        name: \"首期保費發票\"\n      }]\n    }, {\n      project: \"客戶資料變更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m42\"\n      },\n      content: \"投保人、受保人、受益人的個人信息變更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"必要的證明材料\"\n      }]\n    }, {\n      project: \"聯系方式變更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m43\"\n      },\n      content: \"地址、電話等信息的變更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }]\n    }, {\n      project: \"交費方式變更\",\n      content: \"更改保單的續期交費方式或交費賬號\",\n      applicant: \"投保人\",\n      receptionTime: \"保單交費期滿前\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"保險單\"\n      }]\n    }]\n  },\n  policyChangeContact: {\n    phone: \"聯繫電話\",\n    address: \"聯繫地址\",\n    email: \"E-Mail\",\n    checkTips: \"本人不同意接收宣傳信息\",\n    submit: \"確認修改\",\n    errorTips: {\n      e1: \"請填寫正確的聯繫電話\",\n      e2: \"請填寫聯繫地址\",\n      e3: \"請填寫正確的E-Mail地址\"\n    }\n  },\n  policyChangeInformation: {\n    hkClient: \"是否平安香港客戶\",\n    yes: \"是\",\n    no: \"否\",\n    obj: \"變更對象\",\n    name: \"姓名\",\n    sex: \"性别\",\n    birth: \"出生日期\",\n    type: \"證件類型\",\n    NO: \"證件號碼\",\n    validityPeriod: \"證件有效期\",\n    nationality: \"國籍\",\n    employer: \"工作單位\",\n    maritalStatus: \"婚姻狀況\",\n    submit: \"確認修改\",\n    upload: \"附件上傳\",\n    modifyTips1: \"如需修改請\",\n    modifyTips2: \"聯繫客服\"\n  },\n  contactUs: {\n    service: {\n      center: {\n        title: \"客戶服務中心\",\n        address: \"地址:香港尖沙嘴港威永金融大樓\",\n        time: \"服務時間:星期壹至五9:00-18:00\"\n      },\n      hotline: {\n        title: \"客戶服務熱線\",\n        hk: \"香港號碼:(852)2983 8866\",\n        cn: \"內地號碼:(86)40078 95511\",\n        time: \"服務時間:星期壹至五9:00-18:00\"\n      },\n      mail: {\n        title: \"客戶服務電郵\",\n        mail: \"cs@pingan.com.hk\"\n      }\n    },\n    pulbic: {\n      title: \"微信公眾號\",\n      m1: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「添加朋友」,選擇「公眾號」 輸入並搜索「平安人壽香港」\",\n      m2: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「掃壹掃」掃描下方二維碼(放置二維碼)\"\n    },\n    qrcode: {\n      title: \"官方公眾號\"\n    }\n  },\n  customService: {\n    name: \"Customer service\",\n    menu1: \"Contact us\",\n    menu2: \"Pay premium\",\n    menu3: \"Query policy\",\n    menu4: \"Change policy\",\n    menu41: \"保單變更指引\",\n    menu42: \"聯系方式變更\",\n    menu43: \"客戶資料變更\",\n    menu5: \"Claim report\",\n    menu6: \"Reservation service\",\n    menu7: \"Suggestions\",\n    menu8: \"Common form\",\n    insuranceQuery: {\n      InsurantNumber: \"Insurant number\",\n      Insurant: \"Insurant\",\n      InsurantName: \"Insurant name\",\n      InsurantAmount: \"Insurant amount\",\n      effectiveDate: \"Effective date\",\n      period: \"Guarantee period\",\n      t2Title: \"Guarantee information\",\n      t2InsurantClassify: \"Name of insurance\",\n      t2InsurantAmount: \"Insured amount\",\n      t3Title: \"Customer information\",\n      t3InsurantNameCn: \"Name of applicant (Cn)\",\n      t3InsurantNameEn: \"Name of applicant (En)\",\n      t3InsurantIdNumber: \"ID Number\",\n      t3InsurantContactAddress: \"Contact address\",\n      t3InsurantAddress: \"Address\",\n      t3InsurantMobile: \"mobile\",\n      t3InsurantEmail: \"email\",\n      t3InsuredNameCn: \"Name of insured (Cn)\",\n      t3InsuredNameEn: \"Name of insured (En)\",\n      t3InsuredBirthday: \"Birthday\",\n      t3InsuredIdNumber: \"ID Number\",\n      t4Title: \"Beneficiary information\",\n      t4NameCn: \"Name (Cn)\",\n      t4NameEn: \"Name (En)\",\n      t4Relation: \"與受保人關係\",\n      t4Allocation: \"Distribution ratio\",\n      t5Title: \"Payment information\",\n      t5PaymentPeriod: \"Payment period\",\n      t5PaymentMethod: \"Payment method\",\n      t5PaymentCurrency: \"Payment currency\",\n      t5CurrentPremium: \"Current premium\",\n      t5PaymentBank: \"Payment bank\",\n      t5PaymentAccount: \"Payment account\",\n      t6Title: \"Payment record\",\n      t6PaymentPeriod: \"Payment period\",\n      t6PaymentMethod: \"Payment method\",\n      t6ClosingDate: \"Closing date\",\n      t6PaymentAmount: \"Payment amount\"\n    },\n    reservation: {\n      submitBtn: '確認',\n      contactTypes: ['電話'],\n      reservationTypes: ['投保咨詢', '代辦保單變更'],\n      errorTips: {\n        e1: \"請填寫該項內容\",\n        e2: \"請填寫正確的聯繫方式\"\n      }\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvZW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvZW4uanM/MWUwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAnTG9naW4nLFxuXHRcdFVzZXJuYW1lOiAnVXNlcm5hbWUnLFxuXHRcdFBhc3N3b3JkOiAnUGFzc3dvcmQnLFxuXHRcdENhcHRjaGE6ICdDYXB0Y2hhJyxcblx0XHRMYW5ndWFnZTogJ0xhbmd1YWdlJyxcblx0XHR6aDogJ0NoaW5lc2UnLFxuXHRcdGVuOiAnRW5nbGlzaCdcblx0fSxcblx0Z2xiYWxUaXBzIDoge1xuXHRcdHNlc3Npb25Mb3N0IDogXCLkuLrkuobmm7Tlpb3nmoTkvZPpqozvvIzpnIDopoHmgqjnmbvlvZXlkI7lho3ov5vooYzmraTmk43kvZxcIlxuXHR9LFxuXHRuYXY6IHtcblx0XHRsb2dpbkRhdGE6IHtcblx0XHRcdG5hbWU6IFwibG9naW5cIixcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcInJlZ2lzdGVyXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3JlZ2lzdGVyXCIsXG5cdFx0XHRcdHR5cGU6IFwibm9BdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcIlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwibG9naW5cIixcblx0XHRcdFx0cGF0aDogXCIvbG9naW5cIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kaWZ5IHBhc3N3b3JkXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Bhc3N3b3JkL3Jlc2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiYXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb2dvdXRcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcImxvZ291dFwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0bmF2TGlzdDogW3tcblx0XHRcdG5hbWU6IFwiUHJvZHVjdCBkZXNjcmlwdGlvblwiLFxuXHRcdFx0cGF0aDogXCIvcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwiQ3VzdG9tZXIgc2VydmljZVwiLFxuXHRcdFx0cGF0aDogXCIvY3VzdG9tL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwiQ29udGFjdCB1c1wiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0xXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUGF5IHByZW1pdW1cIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlF1ZXJ5IHBvbGljeVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0zXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW00MVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW01XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUmVzZXJ2YXRpb24gc2VydmljZVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW02XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU3VnZ2VzdGlvbnNcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tN1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkNvbW1vbiBmb3JtXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bThcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwiTmV3c1wiLFxuXHRcdFx0cGF0aDogXCIvbmV3cy9saXN0XCIsXG5cdFx0XHRsaXN0OiBbXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJBYm91dFwiLFxuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwiQ29tcGFueVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9wcm9maWxlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTGVhZGVyc1wiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRmb290ZXI6IHtcblx0XHRoa1Bob25lOiBcIkhLIFRlbFwiLFxuXHRcdGNuUGhvbmU6IFwiQ04gVGVsXCIsXG5cdFx0YWJvdXRVczogXCJBYm91dCB1c1wiLFxuXHRcdGNvbXBhbnlJbnRyb2R1Y3Rpb246IFwiQ29tcGFueSBpbnRyb2R1Y3Rpb25cIixcblx0XHRuZXdzOiBcIk5ld3NcIixcblx0XHRqb2luVXM6IFwiSm9pbiB1c1wiLFxuXHRcdGhlbHBDZW50ZXI6IFwiSGVscCBjZW50ZXJcIixcblx0XHRwcml2YWN5OiBcIlByaXZhY3lcIixcblx0XHR0ZXJtczogXCJUZXJtc1wiLFxuXHRcdG1hcDogXCJNYXBcIixcblx0XHRjb250YWN0VXM6IFwiQ29udGFjdCB1c1wiLFxuXHRcdGNvbnRhY3RJbmZvcm1hdGlvbjogXCJDb250YWN0IEluZm9ybWF0aW9uXCIsXG5cdFx0c2VydmljZTogXCJTZXJ2aWNlXCIsXG5cdFx0cXJjb2RlOiBcIk9mZmljaWFsIEFjY291bnRzXCIsXG5cdFx0Y29weXJpZ2h0OiBcIueJiOasiuaJgOaciSDCqSDkuK3lnIvlubPlronkv53pmqrvvIjpm4blnJjvvInogqHku73mnInpmZDlhazlj7jmnKrntpPoqLHlj6/kuI3lvpflvqnliLbjgIHovYnovInmiJbmkZjnt6jvvIzpgZXogIXlv4XnqbYhXCJcblx0fSxcblx0bG9naW46IHtcblx0XHR0aXRsZTogXCLlubPlronkuIDos6zpgJpcIixcblx0XHRsb2dpblR5cGUxOiBcIui0puWvhueZu+W9lVwiLFxuXHRcdGxvZ2luVHlwZTI6IFwi5YuV5oWL5a+G56K855m75b2VXCIsXG5cdFx0YWNjb3VudDogXCLos6zomZ9cIixcblx0XHRhY2NvdW50UGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6K2J5Lu26JmfL+S4gOi0pumAmueUqOaIt+WQjS/miYvmnLrlj7dcIixcblx0XHRwYXNzd29yZDogXCLlr4bnorxcIixcblx0XHRwYXNzd29yZFBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHZlcmlmeVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpempl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdGxvZ2luOiBcIueZu+WFpVwiLFxuXHRcdHJlZ2lzdGVyOiBcIuiou+WGilwiLFxuXHRcdGZvcmdldDogXCLlv5joqJjlr4bnorxcIixcblx0XHRtb2JpbGU6IFwi5omL5qmf6JmfXCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfXCIsXG5cdFx0dmVyaWZ5Q29kZTogXCLpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6amX6K2J56K8XCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLnjbLlj5bpqZforYnnorxcIixcblx0XHR0aXBzOiB7XG5cdFx0XHRlMTogXCLor7fovpPlhaXotKblj7fkv6Hmga9cIixcblx0XHRcdGUyOiBcIuivt+i+k+WFpeWvhueggVwiLFxuXHRcdFx0ZTM6IFwi6K+36L6T5YWl5Zu+5YOP6aqM6K+B56CBXCIsXG5cdFx0XHRlNDogXCLor7flkIzmhI/jgIrlubPlronkuIDotKbpgJrkvJrlkZjmnI3liqHljY/orq7jgItcIixcblx0XHRcdGU1OiBcIui0puWPty/lr4bnoIHkuI3mraPnoa5cIixcblx0XHRcdG9lMDogXCLor7fovpPlhaXmraPnoa7nmoTmiYvmnLrlj7dcIixcblx0XHRcdG9lMTogXCLor7flhYjojrflj5bnn63kv6Hpqozor4HnoIFcIixcblx0XHRcdG9lMjogXCLor7fovpPlhaXlm77niYfpqozor4HnoIFcIixcblx0XHRcdG9lMzogXCLor7fovpPlhaXnn63kv6Hpqozor4HnoIFcIixcblx0XHRcdG9lNDogXCLnn63kv6Hpqozor4HnoIHkuI3mraPnoa5cIixcblx0XHR9XG5cdH0sXG5cdHNlc3Npb246IHtcblx0XHRzaWRFeHBpcmU6IFwi6ZW35pmC6ZaT5pyq5pON5L2c77yM54K65LqG5oKo6LOs5oi255qE5a6J5YWo77yM6KuL55m76YyE5b6M5YaN5pON5L2cXCIsXG5cdH0sXG5cdHJlZ2lzdGVyOiB7XG5cdFx0bW9iaWxlT3B0aW9uczogW3tcblx0XHRcdHR5cGU6IFwiaGtcIixcblx0XHRcdG5hbWU6IFwi6aaZ5riv5omL5qmf6JmfXCIsXG5cdFx0XHRwbGFjZUhvbGRlcjogXCLoq4vovLjlhaU45L2N5omL5qmf6Jmf56K8XCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODUyXCJcblx0XHR9LCB7XG5cdFx0XHR0eXBlOiBcInpoXCIsXG5cdFx0XHRuYW1lOiBcIuWkp+mZuOaJi+apn+iZn1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6KuL6Ly45YWlMTHkvY3miYvmqZ/omZ/norxcIixcblx0XHRcdGFyZWFDb2RlOiBcIis4NlwiXG5cdFx0fV0sXG5cdFx0Y291dFRpcHM6IFwie3NlY29uZH3np5Llvozph43mlrDnjbLlj5ZcIixcblx0XHR0aXRsZTogXCLmraHov47oqLvlhopcIixcblx0XHR0aXRsZTI6IFwi6KuL6Kit572u5paw55qE5a+G56K8XCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi6K+36L6T5YWlOOS9jeaJi+acuuWPt+eggVwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLoq4vovLjlhaXpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIueNsuWPlumpl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdHJlZ2lzdGVyOiBcIum7nuaTiuiou+WGilwiLFxuXHRcdG5ld1Bhc3N3b3JkOiBcIuaWsOWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6Ly45YWl55m76YyE5a+G56K8XCIsXG5cdFx0bmV3UGFzc3dvcmRTdXJlOiBcIueiuuiqjeWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZVBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHN1cmU6IFwi56K66KqNXCIsXG5cdFx0dGlwczoge1xuXHRcdFx0ZTE6IFwi5omL5qmf6Jmf5LiN5q2j56K677yM6KuL6Ly45YWl5q2j56K655qE5omL5qmf6JmfXCIsXG5cdFx0XHRlMjogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGUzOiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdFx0ZTQ6IFwi6KuL5YWI542y5Y+W55+t5L+h6amX6K2J56K8XCIsXG5cdFx0XHRlNTogXCLmiYvmqZ/omZ/lt7LntpPooqvoqLvlhorvvIzoq4vkvb/nlKjlhbbku5bmiYvmqZ/omZ/oqLvlhormiJbnm7TmjqXnmbvpjIRcIixcblx0XHRcdGU2OiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0ZTc6IFwi5a+G56K86ZW35bqm5LiN6IO95bCR5pa8OOS9jVwiLFxuXHRcdFx0ZTg6IFwi5a+G56K85Lit5b+F6aCI5YyF5ZCr5pW45a2X44CB5a2X56ym5Lul5Y+K54m55q6K6Jmf56K8XCIsXG5cdFx0XHRlOTogXCLlhanmrKHlr4bnorzkuI3kuIDoh7TvvIzoq4vnorroqo3lvozph43mlrDovLjlhaVcIixcblx0XHRcdGUxMDogXCLpqZforYnnorzpgY7mnJ/vvIzoq4vph43mlrDnlLPoq4vpqZforYnnorxcIixcblx0XHRcdGUxMTogXCLoqLvlhorlpLHmlZfvvIzoq4voga/nuavlt6XkvZzkurrlk6FcIixcblx0XHRcdGUxMjogXCLoqLvlhormiJDlip9cIixcblx0XHR9XG5cdH0sXG5cdHBhc3N3b3JkQ2hlY2s6IHtcblx0XHRlcnJvcjE6IFwi5a+G56K86ZW35bqm5LiN5bCR5pa8OOS9jVwiLFxuXHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHRlcnJvcjM6IFwi5Lik5qyh5a+G56CB5LiN5LiA6Ie077yM6K+356Gu6K6k5ZCO6YeN5paw6L6T5YWlXCIsXG5cdFx0ZXJyb3I0OiBcIuWvhueivOS/ruaUueWkseaVl++8jOiri+eojeW+jOWGjeippu+8jOaIluaLqOaJk+WuouacjeeUteivnTk1NTEx6Kej5YazXCIsXG5cdFx0ZXJyb3I1OiBcIuiIiuWvhueivOS4jeato+eiuu+8jOiri+mHjeaWsOi8uOWFpVwiLFxuXHRcdHN1Y2Nlc3M6IFwi5a+G56CB5L+u5pS55oiQ5YqfXCJcblx0fSxcblx0cGFzc3dvcmRSZXNldDoge1xuXHRcdG9sZFB3ZDogXCLml6flr4bnoIFcIixcblx0XHRvbGRQd2RQbGFjZWhvbGRlOiBcIuiri+i8uOWFpeiIiuWvhueivFwiLFxuXHRcdGNpZEV4cGlyZTogXCLplbfmmYLplpPmnKrmk43kvZzvvIzngrrkuobmgqjos6zmiLbnmoTlronlhajvvIzoq4vph43mlrDplovlp4tcIixcblx0XHR0eXBlMToge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLnlKjmiLbovLjlhaXkv6Hmga9cIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfL+S4gOizrOmAmueUqOaItuWQjVwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3I6IFwi5oKo55qE5omL5qmf6Jmf5oiW6K2J5Lu26Jmf6Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5ZCO6YeN5paw6Ly45YWlXCIsXG5cdFx0fSxcblx0XHR0eXBlMjoge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLmiYvmqZ/nn63kv6HpqZforYnnorxcIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6amX6K2J56K8XCIsXG5cdFx0XHRzdWJtaXQ6IFwi56K66KqNXCIsXG5cdFx0XHRlcnJvcjE6IFwi55+t5L+h6amX6K2J56K86Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0XHRlcnJvcjI6IFwi55+t5L+h6amX6K2J56K85bey57aT6YGO5pyf77yM6KuL6YeN5paw542y5Y+W6amX6K2J56K8XCIsXG5cdFx0XHRlcnJvcjM6IFwi55+t5L+h6aqM6K+B56CB5Y+R5pS+5pe26Ze05bCR5LqOMeWIhumSn++8jOivt+eojeWQjuWGjeivlVwiLFxuXHRcdH0sXG5cdFx0dHlwZTM6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueivOaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5qC45bCN6Lqr5Lu96K2J5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH0sXG5cdFx0dHlwZTQ6IHtcblx0XHRcdHRpdGxlOiBcIuiri+ioree9ruaWsOeahOWvhueivFwiLFxuXHRcdFx0dDE6IFwi5paw5a+G56K8XCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0dDI6IFwi56K66KqN5a+G56K8XCIsXG5cdFx0XHR0MlBsYWNlaG9sZGVyOiBcIuiri+mHjeaWsOi8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3IxOiBcIuWvhueivOmVt+W6puS4jeWwkeaWvDjkvY1cIixcblx0XHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHR9XG5cdH0sXG5cdGluZm9tYXRpb25JbXByb3ZlOiB7XG5cdFx0dGl0bGU6IFwi6KuL5a6M5ZaE5oKo55qE5L+h5oGvXCIsXG5cdFx0dDE6IFwi5aeT5ZCNXCIsXG5cdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0MjogXCLmgKfliKVcIixcblx0XHR0MlBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQzOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHQzUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDQ6IFwi6K2J5Lu26aGe5Z6LXCIsXG5cdFx0dDRQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NTogXCLorYnku7bomZ/norxcIixcblx0XHR0NVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHN1Ym1pdDogXCLnorroqo1cIixcblx0XHRjYW5jZWw6IFwi6Lez6YGOXCIsXG5cdFx0Y2FuZGlkYXRlczoge1xuXHRcdFx0c2V4OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUt1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJNXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlpbNcIixcblx0XHRcdFx0dmFsdWU6IFwiRlwiXG5cdFx0XHR9XSxcblx0XHRcdGlkVHlwZTogW3tcblx0XHRcdFx0bmFtZTogXCLouqvku73orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiMVwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi6K2354WnXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIui7jeWumOitieaIluWjq+WFteitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIzXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPpgJrooYzorYkv5Zue6YSJ6K2J5oiW5Y+w6IOe6K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjZcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWkluWci+S6uuawuOS5heWxheeVmei6q+S7veitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIwXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPlj7DlsYXmsJHlsYXkvY/orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiVlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5Y+w54Gj5bGF5rCR5bGF5L2P6K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIldcIlxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdHN1Y2Nlc3NNc2cgOiBcIuabtOaWsOaIkOWKn1wiLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6KuL5aGr5a+r5aeT5ZCN5L+h5oGvXCIsXG5cdFx0XHRlMjogXCLoq4vpgbjmk4fmgKfliKVcIixcblx0XHRcdGUzOiBcIuiri+mBuOaTh+eUn+aXpVwiLFxuXHRcdFx0ZTQ6IFwi6KuL6YG45pOH6K2J5Lu26aGe5Z6LXCIsXG5cdFx0XHRlNTogXCLoq4vloavlr6vorYnku7bomZ/norxcIixcblx0XHRcdGU2OiBcIuaCqOWhq+Wvq+eahOitieS7tuiZn+eivOacieiqpFwiLFxuXHRcdFx0ZTc6IFwi5oKo5aGr5a+r55qE5L+h5oGv5pyJ6Kqk77yM6KuL5qC45a+m5b6M6YeN5paw5o+Q5LqkXCIsXG5cdFx0fVxuXHR9LFxuXHRpbmRleDoge1xuXHRcdG5ld3M6IFwi5paw6IGe6LOH6KiKXCIsXG5cdFx0bmV3TW9yZTogXCLmn6XnnIvmm7TlpJpcIixcblx0XHRyZWNvbW1lbmQ6IHtcblx0XHRcdGl0ZW0xOiB7XG5cdFx0XHRcdGJ0bjogXCLkuobop6Pmm7TlpJrnlKLlk4FcIixcblx0XHRcdFx0dDE6IFwi54K66Ieq5bex5ZKM5a625Lq65bCL5om+5aO55Lu95L+d6ZqcXCIsXG5cdFx0XHR9LFxuXHRcdFx0aXRlbTI6IHtcblx0XHRcdFx0YnRuOiBcIueri+WNs+mgkOe0hFwiLFxuXHRcdFx0XHR0MTogXCLlnKjnt5rpoJDntIQg5bCI5qWt5pyN5YuZXCIsXG5cdFx0XHR9LFxuXHRcdFx0aXRlbTM6IHtcblx0XHRcdFx0YnRuOiBcIuWuouaIt+acjeWKoVwiLFxuXHRcdFx0XHR0MTogXCLlsIjmpa3lrqLmnI3ngrrlprPmnI3li5lcIixcblx0XHRcdFx0dDI6IFwi5oOz5LqG6Kej5pu05aSa77yM5Y+v6Ie06Zu7XCIsXG5cdFx0XHRcdHQzOiBcIjk1NTExXCIsXG5cdFx0XHRcdHQ0OiBcIuiBr+e1oeaIkeWAke+8jOaIlumAsuWFpVwiLFxuXHRcdFx0fVxuXHRcdH0sXG5cdH0sXG5cdGNvbXBsYWludEFjY2VwdGFuY2U6IHtcblx0XHRuYW1lOiBcIuWnk+WQjVwiLFxuXHRcdG5hbWVQbGFjZWhvbGRlcjogXCLlp5PlkI1cIixcblx0XHRjb250YWN0VHlwZTogXCLoga/ntaHmlrnlvI9cIixcblx0XHRlbWFpbDogXCLpm7vpg7XlnLDlnYBcIixcblx0XHRxdWVzdGlvbjogXCLllY/poYzmiJbmhI/opotcIixcblx0XHRxdWVzdGlvblBsYWNlSG9sZGVyOiBcIu+8iOWtl+aVuOS4jei2hemBjjUwMOWtl++8iVwiLFxuXHRcdG9yZGVyTm86IFwi5L+d5Zau57eo6JmfXCIsXG5cdFx0b3JkZXJOb1BsYWNlSG9sZGVyOiBcIuWmguaCqOeCuuW5s+WuieWuouaItu+8jOiri+aPkOS+m+S/neWWrue3qOiZn1wiLFxuXHRcdGNvbnRhY3RUaW1lOiBcIuacn+acm+iBr+e1oeaZgumWk1wiLFxuXHRcdG5vdGljZTE6IFwi5pys6KGo5qC85omA5pS26ZuG55qE5YCL5Lq66LOH5paZ5qC55pOa44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN6JmV55CG5Y+K5Y+q5pyD6KKr55So5L2c5pa86IGv57WhIOmWo+S4i+S5i+eUqOOAgueEtuiAjOaJgOaUtumbhueahOWAi+S6uuizh+aWmeacque2k+aCqOaYjueiuuaOiOasiuWwh+S4jeacg+i9ieenu+iHs+OAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeWIl+aYjuS7peWkluS5i+esrOS4ieiAheapn+ani+OAguaCqOWPr+mBuOaTh+S4jeWQkeaIkeWAkeaPkOS+m+aJgOmcgOeahOWAi+S6uuizh+aWme+8jOaDn+mAmeaoo+WPr+iDveWwjuiHtOaIkeWAkeS4jeiDveiBr+e1oeaCqOOAguaCqOS6puWPr+agueaTmuOAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeS5i+asiuWIqeafpemWseWPiuabtOato+WAi+S6uuizh+aWmeOAglwiLFxuXHRcdG5vdGljZTI6IFwi5pys5Lq654++56K66KqN5piO55m95Lim5ZCM5oSP5pys5Lq655qE5YCL5Lq66LOH5paZ5qC55pOa5Lit6YqA5Lq65aO95YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO5L2c5Lul5LiK6L+w55So6YCU44CCXCIsXG5cdFx0Y29udGFjdFR5cGVzIDogWyfpm7voqbEnLCfpm7vpg7UnXSxcblx0XHRlcnJvclRpcHMgOiB7XG5cdFx0XHRlMSA6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRlMiA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr5pa55byPXCJcblx0XHR9LFxuXHR9LFxuXHRyZXNlcnZhdGlvbjoge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBr+e1oeaWueW8j1wiLFxuXHRcdGNvbnRhY3Q6IFwi6IGv57Wh55S16K+dXCIsXG5cdFx0Y29udGFjdFBsYWNlaG9sZGVyOiBcIummmea4r+iZn+eivC/lhaflnLDomZ/norxcIixcblx0XHRyZXNlcnZhdGlvblR5cGU6IFwi6aCQ57SE6aGe5Z6LXCIsXG5cdFx0cmVzZXJ2YXRpb25SZW1hcms6IFwi6aCQ57SE6Kqq5piOXCIsXG5cdFx0cmVzZXJ2YXRpb25SZW1hcmtQbGFjZWhvbGRlcjogXCLoq4vnsKHllq7oqqrmmI7mgqjmg7PopoHlkqjoqaLnmoTnlKLlk4HmiJbmpa3li5lcIixcblx0XHRoa0NsaWVudDogXCLmmK/lkKblubPlronpppnmuK/lrqLmiLZcIixcblx0XHR5ZXM6IFwi5pivXCIsXG5cdFx0bm86IFwi5ZCmXCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGU57uc5pe26Ze0XCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmoLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3lpITnkIblj4rlj6rkvJrooqvnlKjkvZzkuo7ogZTnu5wg6ZiB5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5Liq5Lq66LWE5paZ5pyq57uP5oKo5piO56Gu5o6I5p2D5bCG5LiN5Lya6L2s56e76Iez44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5py65p6E44CC5oKo5Y+v6YCJ5oup5LiN5ZCR5oiR5Lus5o+Q5L6b5omA6ZyA55qE5Liq5Lq66LWE5paZ77yM5oOf6L+Z5qC35Y+v6IO95a+86Ie05oiR5Lus5LiN6IO96IGU57uc5oKo44CC5oKo5Lqm5Y+v5qC55o2u44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5LmL5p2D5Yip5p+l6ZiF5Y+K5pu05q2j5Liq5Lq66LWE5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnjrDnoa7orqTmmI7nmb3lubblkIzmhI/mnKzkurrnmoTkuKrkurrotYTmlpnmoLnmja7kuK3pk7bkurrlr7/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0fSxcblx0cGF5bWVudFR5cGU6IHtcblx0XHRtZW51MTogXCLopqroh6jlrqLmnI3kuK3lv4Pku5jmrL5cIixcblx0XHRtZW51MjogXCLnvZHpk7bku5jmrL5cIixcblx0XHRtZW51MzogXCLnlLXmsYfku5jmrL5cIixcblx0XHRtZW51NDogXCLmn5zlkZjmnLrku5jmrL5cIixcblx0XHRtZW51NTogXCLjgIznvLTotLnngbXjgI3ku5jmrL5cIixcblx0XHRtZW51NjogXCLpppnmuK/pgq7mlL/lsYBcIixcblx0fSxcblx0cHJvZHVjdDoge1xuXHRcdGJ0blBvc2l0aW9uOiBcIkJvb2tpbmcgc2VydmljZVwiLFxuXHRcdGljb25Qcm9ibGVtOiBcIkNvbW1vbiBwcm9ibGVtXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwiSW5zdXJhbmNlIHByb2Nlc3NcIixcblx0XHRpY29uUHJvZHVjdDogXCJQcm9kdWN0IGRldGFpbHNcIlxuXHR9LFxuXHRjdXN0b21Qcm9kdWN0OiB7XG5cdFx0bWVudTE6IFwiQ29udGFjdCB1c1wiLFxuXHRcdG1lbnUyOiBcIlBheSBwcmVtaXVtXCIsXG5cdFx0bWVudTM6IFwiUXVlcnkgcG9saWN5XCIsXG5cdFx0bWVudTQ6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdG1lbnU1OiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdG1lbnU2OiBcIlJlc2VydmF0aW9uIHNlcnZpY2VcIixcblx0XHRtZW51NzogXCJTdWdnZXN0aW9uc1wiLFxuXHRcdG1lbnU4OiBcIkNvbW1vbiBmb3JtXCIsXG5cdH0sXG5cdGNvbW1vbkZvcm06IHtcblx0XHRoZWFkMTogXCLooajmoLzpoZ7lnotcIixcblx0XHRoZWFkMjogXCLooajmoLzlkI3nqLFcIixcblx0XHRoZWFkMzogXCLkvb/nlKjoqqrmmI5cIixcblx0XHRoZWFkNDogXCLpmYTku7ZcIixcblx0XHRkb3dubG9hZDogXCLkuIvovInmlofmqpRcIixcblx0XHRmb3JtOiBbe1xuXHRcdFx0dHlwZTogXCLnubPosrvpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi44CM6Zu75a2Q5YWl6LOs5pyN5YuZ44CN5Y+K6YqA6KGM5oi25Y+jPGJyPuebtOaOpeS7mOasvuaOiOasiueUs+iri1wiLFxuXHRcdFx0XHRkZXNjOiBcIueUs+iri+ioreeri+OAjCDpm7vlrZDlhaXos6zmnI3li5njgI0g5Y+K6YqA6KGM5oi25Y+jPGJyPuebtOaOpeS7mOasvuaOiOasiuaZgumgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+h55So5Y2h5oi25Y+j55u05o6l5LuY5qy+5o6I5qyK5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi55Sz6KuL5L+h55So5Y2h5oi25Y+j55u05o6l5LuY5qy+5o6I5qyK5pmC6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLkv53llq7orormm7TpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6Kej6Zmk55Sz6KuL5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi6YCA5L+d44CB54y26LGr5pyf6YCA5L+d5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5L+d5Zau6LK45qy+6YKE5qy+6aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5L+d5Zau6LK45qy+44CB6YKE5qy+5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5L+d6Zqq5ZCI5ZCM6KiI5YqD6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Yqg5L+d44CB5rib5L+d44CB5paw5aKe6ZmE6Zqq44CB5b6p5pWI562J5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5a6i5oi25L+h5oGv6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Z+65pys5L+h5oGv6K6K5pu05qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5a6i5oi25qyK55uK6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Lqk6LK75pa55byP44CB6Ieq5aKK6YG45pOH5qyK6K6K5pu044CB6KOc55m8562J5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmjojmrIrlp5TmiZjmm7hcIixcblx0XHRcdFx0ZGVzYzogXCLlp5TmiZjku5bkurrku6PovqbmmYLpoIjmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueoheaUtuiBsuaYjlwiLFxuXHRcdFx0XHRkZXNjOiBcIkNSU+imgeaxglwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5YGl5bq35ZGK55+lXCIsXG5cdFx0XHRcdGRlc2M6IFwi6aCI5LqM5qyh5qC45L+d55qE5qWt5YuZ6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLnkIbos6DpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LOg55Sz6KuL5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi57SZ6LOq55Sz6KuL55qE5oeJ5YKZ5paH5Lu2XCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlR3VpZGU6IHtcblx0XHRub3RpY2U6IFwi5aaC6ZyA5YGa5YW25LuW5L+d5Zau6K6K5pu06IGv57mr5a6i5pyN77yI6IGv57mr5a6i5pyN6LaF6Y+I5o6l6Lez6L2J5YWs5Y+46IGv57mr5L+h5oGv6aCB77yJXCIsXG5cdFx0aGVhZDE6IFwi6aCF55uuXCIsXG5cdFx0aGVhZDI6IFwi5YW36auU5YWn5a65XCIsXG5cdFx0aGVhZDM6IFwi55Sz6KuL6LOH5qC85Lq6XCIsXG5cdFx0aGVhZDQ6IFwi5Y+X55CG5pmC6ZaTXCIsXG5cdFx0aGVhZDU6IFwi5oeJ5YKZ5p2Q5paZXCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6LyJ5paH5qqUXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHByb2plY3Q6IFwi6YCA5L+dXCIsXG5cdFx0XHRjb250ZW50OiBcIuWcqOeMtuixq+acn+W+jOino+mZpOWQiOWQjO+8jOWFrOWPuOWwh+mAgOmChOS/neWWruePvumHkeWDueWAvOaIluacqua7v+acn+WHiOS/neiyu+OAgu+8iOW+heeUouWTgeeyvueul+eiuuiqje+8iVwiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53llq7mlYjlipvntYLmraLliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmqrllq5cIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veitieS7tlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlrZjmipjpk7booYzljaHnm7jlhbNcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIueMtuixq+acn+mAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnjLbosavmnJ/lhafmj5Dlh7rop6PpmaTlkIjlkIzvvIzlhazlj7jmnIPnhKHmga/pgIDpgoTlhajpg6jkv53osrtcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi54y26LGr5pyf57WQ5p2f5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIummluacn+S/neiyu+eZvOelqFwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5a6i5oi26LOH5paZ6K6K5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00MlwiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLmipXkv53kurrjgIHlj5fkv53kurrjgIHlj5fnm4rkurrnmoTlgIvkurrkv6Hmga/orormm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuW/heimgeeahOitieaYjuadkOaWmVwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi6IGv57O75pa55byP6K6K5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00M1wiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLlnLDlnYDjgIHpm7voqbHnrYnkv6Hmga/nmoTorormm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veitieS7tlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5Lqk6LK75pa55byP6K6K5pu0XCIsXG5cdFx0XHRjb250ZW50OiBcIuabtOaUueS/neWWrueahOe6jOacn+S6pOiyu+aWueW8j+aIluS6pOiyu+izrOiZn1wiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53llq7kuqTosrvmnJ/mu7/liY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLnlLPoq4vmm7hcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VDb250YWN0OiB7XG5cdFx0cGhvbmU6IFwi6IGv57mr6Zu76KmxXCIsXG5cdFx0YWRkcmVzczogXCLoga/nuavlnLDlnYBcIixcblx0XHRlbWFpbDogXCJFLU1haWxcIixcblx0XHRjaGVja1RpcHM6IFwi5pys5Lq65LiN5ZCM5oSP5o6l5pS25a6j5YKz5L+h5oGvXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjeS/ruaUuVwiLFxuXHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdGUxIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavpm7voqbFcIixcblx0XHRcdGUyIDogXCLoq4vloavlr6voga/nuavlnLDlnYBcIixcblx0XHRcdGUzIDogXCLoq4vloavlr6vmraPnorrnmoRFLU1haWzlnLDlnYBcIlxuXHRcdH1cblx0fSxcblx0cG9saWN5Q2hhbmdlSW5mb3JtYXRpb246IHtcblx0XHRoa0NsaWVudDogXCLmmK/lkKblubPlronpppnmuK/lrqLmiLZcIixcblx0XHR5ZXM6IFwi5pivXCIsXG5cdFx0bm86IFwi5ZCmXCIsXG5cdFx0b2JqOiBcIuiuiuabtOWwjeixoVwiLFxuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0c2V4OiBcIuaAp+WIq1wiLFxuXHRcdGJpcnRoOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHR5cGU6IFwi6K2J5Lu26aGe5Z6LXCIsXG5cdFx0Tk86IFwi6K2J5Lu26Jmf56K8XCIsXG5cdFx0dmFsaWRpdHlQZXJpb2Q6IFwi6K2J5Lu25pyJ5pWI5pyfXCIsXG5cdFx0bmF0aW9uYWxpdHk6IFwi5ZyL57GNXCIsXG5cdFx0ZW1wbG95ZXI6IFwi5bel5L2c5Zau5L2NXCIsXG5cdFx0bWFyaXRhbFN0YXR1czogXCLlqZrlp7vni4Dms4FcIixcblx0XHRzdWJtaXQ6IFwi56K66KqN5L+u5pS5XCIsXG5cdFx0dXBsb2FkOiBcIumZhOS7tuS4iuWCs1wiLFxuXHRcdG1vZGlmeVRpcHMxOiBcIuWmgumcgOS/ruaUueiri1wiLFxuXHRcdG1vZGlmeVRpcHMyOiBcIuiBr+e5q+WuouacjVwiLFxuXHR9LFxuXHRjb250YWN0VXM6IHtcblx0XHRzZXJ2aWNlOiB7XG5cdFx0XHRjZW50ZXI6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ5Lit5b+DXCIsXG5cdFx0XHRcdGFkZHJlc3M6IFwi5Zyw5Z2A77ya6aaZ5riv5bCW5rKZ5Zi05riv5aiB5rC46YeR6J6N5aSn5qiTXCIsXG5cdFx0XHRcdHRpbWU6IFwi5pyN5YuZ5pmC6ZaT77ya5pif5pyf5aO56Iez5LqUOTowMC0xODowMFwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdGxpbmU6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ54ax57eaXCIsXG5cdFx0XHRcdGhrOiBcIummmea4r+iZn+eivO+8mig4NTIpMjk4MyA4ODY2XCIsXG5cdFx0XHRcdGNuOiBcIuWFp+WcsOiZn+eivO+8mig4Nik0MDA3OCA5NTUxMVwiLFxuXHRcdFx0XHR0aW1lOiBcIuacjeWLmeaZgumWk++8muaYn+acn+WjueiHs+S6lDk6MDAtMTg6MDBcIlxuXHRcdFx0fSxcblx0XHRcdG1haWw6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ6Zu76YO1XCIsXG5cdFx0XHRcdG1haWw6IFwiY3NAcGluZ2FuLmNvbS5oa1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRwdWxiaWM6IHtcblx0XHRcdHRpdGxlOiBcIuW+ruS/oeWFrOecvuiZn1wiLFxuXHRcdFx0bTE6IFwi55m76Zm444CM5b6u5L+h44CNQVBQ77yMIOaMieWPs+S4iuinkueahOOAjCvjgI3mjInpiJXkuKbpgbjmk4fjgIzmt7vliqDmnIvlj4vjgI3vvIzpgbjmk4fjgIzlhaznnL7omZ/jgI0g6Ly45YWl5Lim5pCc57Si44CM5bmz5a6J5Lq65aO96aaZ5riv44CNXCIsXG5cdFx0XHRtMjogXCLnmbvpmbjjgIzlvq7kv6HjgI1BUFDvvIwg5oyJ5Y+z5LiK6KeS55qE44CMK+OAjeaMiemIleS4pumBuOaTh+OAjOaOg+WjueaOg+OAjeaOg+aPj+S4i+aWueS6jOe2reeivO+8iOaUvue9ruS6jOe2reeivO+8iVwiXG5cdFx0fSxcblx0XHRxcmNvZGU6IHtcblx0XHRcdHRpdGxlOiBcIuWumOaWueWFrOecvuiZn1wiXG5cdFx0fVxuXHR9LFxuXHRjdXN0b21TZXJ2aWNlOiB7XG5cdFx0bmFtZTogXCJDdXN0b21lciBzZXJ2aWNlXCIsXG5cdFx0bWVudTE6IFwiQ29udGFjdCB1c1wiLFxuXHRcdG1lbnUyOiBcIlBheSBwcmVtaXVtXCIsXG5cdFx0bWVudTM6IFwiUXVlcnkgcG9saWN5XCIsXG5cdFx0bWVudTQ6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdG1lbnU0MTogXCLkv53llq7orormm7TmjIflvJVcIixcblx0XHRtZW51NDI6IFwi6IGv57O75pa55byP6K6K5pu0XCIsXG5cdFx0bWVudTQzOiBcIuWuouaItuizh+aWmeiuiuabtFwiLFxuXHRcdG1lbnU1OiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdG1lbnU2OiBcIlJlc2VydmF0aW9uIHNlcnZpY2VcIixcblx0XHRtZW51NzogXCJTdWdnZXN0aW9uc1wiLFxuXHRcdG1lbnU4OiBcIkNvbW1vbiBmb3JtXCIsXG5cdFx0aW5zdXJhbmNlUXVlcnk6IHtcblx0XHRcdEluc3VyYW50TnVtYmVyOiBcIkluc3VyYW50IG51bWJlclwiLFxuXHRcdFx0SW5zdXJhbnQ6IFwiSW5zdXJhbnRcIixcblx0XHRcdEluc3VyYW50TmFtZTogXCJJbnN1cmFudCBuYW1lXCIsXG5cdFx0XHRJbnN1cmFudEFtb3VudDogXCJJbnN1cmFudCBhbW91bnRcIixcblx0XHRcdGVmZmVjdGl2ZURhdGU6IFwiRWZmZWN0aXZlIGRhdGVcIixcblx0XHRcdHBlcmlvZDogXCJHdWFyYW50ZWUgcGVyaW9kXCIsXG5cblx0XHRcdHQyVGl0bGU6IFwiR3VhcmFudGVlIGluZm9ybWF0aW9uXCIsXG5cdFx0XHR0Mkluc3VyYW50Q2xhc3NpZnk6IFwiTmFtZSBvZiBpbnN1cmFuY2VcIixcblx0XHRcdHQySW5zdXJhbnRBbW91bnQ6IFwiSW5zdXJlZCBhbW91bnRcIixcblxuXHRcdFx0dDNUaXRsZTogXCJDdXN0b21lciBpbmZvcm1hdGlvblwiLFxuXHRcdFx0dDNJbnN1cmFudE5hbWVDbjogXCJOYW1lIG9mIGFwcGxpY2FudCAoQ24pXCIsXG5cdFx0XHR0M0luc3VyYW50TmFtZUVuOiBcIk5hbWUgb2YgYXBwbGljYW50IChFbilcIixcblx0XHRcdHQzSW5zdXJhbnRJZE51bWJlcjogXCJJRCBOdW1iZXJcIixcblx0XHRcdHQzSW5zdXJhbnRDb250YWN0QWRkcmVzczogXCJDb250YWN0IGFkZHJlc3NcIixcblx0XHRcdHQzSW5zdXJhbnRBZGRyZXNzOiBcIkFkZHJlc3NcIixcblx0XHRcdHQzSW5zdXJhbnRNb2JpbGU6IFwibW9iaWxlXCIsXG5cdFx0XHR0M0luc3VyYW50RW1haWw6IFwiZW1haWxcIixcblx0XHRcdHQzSW5zdXJlZE5hbWVDbjogXCJOYW1lIG9mIGluc3VyZWQgKENuKVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUVuOiBcIk5hbWUgb2YgaW5zdXJlZCAoRW4pXCIsXG5cdFx0XHR0M0luc3VyZWRCaXJ0aGRheTogXCJCaXJ0aGRheVwiLFxuXHRcdFx0dDNJbnN1cmVkSWROdW1iZXI6IFwiSUQgTnVtYmVyXCIsXG5cblx0XHRcdHQ0VGl0bGU6IFwiQmVuZWZpY2lhcnkgaW5mb3JtYXRpb25cIixcblx0XHRcdHQ0TmFtZUNuOiBcIk5hbWUgKENuKVwiLFxuXHRcdFx0dDROYW1lRW46IFwiTmFtZSAoRW4pXCIsXG5cdFx0XHR0NFJlbGF0aW9uOiBcIuiIh+WPl+S/neS6uumXnOS/glwiLFxuXHRcdFx0dDRBbGxvY2F0aW9uOiBcIkRpc3RyaWJ1dGlvbiByYXRpb1wiLFxuXG5cdFx0XHR0NVRpdGxlOiBcIlBheW1lbnQgaW5mb3JtYXRpb25cIixcblx0XHRcdHQ1UGF5bWVudFBlcmlvZDogXCJQYXltZW50IHBlcmlvZFwiLFxuXHRcdFx0dDVQYXltZW50TWV0aG9kOiBcIlBheW1lbnQgbWV0aG9kXCIsXG5cdFx0XHR0NVBheW1lbnRDdXJyZW5jeTogXCJQYXltZW50IGN1cnJlbmN5XCIsXG5cdFx0XHR0NUN1cnJlbnRQcmVtaXVtOiBcIkN1cnJlbnQgcHJlbWl1bVwiLFxuXHRcdFx0dDVQYXltZW50QmFuazogXCJQYXltZW50IGJhbmtcIixcblx0XHRcdHQ1UGF5bWVudEFjY291bnQ6IFwiUGF5bWVudCBhY2NvdW50XCIsXG5cblx0XHRcdHQ2VGl0bGU6IFwiUGF5bWVudCByZWNvcmRcIixcblx0XHRcdHQ2UGF5bWVudFBlcmlvZDogXCJQYXltZW50IHBlcmlvZFwiLFxuXHRcdFx0dDZQYXltZW50TWV0aG9kOiBcIlBheW1lbnQgbWV0aG9kXCIsXG5cdFx0XHR0NkNsb3NpbmdEYXRlOiBcIkNsb3NpbmcgZGF0ZVwiLFxuXHRcdFx0dDZQYXltZW50QW1vdW50OiBcIlBheW1lbnQgYW1vdW50XCIsXG5cdFx0fSxcblx0XHRyZXNlcnZhdGlvbjoge1xuXHRcdFx0c3VibWl0QnRuOiAn56K66KqNJyxcblx0XHRcdGNvbnRhY3RUeXBlcyA6IFsn6Zu76KmxJ10sXG5cdFx0XHRyZXNlcnZhdGlvblR5cGVzOiBbJ+aKleS/neWSqOipoicsJ+S7o+i+puS/neWWruiuiuabtCddLFxuXHRcdFx0ZXJyb3JUaXBzIDoge1xuXHRcdFx0XHRlMSA6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRcdGUyIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavmlrnlvI9cIlxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBcEJBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUEvQkE7QUFzQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFQQTtBQTVFQTtBQTJGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBbkJBO0FBZ0NBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBMUJBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUExQkE7QUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQTFCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQTlDQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVRBO0FBSEE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFQQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBckNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBaEVBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQUlBO0FBREE7QUFmQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBSUE7QUFEQTtBQWxCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQVRBO0FBekZBO0FBeUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBWkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQXZCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUExREE7QUF0bUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/common/lang/en.js\n");

/***/ }),

/***/ "./src/common/lang/tc.js":
/*!*******************************!*\
  !*** ./src/common/lang/tc.js ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {\n  message: {\n    login: 'Login',\n    Username: 'Username',\n    Password: 'Password',\n    Captcha: 'Captcha',\n    Language: 'Language',\n    zh: 'Chinese',\n    en: 'English'\n  },\n  glbalTips: {\n    sessionLost: \"為了更好的體驗,需要您登錄後再進行此操作\"\n  },\n  nav: {\n    loginData: {\n      name: \"登入\",\n      path: \"\",\n      list: [{\n        name: \"註冊\",\n        path: \"/register\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"登入\",\n        path: \"/login\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"修改密碼\",\n        path: \"/password/reset\",\n        type: \"auth\",\n        value: \"\"\n      }, {\n        name: \"登出\",\n        path: \"\",\n        type: \"auth\",\n        value: \"logout\"\n      }]\n    },\n    navList: [{\n      name: \"產品介紹\",\n      path: \"/product\",\n      list: []\n    }, {\n      name: \"客戶服務\",\n      path: \"/custom/product\",\n      list: [{\n        name: \"聯系我們\",\n        path: \"/custom/service?q=m1\"\n      }, {\n        name: \"繳付保費\",\n        path: \"/custom/service?q=m2\"\n      }, {\n        name: \"保單查詢\",\n        path: \"/custom/service?q=m3\"\n      }, {\n        name: \"保單變更\",\n        path: \"/custom/service?q=m41\"\n      }, {\n        name: \"理賠申請\",\n        path: \"/custom/service?q=m5\"\n      }, {\n        name: \"預約服務\",\n        path: \"/custom/service?q=m6\"\n      }, {\n        name: \"投訴受理\",\n        path: \"/custom/service?q=m7\"\n      }, {\n        name: \"常用表格\",\n        path: \"/custom/service?q=m8\"\n      }]\n    }, {\n      name: \"新聞資訊\",\n      path: \"/news/list\",\n      list: []\n    }, {\n      name: \"關於平安人壽\",\n      path: \"\",\n      list: [{\n        name: \"公司簡介\",\n        path: \"/profile\"\n      }, {\n        name: \"領導人概況\",\n        path: \"\"\n      }]\n    }]\n  },\n  footer: {\n    hkPhone: \"客戶服務熱線(香港)\",\n    cnPhone: \"客戶服務熱線(內地)\",\n    aboutUs: \"關於我們\",\n    companyIntroduction: \"公司介紹\",\n    news: \"新聞資訊\",\n    joinUs: \"加入我們\",\n    helpCenter: \"幫助中心\",\n    privacy: \"隱私政策\",\n    terms: \"使用條款\",\n    map: \"網站地圖\",\n    contactUs: \"聯絡我們\",\n    contactInformation: \"聯繫方式\",\n    service: \"服務網點\",\n    qrcode: \"官方公眾號\",\n    copyright: \"版權所有 © 中國平安保險(集團)股份有限公司未經許可不得復制、轉載或摘編,違者必究!\"\n  },\n  login: {\n    title: \"平安一賬通\",\n    loginType1: \"賬密登錄\",\n    loginType2: \"動態密碼登录\",\n    account: \"賬號\",\n    accountPlaceholder: \"請輸入證件號/一賬通用戶名/手機號\",\n    password: \"密碼\",\n    passwordPlaceholder: \"輸入登錄密碼\",\n    verifyPlaceholder: \"請輸入驗證碼\",\n    agree: \"同意\",\n    protocol: \"《平安一賬通會員服務協議》\",\n    login: \"登入\",\n    register: \"註冊\",\n    forget: \"忘記密碼\",\n    mobile: \"手機號\",\n    mobilePlaceholder: \"手機號\",\n    verifyCode: \"驗證碼\",\n    verifyCodePlaceholder: \"驗證碼\",\n    verifyCodeGet: \"獲取驗證碼\",\n    tips: {\n      e1: \"請輸入賬號信息\",\n      e2: \"請輸入密碼\",\n      e3: \"請輸入圖像驗證碼\",\n      e4: \"請同意《平安一賬通會員服務協議》\",\n      e5: \"賬號或密碼不正確\",\n      oe0: \"請輸入正確的手機號\",\n      oe1: \"請先獲取短信驗證碼\",\n      oe2: \"請輸入圖片驗證碼\",\n      oe3: \"請輸入短信驗證碼\",\n      oe4: \"短信驗證碼不正確\"\n    }\n  },\n  register: {\n    mobileOptions: [{\n      type: \"hk\",\n      name: \"香港手機號\",\n      placeHolder: \"請輸入8位手機號碼\",\n      areaCode: \"+852\"\n    }, {\n      type: \"zh\",\n      name: \"大陸手機號\",\n      placeHolder: \"請輸入11位手機號碼\",\n      areaCode: \"+86\"\n    }],\n    coutTips: \"{second}秒後重新獲取\",\n    title: \"歡迎註冊\",\n    title2: \"請設置新的密碼\",\n    mobilePlaceholder: \"請輸入8位手機號碼\",\n    verifyCodePlaceholder: \"請輸入驗證碼\",\n    verifyCodeGet: \"獲取驗證碼\",\n    agree: \"同意\",\n    protocol: \"《平安一賬通會員服務協議》\",\n    register: \"點擊註冊\",\n    newPassword: \"新密碼\",\n    newPasswordPlaceholder: \"輸入登錄密碼\",\n    newPasswordSure: \"確認密碼\",\n    newPasswordSurePlaceholder: \"輸入登錄密碼\",\n    sure: \"確認\",\n    tips: {\n      e1: \"手機號不正確,請輸入正確的手機號\",\n      e2: \"請同意《平安一賬通會員服務協議》\",\n      e3: \"短信驗證碼不正確\",\n      e4: \"請先獲取短信驗證碼\",\n      e5: \"手機號已經被註冊,請使用其他手機號註冊或直接登錄\",\n      e6: \"請輸入圖片驗證碼\",\n      e7: \"密碼長度不能少於8位\",\n      e8: \"密碼中必須包含數字、字符以及特殊號碼\",\n      e9: \"兩次密碼不一致,請確認後重新輸入\",\n      e10: \"驗證碼過期,請重新申請驗證碼\",\n      e11: \"註冊失敗,請聯繫工作人員\",\n      e12: \"註冊成功\"\n    }\n  },\n  session: {\n    sidExpire: \"長時間未操作,為了您賬戶的安全,請登錄後再操作\"\n  },\n  passwordCheck: {\n    error1: \"密碼長度不少於8位\",\n    error2: \"密碼中必須包含數字、字符以及特殊號碼\",\n    error3: \"兩次密碼不一致,請確認後重新輸入\",\n    error4: \"密碼修改失敗,請稍後再試,或撥打客服電話95511解決\",\n    error5: \"舊密碼不正確,請重新輸入\",\n    success: \"密碼修改成功\"\n  },\n  passwordReset: {\n    oldPwd: \"舊密碼\",\n    oldPwdPlaceholde: \"請輸入舊密碼\",\n    cidExpire: \"長時間未操作,為了您賬戶的安全,請重新開始\",\n    type1: {\n      title: \"密碼找回\",\n      t1: \"用戶輸入信息\",\n      t1Placeholder: \"手機號/證件號\",\n      submit: \"確認\",\n      error: \"您的手機號或證件號輸入錯誤,請核對后重新輸入\"\n    },\n    type2: {\n      title: \"密碼找回\",\n      t1: \"手機短信驗證碼\",\n      t1Placeholder: \"請輸入驗證碼\",\n      submit: \"確認\",\n      error1: \"短信驗證碼輸入錯誤,請核對後重新輸入\",\n      error2: \"短信驗證碼已經過期,請重新獲取驗證碼\",\n      error3: \"短信驗證碼發放時間少於1分鐘,請稍後再試\"\n    },\n    type3: {\n      title: \"密碼找回\",\n      t1: \"核對身份證信息\",\n      t1Placeholder: \"\",\n      submit: \"確認\"\n    },\n    type4: {\n      title: \"請設置新的密碼\",\n      t1: \"新密碼\",\n      t1Placeholder: \"請輸入新密碼\",\n      t2: \"確認密碼\",\n      t2Placeholder: \"請重新輸入新密碼\",\n      submit: \"確認\"\n    }\n  },\n  infomationImprove: {\n    title: \"請完善您的信息\",\n    t1: \"姓名\",\n    t1Placeholder: \"\",\n    t2: \"性別\",\n    t2Placeholder: \"\",\n    t3: \"出生日期\",\n    t3Placeholder: \"\",\n    t4: \"證件類型\",\n    t4Placeholder: \"\",\n    t5: \"證件號碼\",\n    t5Placeholder: \"\",\n    submit: \"確認\",\n    cancel: \"跳過\",\n    candidates: {\n      sex: [{\n        name: \"男\",\n        value: \"M\"\n      }, {\n        name: \"女\",\n        value: \"F\"\n      }],\n      idType: [{\n        name: \"身份證\",\n        value: \"1\"\n      }, {\n        name: \"護照\",\n        value: \"2\"\n      }, {\n        name: \"軍官證或士兵證\",\n        value: \"3\"\n      }, {\n        name: \"港澳通行證/回鄉證或台胞證\",\n        value: \"6\"\n      }, {\n        name: \"外國人永久居留身份證\",\n        value: \"0\"\n      }, {\n        name: \"港澳台居民居住證\",\n        value: \"V\"\n      }, {\n        name: \"台灣居民居住證\",\n        value: \"W\"\n      }]\n    },\n    successMsg: \"更新成功\",\n    errorTips: {\n      e1: \"請填寫姓名信息\",\n      e2: \"請選擇性別\",\n      e3: \"請選擇生日\",\n      e4: \"請選擇證件類型\",\n      e5: \"請填寫證件號碼\",\n      e6: \"您填寫的證件號碼有誤\",\n      e7: \"您填寫的信息有誤,請核實後重新提交\"\n    }\n  },\n  index: {\n    news: \"新聞資訊\",\n    newMore: \"查看更多\",\n    recommend: {\n      item1: {\n        btn: \"了解更多產品\",\n        t1: \"為自己和家人尋找壹份保障\"\n      },\n      item2: {\n        btn: \"立即預約\",\n        t1: \"在線預約 專業服務\"\n      },\n      item3: {\n        btn: \"客戶服務\",\n        t1: \"專業客服為妳服務\",\n        t2: \"想了解更多,可致電\",\n        t3: \"95511\",\n        t4: \"聯絡我們,或進入\"\n      }\n    }\n  },\n  complaintAcceptance: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"聯絡方式\",\n    email: \"電郵地址\",\n    question: \"問題或意見\",\n    questionPlaceHolder: \"(字數不超過500字)\",\n    orderNo: \"保單編號\",\n    orderNoPlaceHolder: \"如您為平安客戶,請提供保單編號\",\n    contactTime: \"期望聯絡時間\",\n    notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n    notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\",\n    contactTypes: ['電話', '電郵'],\n    errorTips: {\n      e1: \"請填寫該項內容\",\n      e2: \"請填寫正確的聯繫方式\"\n    }\n  },\n  reservation: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"聯絡方式\",\n    contact: \"聯絡電話\",\n    contactPlaceholder: \"香港號碼/內地號碼\",\n    reservationType: \"預約類型\",\n    reservationRemark: \"預約說明\",\n    reservationRemarkPlaceholder: \"請簡單說明您想要咨詢的產品或業務\",\n    hkClient: \"是否平安香港客戶\",\n    yes: \"是\",\n    no: \"否\",\n    contactTime: \"期望聯絡時間\",\n    notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n    notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\"\n  },\n  paymentType: {\n    menu1: \"親臨客服中心付款\",\n    menu2: \"網銀付款\",\n    menu3: \"電匯付款\",\n    menu4: \"櫃員機付款\",\n    menu5: \"「繳費靈」付款\",\n    menu6: \"香港郵政局\"\n  },\n  product: {\n    btnPosition: \"預約服務\",\n    iconProblem: \"常見問題\",\n    iconProcess: \"投保流程\",\n    iconProduct: \"產品詳情\"\n  },\n  customProduct: {\n    menu1: \"聯繫我們\",\n    menu2: \"繳付保費\",\n    menu3: \"保單查詢\",\n    menu4: \"保單變更\",\n    menu5: \"理賠申請\",\n    menu6: \"預約服務\",\n    menu7: \"投訴受理\",\n    menu8: \"常用表格\"\n  },\n  commonForm: {\n    head1: \"表格類型\",\n    head2: \"表格名稱\",\n    head3: \"使用說明\",\n    head4: \"附件\",\n    download: \"下載文檔\",\n    form: [{\n      type: \"繳費類\",\n      list: [{\n        name: \"「電子入賬服務」及銀行戶口<br>直接付款授權申請\",\n        desc: \"申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供\",\n        download: \"\"\n      }, {\n        name: \"信用卡戶口直接付款授權書\",\n        desc: \"申請信用卡戶口直接付款授權時須提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"保單變更類\",\n      list: [{\n        name: \"保險合同解除申請書\",\n        desc: \"退保、猶豫期退保業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 保單貸款還款類)\",\n        desc: \"保單貸款、還款業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 保險合同計劃變更類)\",\n        desc: \"加保、減保、新增附險、復效等業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 客戶信息變更類)\",\n        desc: \"基本信息變更業務適用\",\n        download: \"\"\n      }, {\n        name: \"保險合同變更申請書( 客戶權益變更類)\",\n        desc: \"交費方式、自墊選擇權變更、補發等業務適用\",\n        download: \"\"\n      }, {\n        name: \"授權委托書\",\n        desc: \"委托他人代辦時須提供\",\n        download: \"\"\n      }, {\n        name: \"稅收聲明\",\n        desc: \"CRS要求\",\n        download: \"\"\n      }, {\n        name: \"健康告知\",\n        desc: \"須二次核保的業務須提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"理賠類\",\n      list: [{\n        name: \"理賠申請書\",\n        desc: \"紙質申請的應備文件\",\n        download: \"\"\n      }]\n    }]\n  },\n  policyChangeGuide: {\n    notice: \"如需做其他保單變更聯繫客服(聯繫客服超鏈接跳轉公司聯繫信息頁)\",\n    head1: \"項目\",\n    head2: \"具體內容\",\n    head3: \"申請資格人\",\n    head4: \"受理時間\",\n    head5: \"應備材料\",\n    download: \"下載文檔\",\n    form: [{\n      project: \"退保\",\n      content: \"在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)\",\n      applicant: \"投保人\",\n      receptionTime: \"保單效力終止前\",\n      materialList: [{\n        name: \"保險單\"\n      }, {\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }]\n    }, {\n      project: \"猶豫期退保\",\n      content: \"在猶豫期內提出解除合同,公司會無息退還全部保費\",\n      applicant: \"投保人\",\n      receptionTime: \"猶豫期結束前\",\n      materialList: [{\n        name: \"保險單\"\n      }, {\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }, {\n        name: \"首期保費發票\"\n      }]\n    }, {\n      project: \"客戶資料變更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m42\"\n      },\n      content: \"投保人、受保人、受益人的個人信息變更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"必要的證明材料\"\n      }]\n    }, {\n      project: \"聯系方式變更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m43\"\n      },\n      content: \"地址、電話等信息的變更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"投保人有效身份證件\"\n      }]\n    }, {\n      project: \"交費方式變更\",\n      content: \"更改保單的續期交費方式或交費賬號\",\n      applicant: \"投保人\",\n      receptionTime: \"保單交費期滿前\",\n      materialList: [{\n        name: \"申請書\",\n        type: 1\n      }, {\n        name: \"保險單\"\n      }]\n    }]\n  },\n  policyChangeContact: {\n    phone: \"聯繫電話\",\n    address: \"聯繫地址\",\n    email: \"E-Mail\",\n    checkTips: \"本人不同意接收宣傳信息\",\n    submit: \"確認修改\",\n    errorTips: {\n      e1: \"請填寫正確的聯繫電話\",\n      e2: \"請填寫聯繫地址\",\n      e3: \"請填寫正確的E-Mail地址\"\n    }\n  },\n  policyChangeInformation: {\n    hkClient: \"是否平安香港客戶\",\n    yes: \"是\",\n    no: \"否\",\n    obj: \"變更對象\",\n    name: \"姓名\",\n    sex: \"性别\",\n    birth: \"出生日期\",\n    type: \"證件類型\",\n    NO: \"證件號碼\",\n    validityPeriod: \"證件有效期\",\n    nationality: \"國籍\",\n    employer: \"工作單位\",\n    maritalStatus: \"婚姻狀況\",\n    submit: \"確認修改\",\n    upload: \"附件上傳\",\n    modifyTips1: \"如需修改請\",\n    modifyTips2: \"聯繫客服\"\n  },\n  contactUs: {\n    service: {\n      center: {\n        title: \"客戶服務中心\",\n        address: \"地址:香港尖沙嘴港威永金融大樓\",\n        time: \"服務時間:星期壹至五9:00-18:00\"\n      },\n      hotline: {\n        title: \"客戶服務熱線\",\n        hk: \"香港號碼:(852)2983 8866\",\n        cn: \"內地號碼:(86)40078 95511\",\n        time: \"服務時間:星期壹至五9:00-18:00\"\n      },\n      mail: {\n        title: \"客戶服務電郵\",\n        mail: \"cs@pingan.com.hk\"\n      }\n    },\n    pulbic: {\n      title: \"微信公眾號\",\n      m1: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「添加朋友」,選擇「公眾號」 輸入並搜索「平安人壽香港」\",\n      m2: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「掃壹掃」掃描下方二維碼(放置二維碼)\"\n    },\n    qrcode: {\n      title: \"官方公眾號\"\n    }\n  },\n  customService: {\n    name: \"客戶服務\",\n    menu1: \"聯繫我們\",\n    menu2: \"繳付保費\",\n    menu3: \"保單查詢\",\n    menu4: \"保單變更\",\n    menu41: \"保單變更指引\",\n    menu42: \"聯系方式變更\",\n    menu43: \"客戶資料變更\",\n    menu5: \"理賠申請\",\n    menu6: \"預約服務\",\n    menu7: \"投訴受理\",\n    menu8: \"常用表格\",\n    insuranceQuery: {\n      InsurantNumber: \"保單號碼\",\n      Insurant: \"受保人\",\n      InsurantName: \"險種名稱\",\n      InsurantAmount: \"保額\",\n      effectiveDate: \"保費到期日\",\n      period: \"保障年期\",\n      t2Title: \"保障內容\",\n      t2InsurantClassify: \"險種名稱\",\n      t2InsurantAmount: \"保額\",\n      t3Title: \"客戶資料\",\n      t3InsurantNameCn: \"投保人姓名(中文)\",\n      t3InsurantNameEn: \"投保人姓名(英文)\",\n      t3InsurantIdNumber: \"證件號碼\",\n      t3InsurantContactAddress: \"聯繫地址\",\n      t3InsurantAddress: \"居住地址\",\n      t3InsurantMobile: \"手提電話\",\n      t3InsurantEmail: \"電子郵箱\",\n      t3InsuredNameCn: \"受保人姓名(中文)\",\n      t3InsuredNameEn: \"受保人姓名(英文)\",\n      t3InsuredBirthday: \"出生日期\",\n      t3InsuredIdNumber: \"證件號碼\",\n      t4Title: \"受益人資料\",\n      // t4BeneficiaryInformation\n      t4NameCn: \"姓名(中文)\",\n      t4NameEn: \"姓名(英文)\",\n      t4Relation: \"與受保人關係\",\n      t4Allocation: \"分配比例\",\n      t5Title: \"繳費資料\",\n      t5PaymentPeriod: \"續費年期\",\n      t5PaymentMethod: \"繳費方式\",\n      t5PaymentCurrency: \"繳費幣種\",\n      t5CurrentPremium: \"當期保費\",\n      t5PaymentBank: \"繳費銀行\",\n      t5PaymentAccount: \"繳費帳號\",\n      t6Title: \"繳費記錄\",\n      t6PaymentPeriod: \"繳費期\",\n      t6PaymentMethod: \"繳費方式\",\n      t6ClosingDate: \"實收日期\",\n      t6PaymentAmount: \"繳費金額\"\n    },\n    reservation: {\n      submitBtn: '確認',\n      contactTypes: ['電話'],\n      reservationTypes: ['投保咨詢', '代辦保單變更'],\n      errorTips: {\n        e1: \"請填寫該項內容\",\n        e2: \"請填寫正確的聯繫方式\"\n      }\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvdGMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvdGMuanM/ZDNmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAnTG9naW4nLFxuXHRcdFVzZXJuYW1lOiAnVXNlcm5hbWUnLFxuXHRcdFBhc3N3b3JkOiAnUGFzc3dvcmQnLFxuXHRcdENhcHRjaGE6ICdDYXB0Y2hhJyxcblx0XHRMYW5ndWFnZTogJ0xhbmd1YWdlJyxcblx0XHR6aDogJ0NoaW5lc2UnLFxuXHRcdGVuOiAnRW5nbGlzaCdcblx0fSxcblx0Z2xiYWxUaXBzIDoge1xuXHRcdHNlc3Npb25Mb3N0IDogXCLngrrkuobmm7Tlpb3nmoTpq5TpqZfvvIzpnIDopoHmgqjnmbvpjITlvozlho3pgLLooYzmraTmk43kvZxcIlxuXHR9LFxuXHRuYXY6IHtcblx0XHRsb2dpbkRhdGE6IHtcblx0XHRcdG5hbWU6IFwi55m75YWlXCIsXG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLoqLvlhopcIixcblx0XHRcdFx0cGF0aDogXCIvcmVnaXN0ZXJcIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLnmbvlhaVcIixcblx0XHRcdFx0cGF0aDogXCIvbG9naW5cIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+u5pS55a+G56K8XCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Bhc3N3b3JkL3Jlc2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiYXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnmbvlh7pcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcImxvZ291dFwiXG5cdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHRuYXZMaXN0OiBbe1xuXHRcdFx0bmFtZTogXCLnlKLlk4Hku4vntLlcIixcblx0XHRcdHBhdGg6IFwiL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFtdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIuWuouaItuacjeWLmVwiLFxuXHRcdFx0cGF0aDogXCIvY3VzdG9tL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi6IGv57O75oiR5YCRXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTFcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnubPku5jkv53osrtcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/neWWruafpeipolwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0zXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d5Zau6K6K5pu0XCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTQxXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LOg55Sz6KuLXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpoJDntITmnI3li5lcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleiotOWPl+eQhlwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW03XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5bi455So6KGo5qC8XCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bThcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5paw6IGe6LOH6KiKXCIsXG5cdFx0XHRwYXRoOiBcIi9uZXdzL2xpc3RcIixcblx0XHRcdGxpc3Q6IFtdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIumXnOaWvOW5s+WuieS6uuWjvVwiLFxuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5YWs5Y+457Ch5LuLXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Byb2ZpbGVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpoJjlsI7kurrmpoLms4FcIixcblx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0Zm9vdGVyOiB7XG5cdFx0aGtQaG9uZTogXCLlrqLmiLbmnI3li5nnhrHnt5rvvIjpppnmuK/vvIlcIixcblx0XHRjblBob25lOiBcIuWuouaItuacjeWLmeeGsee3mu+8iOWFp+WcsO+8iVwiLFxuXHRcdGFib3V0VXM6IFwi6Zec5pa85oiR5YCRXCIsXG5cdFx0Y29tcGFueUludHJvZHVjdGlvbjogXCLlhazlj7jku4vntLlcIixcblx0XHRuZXdzOiBcIuaWsOiBnuizh+ioilwiLFxuXHRcdGpvaW5VczogXCLliqDlhaXmiJHlgJFcIixcblx0XHRoZWxwQ2VudGVyOiBcIuW5q+WKqeS4reW/g1wiLFxuXHRcdHByaXZhY3k6IFwi6Zqx56eB5pS/562WXCIsXG5cdFx0dGVybXM6IFwi5L2/55So5qKd5qy+XCIsXG5cdFx0bWFwOiBcIue2suermeWcsOWcllwiLFxuXHRcdGNvbnRhY3RVczogXCLoga/ntaHmiJHlgJFcIixcblx0XHRjb250YWN0SW5mb3JtYXRpb246IFwi6IGv57mr5pa55byPXCIsXG5cdFx0c2VydmljZTogXCLmnI3li5nntrLpu55cIixcblx0XHRxcmNvZGU6IFwi5a6Y5pa55YWs55y+6JmfXCIsXG5cdFx0Y29weXJpZ2h0OiBcIueJiOasiuaJgOaciSDCqSDkuK3lnIvlubPlronkv53pmqrvvIjpm4blnJjvvInogqHku73mnInpmZDlhazlj7jmnKrntpPoqLHlj6/kuI3lvpflvqnliLbjgIHovYnovInmiJbmkZjnt6jvvIzpgZXogIXlv4XnqbYhXCJcblx0fSxcblx0bG9naW46IHtcblx0XHR0aXRsZTogXCLlubPlronkuIDos6zpgJpcIixcblx0XHRsb2dpblR5cGUxOiBcIuizrOWvhueZu+mMhFwiLFxuXHRcdGxvZ2luVHlwZTI6IFwi5YuV5oWL5a+G56K855m75b2VXCIsXG5cdFx0YWNjb3VudDogXCLos6zomZ9cIixcblx0XHRhY2NvdW50UGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6K2J5Lu26JmfL+S4gOizrOmAmueUqOaItuWQjS/miYvmqZ/omZ9cIixcblx0XHRwYXNzd29yZDogXCLlr4bnorxcIixcblx0XHRwYXNzd29yZFBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHZlcmlmeVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpempl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOizrOmAmuacg+WToeacjeWLmeWNlOitsOOAi1wiLFxuXHRcdGxvZ2luOiBcIueZu+WFpVwiLFxuXHRcdHJlZ2lzdGVyOiBcIuiou+WGilwiLFxuXHRcdGZvcmdldDogXCLlv5joqJjlr4bnorxcIixcblx0XHRtb2JpbGU6IFwi5omL5qmf6JmfXCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfXCIsXG5cdFx0dmVyaWZ5Q29kZTogXCLpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6amX6K2J56K8XCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLnjbLlj5bpqZforYnnorxcIixcblx0XHR0aXBzOiB7XG5cdFx0XHRlMTogXCLoq4vovLjlhaXos6zomZ/kv6Hmga9cIixcblx0XHRcdGUyOiBcIuiri+i8uOWFpeWvhueivFwiLFxuXHRcdFx0ZTM6IFwi6KuL6Ly45YWl5ZyW5YOP6amX6K2J56K8XCIsXG5cdFx0XHRlNDogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGU1OiBcIuizrOiZn+aIluWvhueivOS4jeato+eiulwiLFxuXHRcdFx0b2UwOiBcIuiri+i8uOWFpeato+eiuueahOaJi+apn+iZn1wiLFxuXHRcdFx0b2UxOiBcIuiri+WFiOeNsuWPluefreS/oempl+itieeivFwiLFxuXHRcdFx0b2UyOiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0b2UzOiBcIuiri+i8uOWFpeefreS/oempl+itieeivFwiLFxuXHRcdFx0b2U0OiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdH0sXG5cdH0sXG5cdHJlZ2lzdGVyOiB7XG5cdFx0bW9iaWxlT3B0aW9uczogW3tcblx0XHRcdHR5cGU6IFwiaGtcIixcblx0XHRcdG5hbWU6IFwi6aaZ5riv5omL5qmf6JmfXCIsXG5cdFx0XHRwbGFjZUhvbGRlcjogXCLoq4vovLjlhaU45L2N5omL5qmf6Jmf56K8XCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODUyXCJcblx0XHR9LCB7XG5cdFx0XHR0eXBlOiBcInpoXCIsXG5cdFx0XHRuYW1lOiBcIuWkp+mZuOaJi+apn+iZn1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6KuL6Ly45YWlMTHkvY3miYvmqZ/omZ/norxcIixcblx0XHRcdGFyZWFDb2RlOiBcIis4NlwiXG5cdFx0fV0sXG5cdFx0Y291dFRpcHM6IFwie3NlY29uZH3np5Llvozph43mlrDnjbLlj5ZcIixcblx0XHR0aXRsZTogXCLmraHov47oqLvlhopcIixcblx0XHR0aXRsZTI6IFwi6KuL6Kit572u5paw55qE5a+G56K8XCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWlOOS9jeaJi+apn+iZn+eivFwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLoq4vovLjlhaXpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIueNsuWPlumpl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOizrOmAmuacg+WToeacjeWLmeWNlOitsOOAi1wiLFxuXHRcdHJlZ2lzdGVyOiBcIum7nuaTiuiou+WGilwiLFxuXHRcdG5ld1Bhc3N3b3JkOiBcIuaWsOWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6Ly45YWl55m76YyE5a+G56K8XCIsXG5cdFx0bmV3UGFzc3dvcmRTdXJlOiBcIueiuuiqjeWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZVBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHN1cmU6IFwi56K66KqNXCIsXG5cdFx0dGlwczoge1xuXHRcdFx0ZTE6IFwi5omL5qmf6Jmf5LiN5q2j56K677yM6KuL6Ly45YWl5q2j56K655qE5omL5qmf6JmfXCIsXG5cdFx0XHRlMjogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGUzOiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdFx0ZTQ6IFwi6KuL5YWI542y5Y+W55+t5L+h6amX6K2J56K8XCIsXG5cdFx0XHRlNTogXCLmiYvmqZ/omZ/lt7LntpPooqvoqLvlhorvvIzoq4vkvb/nlKjlhbbku5bmiYvmqZ/omZ/oqLvlhormiJbnm7TmjqXnmbvpjIRcIixcblx0XHRcdGU2OiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0ZTc6IFwi5a+G56K86ZW35bqm5LiN6IO95bCR5pa8OOS9jVwiLFxuXHRcdFx0ZTg6IFwi5a+G56K85Lit5b+F6aCI5YyF5ZCr5pW45a2X44CB5a2X56ym5Lul5Y+K54m55q6K6Jmf56K8XCIsXG5cdFx0XHRlOTogXCLlhanmrKHlr4bnorzkuI3kuIDoh7TvvIzoq4vnorroqo3lvozph43mlrDovLjlhaVcIixcblx0XHRcdGUxMDogXCLpqZforYnnorzpgY7mnJ/vvIzoq4vph43mlrDnlLPoq4vpqZforYnnorxcIixcblx0XHRcdGUxMTogXCLoqLvlhorlpLHmlZfvvIzoq4voga/nuavlt6XkvZzkurrlk6FcIixcblx0XHRcdGUxMjogXCLoqLvlhormiJDlip9cIixcblx0XHR9XG5cdH0sXG5cdHNlc3Npb246IHtcblx0XHRzaWRFeHBpcmU6IFwi6ZW35pmC6ZaT5pyq5pON5L2c77yM54K65LqG5oKo6LOs5oi255qE5a6J5YWo77yM6KuL55m76YyE5b6M5YaN5pON5L2cXCIsXG5cdH0sXG5cdHBhc3N3b3JkQ2hlY2s6IHtcblx0XHRlcnJvcjE6IFwi5a+G56K86ZW35bqm5LiN5bCR5pa8OOS9jVwiLFxuXHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHRlcnJvcjM6IFwi5YWp5qyh5a+G56K85LiN5LiA6Ie077yM6KuL56K66KqN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0ZXJyb3I0OiBcIuWvhueivOS/ruaUueWkseaVl++8jOiri+eojeW+jOWGjeippu+8jOaIluaSpeaJk+Wuouacjembu+ipsTk1NTEx6Kej5rG6XCIsXG5cdFx0ZXJyb3I1OiBcIuiIiuWvhueivOS4jeato+eiuu+8jOiri+mHjeaWsOi8uOWFpVwiLFxuXHRcdHN1Y2Nlc3M6IFwi5a+G56K85L+u5pS55oiQ5YqfXCJcblx0fSxcblx0cGFzc3dvcmRSZXNldDoge1xuXHRcdG9sZFB3ZDogXCLoiIrlr4bnorxcIixcblx0XHRvbGRQd2RQbGFjZWhvbGRlOiBcIuiri+i8uOWFpeiIiuWvhueivFwiLFxuXHRcdGNpZEV4cGlyZTogXCLplbfmmYLplpPmnKrmk43kvZzvvIzngrrkuobmgqjos6zmiLbnmoTlronlhajvvIzoq4vph43mlrDplovlp4tcIixcblx0XHR0eXBlMToge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLnlKjmiLbovLjlhaXkv6Hmga9cIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfL+itieS7tuiZn1wiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3I6IFwi5oKo55qE5omL5qmf6Jmf5oiW6K2J5Lu26Jmf6Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5ZCO6YeN5paw6Ly45YWlXCIsXG5cdFx0fSxcblx0XHR0eXBlMjoge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLmiYvmqZ/nn63kv6HpqZforYnnorxcIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6amX6K2J56K8XCIsXG5cdFx0XHRzdWJtaXQ6IFwi56K66KqNXCIsXG5cdFx0XHRlcnJvcjE6IFwi55+t5L+h6amX6K2J56K86Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0XHRlcnJvcjI6IFwi55+t5L+h6amX6K2J56K85bey57aT6YGO5pyf77yM6KuL6YeN5paw542y5Y+W6amX6K2J56K8XCIsXG5cdFx0XHRlcnJvcjM6IFwi55+t5L+h6amX6K2J56K855m85pS+5pmC6ZaT5bCR5pa8MeWIhumQmO+8jOiri+eojeW+jOWGjeipplwiLFxuXHRcdH0sXG5cdFx0dHlwZTM6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueivOaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5qC45bCN6Lqr5Lu96K2J5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH0sXG5cdFx0dHlwZTQ6IHtcblx0XHRcdHRpdGxlOiBcIuiri+ioree9ruaWsOeahOWvhueivFwiLFxuXHRcdFx0dDE6IFwi5paw5a+G56K8XCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0dDI6IFwi56K66KqN5a+G56K8XCIsXG5cdFx0XHR0MlBsYWNlaG9sZGVyOiBcIuiri+mHjeaWsOi8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH1cblx0fSxcblx0aW5mb21hdGlvbkltcHJvdmU6IHtcblx0XHR0aXRsZTogXCLoq4vlrozlloTmgqjnmoTkv6Hmga9cIixcblx0XHR0MTogXCLlp5PlkI1cIixcblx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQyOiBcIuaAp+WIpVwiLFxuXHRcdHQyUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDM6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0dDNQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NDogXCLorYnku7bpoZ7lnotcIixcblx0XHR0NFBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQ1OiBcIuitieS7tuiZn+eivFwiLFxuXHRcdHQ1UGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdGNhbmNlbDogXCLot7PpgY5cIixcblx0XHRjYW5kaWRhdGVzOiB7XG5cdFx0XHRzZXg6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55S3XCIsXG5cdFx0XHRcdHZhbHVlOiBcIk1cIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWls1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJGXCJcblx0XHRcdH1dLFxuXHRcdFx0aWRUeXBlOiBbe1xuXHRcdFx0XHRuYW1lOiBcIui6q+S7veitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIxXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLorbfnhadcIixcblx0XHRcdFx0dmFsdWU6IFwiMlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi6LuN5a6Y6K2J5oiW5aOr5YW16K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjNcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIua4r+a+s+mAmuihjOitiS/lm57phInorYnmiJblj7Dog57orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiNlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5aSW5ZyL5Lq65rC45LmF5bGF55WZ6Lqr5Lu96K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjBcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIua4r+a+s+WPsOWxheawkeWxheS9j+itiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCJWXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlj7DngaPlsYXmsJHlsYXkvY/orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiV1wiXG5cdFx0XHR9XVxuXHRcdH0sXG5cdFx0c3VjY2Vzc01zZyA6IFwi5pu05paw5oiQ5YqfXCIsXG5cdFx0ZXJyb3JUaXBzOiB7XG5cdFx0XHRlMTogXCLoq4vloavlr6vlp5PlkI3kv6Hmga9cIixcblx0XHRcdGUyOiBcIuiri+mBuOaTh+aAp+WIpVwiLFxuXHRcdFx0ZTM6IFwi6KuL6YG45pOH55Sf5pelXCIsXG5cdFx0XHRlNDogXCLoq4vpgbjmk4forYnku7bpoZ7lnotcIixcblx0XHRcdGU1OiBcIuiri+Whq+Wvq+itieS7tuiZn+eivFwiLFxuXHRcdFx0ZTY6IFwi5oKo5aGr5a+r55qE6K2J5Lu26Jmf56K85pyJ6KqkXCIsXG5cdFx0XHRlNzogXCLmgqjloavlr6vnmoTkv6Hmga/mnInoqqTvvIzoq4vmoLjlr6blvozph43mlrDmj5DkuqRcIixcblx0XHR9XG5cdH0sXG5cdGluZGV4OiB7XG5cdFx0bmV3czogXCLmlrDogZ7os4foqIpcIixcblx0XHRuZXdNb3JlOiBcIuafpeeci+abtOWkmlwiLFxuXHRcdHJlY29tbWVuZDoge1xuXHRcdFx0aXRlbTE6IHtcblx0XHRcdFx0YnRuOiBcIuS6huino+abtOWkmueUouWTgVwiLFxuXHRcdFx0XHR0MTogXCLngrroh6rlt7HlkozlrrbkurrlsIvmib7lo7nku73kv53pmpxcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMjoge1xuXHRcdFx0XHRidG46IFwi56uL5Y2z6aCQ57SEXCIsXG5cdFx0XHRcdHQxOiBcIuWcqOe3mumgkOe0hCDlsIjmpa3mnI3li5lcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMzoge1xuXHRcdFx0XHRidG46IFwi5a6i5oi25pyN5YuZXCIsXG5cdFx0XHRcdHQxOiBcIuWwiOalreWuouacjeeCuuWms+acjeWLmVwiLFxuXHRcdFx0XHR0MjogXCLmg7Pkuobop6Pmm7TlpJrvvIzlj6/oh7Tpm7tcIixcblx0XHRcdFx0dDM6IFwiOTU1MTFcIixcblx0XHRcdFx0dDQ6IFwi6IGv57Wh5oiR5YCR77yM5oiW6YCy5YWlXCIsXG5cdFx0XHR9XG5cdFx0fSxcblx0fSxcblx0Y29tcGxhaW50QWNjZXB0YW5jZToge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBr+e1oeaWueW8j1wiLFxuXHRcdGVtYWlsOiBcIumbu+mDteWcsOWdgFwiLFxuXHRcdHF1ZXN0aW9uOiBcIuWVj+mhjOaIluaEj+imi1wiLFxuXHRcdHF1ZXN0aW9uUGxhY2VIb2xkZXI6IFwi77yI5a2X5pW45LiN6LaF6YGONTAw5a2X77yJXCIsXG5cdFx0b3JkZXJObzogXCLkv53llq7nt6jomZ9cIixcblx0XHRvcmRlck5vUGxhY2VIb2xkZXI6IFwi5aaC5oKo54K65bmz5a6J5a6i5oi277yM6KuL5o+Q5L6b5L+d5Zau57eo6JmfXCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGv57Wh5pmC6ZaTXCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTlgIvkurros4fmlpnmoLnmk5rjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3omZXnkIblj4rlj6rmnIPooqvnlKjkvZzmlrzoga/ntaEg6Zaj5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5YCL5Lq66LOH5paZ5pyq57aT5oKo5piO56K65o6I5qyK5bCH5LiN5pyD6L2J56e76Iez44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5qmf5qeL44CC5oKo5Y+v6YG45pOH5LiN5ZCR5oiR5YCR5o+Q5L6b5omA6ZyA55qE5YCL5Lq66LOH5paZ77yM5oOf6YCZ5qij5Y+v6IO95bCO6Ie05oiR5YCR5LiN6IO96IGv57Wh5oKo44CC5oKo5Lqm5Y+v5qC55pOa44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN5LmL5qyK5Yip5p+l6Zax5Y+K5pu05q2j5YCL5Lq66LOH5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnj77norroqo3mmI7nmb3kuKblkIzmhI/mnKzkurrnmoTlgIvkurros4fmlpnmoLnmk5rkuK3pioDkurrlo73lgIvkurros4fmlpnmlLbpm4bogbLmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0XHRjb250YWN0VHlwZXMgOiBbJ+mbu+ipsScsJ+mbu+mDtSddLFxuXHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdGUxIDogXCLoq4vloavlr6voqbLpoIXlhaflrrlcIixcblx0XHRcdGUyIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavmlrnlvI9cIlxuXHRcdH0sXG5cdH0sXG5cdHJlc2VydmF0aW9uOiB7XG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRuYW1lUGxhY2Vob2xkZXI6IFwi5aeT5ZCNXCIsXG5cdFx0Y29udGFjdFR5cGU6IFwi6IGv57Wh5pa55byPXCIsXG5cdFx0Y29udGFjdDogXCLoga/ntaHpm7voqbFcIixcblx0XHRjb250YWN0UGxhY2Vob2xkZXI6IFwi6aaZ5riv6Jmf56K8L+WFp+WcsOiZn+eivFwiLFxuXHRcdHJlc2VydmF0aW9uVHlwZTogXCLpoJDntITpoZ7lnotcIixcblx0XHRyZXNlcnZhdGlvblJlbWFyazogXCLpoJDntIToqqrmmI5cIixcblx0XHRyZXNlcnZhdGlvblJlbWFya1BsYWNlaG9sZGVyOiBcIuiri+ewoeWWruiqquaYjuaCqOaDs+imgeWSqOipoueahOeUouWTgeaIlualreWLmVwiLFxuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaItlwiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRjb250YWN0VGltZTogXCLmnJ/mnJvoga/ntaHmmYLplpNcIixcblx0XHRub3RpY2UxOiBcIuacrOihqOagvOaJgOaUtumbhueahOWAi+S6uuizh+aWmeagueaTmuOAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeiZleeQhuWPiuWPquacg+iiq+eUqOS9nOaWvOiBr+e1oSDplqPkuIvkuYvnlKjjgILnhLbogIzmiYDmlLbpm4bnmoTlgIvkurros4fmlpnmnKrntpPmgqjmmI7norrmjojmrIrlsIfkuI3mnIPovYnnp7voh7PjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3liJfmmI7ku6XlpJbkuYvnrKzkuInogIXmqZ/mp4vjgILmgqjlj6/pgbjmk4fkuI3lkJHmiJHlgJHmj5DkvpvmiYDpnIDnmoTlgIvkurros4fmlpnvvIzmg5/pgJnmqKPlj6/og73lsI7oh7TmiJHlgJHkuI3og73oga/ntaHmgqjjgILmgqjkuqblj6/moLnmk5rjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3kuYvmrIrliKnmn6XplrHlj4rmm7TmraPlgIvkurros4fmlpnjgIJcIixcblx0XHRub3RpY2UyOiBcIuacrOS6uuePvueiuuiqjeaYjueZveS4puWQjOaEj+acrOS6uueahOWAi+S6uuizh+aWmeagueaTmuS4remKgOS6uuWjveWAi+S6uuizh+aWmeaUtumbhuiBsuaYjuS9nOS7peS4iui/sOeUqOmAlOOAglwiLFxuXHR9LFxuXHRwYXltZW50VHlwZToge1xuXHRcdG1lbnUxOiBcIuimquiHqOWuouacjeS4reW/g+S7mOasvlwiLFxuXHRcdG1lbnUyOiBcIue2sumKgOS7mOasvlwiLFxuXHRcdG1lbnUzOiBcIumbu+WMr+S7mOasvlwiLFxuXHRcdG1lbnU0OiBcIuarg+WToeapn+S7mOasvlwiLFxuXHRcdG1lbnU1OiBcIuOAjOe5s+iyu+mdiOOAjeS7mOasvlwiLFxuXHRcdG1lbnU2OiBcIummmea4r+mDteaUv+WxgFwiLFxuXHR9LFxuXHRwcm9kdWN0OiB7XG5cdFx0YnRuUG9zaXRpb246IFwi6aCQ57SE5pyN5YuZXCIsXG5cdFx0aWNvblByb2JsZW06IFwi5bi46KaL5ZWP6aGMXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwi5oqV5L+d5rWB56iLXCIsXG5cdFx0aWNvblByb2R1Y3Q6IFwi55Si5ZOB6Kmz5oOFXCJcblx0fSxcblx0Y3VzdG9tUHJvZHVjdDoge1xuXHRcdG1lbnUxOiBcIuiBr+e5q+aIkeWAkVwiLFxuXHRcdG1lbnUyOiBcIue5s+S7mOS/neiyu1wiLFxuXHRcdG1lbnUzOiBcIuS/neWWruafpeipolwiLFxuXHRcdG1lbnU0OiBcIuS/neWWruiuiuabtFwiLFxuXHRcdG1lbnU1OiBcIueQhuizoOeUs+iri1wiLFxuXHRcdG1lbnU2OiBcIumgkOe0hOacjeWLmVwiLFxuXHRcdG1lbnU3OiBcIuaKleiotOWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHR9LFxuXHRjb21tb25Gb3JtOiB7XG5cdFx0aGVhZDE6IFwi6KGo5qC86aGe5Z6LXCIsXG5cdFx0aGVhZDI6IFwi6KGo5qC85ZCN56ixXCIsXG5cdFx0aGVhZDM6IFwi5L2/55So6Kqq5piOXCIsXG5cdFx0aGVhZDQ6IFwi6ZmE5Lu2XCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6LyJ5paH5qqUXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHR5cGU6IFwi57mz6LK76aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuOAjOmbu+WtkOWFpeizrOacjeWLmeOAjeWPiumKgOihjOaItuWPozxicj7nm7TmjqXku5jmrL7mjojmrIrnlLPoq4tcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPoq4voqK3nq4vjgIwg6Zu75a2Q5YWl6LOs5pyN5YuZ44CNIOWPiumKgOihjOaItuWPozxicj7nm7TmjqXku5jmrL7mjojmrIrmmYLpoIjmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/oeeUqOWNoeaItuWPo+ebtOaOpeS7mOasvuaOiOasiuabuFwiLFxuXHRcdFx0XHRkZXNjOiBcIueUs+iri+S/oeeUqOWNoeaItuWPo+ebtOaOpeS7mOasvuaOiOasiuaZgumgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHR5cGU6IFwi5L+d5Zau6K6K5pu06aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWQiOWQjOino+mZpOeUs+iri+abuFwiLFxuXHRcdFx0XHRkZXNjOiBcIumAgOS/neOAgeeMtuixq+acn+mAgOS/nealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOS/neWWruiyuOasvumChOasvumhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS/neWWruiyuOasvuOAgemChOasvualreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOS/nemaquWQiOWQjOioiOWKg+iuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuWKoOS/neOAgea4m+S/neOAgeaWsOWinumZhOmaquOAgeW+qeaViOetiealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOWuouaItuS/oeaBr+iuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuWfuuacrOS/oeaBr+iuiuabtOalreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOWuouaItuasiuebiuiuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS6pOiyu+aWueW8j+OAgeiHquWiiumBuOaTh+asiuiuiuabtOOAgeijnOeZvOetiealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5o6I5qyK5aeU5omY5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi5aeU5omY5LuW5Lq65Luj6L6m5pmC6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnqIXmlLbogbLmmI5cIixcblx0XHRcdFx0ZGVzYzogXCJDUlPopoHmsYJcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWBpeW6t+WRiuefpVwiLFxuXHRcdFx0XHRkZXNjOiBcIumgiOS6jOasoeaguOS/neeahOalreWLmemgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHR5cGU6IFwi55CG6LOg6aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueQhuizoOeUs+iri+abuFwiLFxuXHRcdFx0XHRkZXNjOiBcIue0meizqueUs+iri+eahOaHieWCmeaWh+S7tlwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1dXG5cdFx0fSxcblx0XHRdXG5cdH0sXG5cdHBvbGljeUNoYW5nZUd1aWRlOiB7XG5cdFx0bm90aWNlOiBcIuWmgumcgOWBmuWFtuS7luS/neWWruiuiuabtOiBr+e5q+Wuouacje+8iOiBr+e5q+Wuouacjei2hemPiOaOpei3s+i9ieWFrOWPuOiBr+e5q+S/oeaBr+mgge+8iVwiLFxuXHRcdGhlYWQxOiBcIumgheebrlwiLFxuXHRcdGhlYWQyOiBcIuWFt+mrlOWFp+WuuVwiLFxuXHRcdGhlYWQzOiBcIueUs+iri+izh+agvOS6ulwiLFxuXHRcdGhlYWQ0OiBcIuWPl+eQhuaZgumWk1wiLFxuXHRcdGhlYWQ1OiBcIuaHieWCmeadkOaWmVwiLFxuXHRcdGRvd25sb2FkOiBcIuS4i+i8ieaWh+aqlFwiLFxuXHRcdGZvcm06IFt7XG5cdFx0XHRwcm9qZWN0OiBcIumAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnjLbosavmnJ/lvozop6PpmaTlkIjlkIzvvIzlhazlj7jlsIfpgIDpgoTkv53llq7nj77ph5Hlg7nlgLzmiJbmnKrmu7/mnJ/lh4jkv53osrvjgILvvIjlvoXnlKLlk4Hnsr7nrpfnorroqo3vvIlcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5L+d5Zau5pWI5Yqb57WC5q2i5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cHJvamVjdDogXCLnjLbosavmnJ/pgIDkv51cIixcblx0XHRcdGNvbnRlbnQ6IFwi5Zyo54y26LGr5pyf5YWn5o+Q5Ye66Kej6Zmk5ZCI5ZCM77yM5YWs5Y+45pyD54Sh5oGv6YCA6YKE5YWo6YOo5L+d6LK7XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIueMtuixq+acn+e1kOadn+WJjVwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWWrlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnlLPoq4vmm7hcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5oqV5L+d5Lq65pyJ5pWI6Lqr5Lu96K2J5Lu2XCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWtmOaKmOmTtuihjOWNoeebuOWFs1wiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpppbmnJ/kv53osrvnmbznpahcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuWuouaItuizh+aWmeiuiuabtFwiLFxuXHRcdFx0cHJvamVjdFR5cGU6IDEsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZVwiLFxuXHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0cTogXCJtNDJcIlxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwi5oqV5L+d5Lq644CB5Y+X5L+d5Lq644CB5Y+X55uK5Lq655qE5YCL5Lq65L+h5oGv6K6K5pu0XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIuS4jemZkFwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlv4XopoHnmoTorYnmmI7mnZDmlplcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuiBr+ezu+aWueW8j+iuiuabtFwiLFxuXHRcdFx0cHJvamVjdFR5cGU6IDEsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZVwiLFxuXHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0cTogXCJtNDNcIlxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwi5Zyw5Z2A44CB6Zu76Kmx562J5L+h5oGv55qE6K6K5pu0XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIuS4jemZkFwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuS6pOiyu+aWueW8j+iuiuabtFwiLFxuXHRcdFx0Y29udGVudDogXCLmm7TmlLnkv53llq7nmoTnuozmnJ/kuqTosrvmlrnlvI/miJbkuqTosrvos6zomZ9cIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5L+d5Zau5Lqk6LK75pyf5ru/5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWWrlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlQ29udGFjdDoge1xuXHRcdHBob25lOiBcIuiBr+e5q+mbu+ipsVwiLFxuXHRcdGFkZHJlc3M6IFwi6IGv57mr5Zyw5Z2AXCIsXG5cdFx0ZW1haWw6IFwiRS1NYWlsXCIsXG5cdFx0Y2hlY2tUaXBzOiBcIuacrOS6uuS4jeWQjOaEj+aOpeaUtuWuo+WCs+S/oeaBr1wiLFxuXHRcdHN1Ym1pdDogXCLnorroqo3kv67mlLlcIixcblx0XHRlcnJvclRpcHMgOiB7XG5cdFx0XHRlMSA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr6Zu76KmxXCIsXG5cdFx0XHRlMiA6IFwi6KuL5aGr5a+r6IGv57mr5Zyw5Z2AXCIsXG5cdFx0XHRlMyA6IFwi6KuL5aGr5a+r5q2j56K655qERS1NYWls5Zyw5Z2AXCJcblx0XHR9XG5cdH0sXG5cdHBvbGljeUNoYW5nZUluZm9ybWF0aW9uOiB7XG5cdFx0aGtDbGllbnQ6IFwi5piv5ZCm5bmz5a6J6aaZ5riv5a6i5oi2XCIsXG5cdFx0eWVzOiBcIuaYr1wiLFxuXHRcdG5vOiBcIuWQplwiLFxuXHRcdG9iajogXCLorormm7TlsI3osaFcIixcblx0XHRuYW1lOiBcIuWnk+WQjVwiLFxuXHRcdHNleDogXCLmgKfliKtcIixcblx0XHRiaXJ0aDogXCLlh7rnlJ/ml6XmnJ9cIixcblx0XHR0eXBlOiBcIuitieS7tumhnuWei1wiLFxuXHRcdE5POiBcIuitieS7tuiZn+eivFwiLFxuXHRcdHZhbGlkaXR5UGVyaW9kOiBcIuitieS7tuacieaViOacn1wiLFxuXHRcdG5hdGlvbmFsaXR5OiBcIuWci+exjVwiLFxuXHRcdGVtcGxveWVyOiBcIuW3peS9nOWWruS9jVwiLFxuXHRcdG1hcml0YWxTdGF0dXM6IFwi5ama5ae754uA5rOBXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjeS/ruaUuVwiLFxuXHRcdHVwbG9hZDogXCLpmYTku7bkuIrlgrNcIixcblx0XHRtb2RpZnlUaXBzMTogXCLlpoLpnIDkv67mlLnoq4tcIixcblx0XHRtb2RpZnlUaXBzMjogXCLoga/nuavlrqLmnI1cIixcblx0fSxcblx0Y29udGFjdFVzOiB7XG5cdFx0c2VydmljZToge1xuXHRcdFx0Y2VudGVyOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmeS4reW/g1wiLFxuXHRcdFx0XHRhZGRyZXNzOiBcIuWcsOWdgO+8mummmea4r+WwluaymeWYtOa4r+WogeawuOmHkeiejeWkp+aok1wiLFxuXHRcdFx0XHR0aW1lOiBcIuacjeWLmeaZgumWk++8muaYn+acn+WjueiHs+S6lDk6MDAtMTg6MDBcIixcblx0XHRcdH0sXG5cdFx0XHRob3RsaW5lOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmeeGsee3mlwiLFxuXHRcdFx0XHRoazogXCLpppnmuK/omZ/norzvvJooODUyKTI5ODMgODg2NlwiLFxuXHRcdFx0XHRjbjogXCLlhaflnLDomZ/norzvvJooODYpNDAwNzggOTU1MTFcIixcblx0XHRcdFx0dGltZTogXCLmnI3li5nmmYLplpPvvJrmmJ/mnJ/lo7noh7PkupQ5OjAwLTE4OjAwXCJcblx0XHRcdH0sXG5cdFx0XHRtYWlsOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmembu+mDtVwiLFxuXHRcdFx0XHRtYWlsOiBcImNzQHBpbmdhbi5jb20uaGtcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cHVsYmljOiB7XG5cdFx0XHR0aXRsZTogXCLlvq7kv6HlhaznnL7omZ9cIixcblx0XHRcdG0xOiBcIueZu+mZuOOAjOW+ruS/oeOAjUFQUO+8jCDmjInlj7PkuIrop5LnmoTjgIwr44CN5oyJ6YiV5Lim6YG45pOH44CM5re75Yqg5pyL5Y+L44CN77yM6YG45pOH44CM5YWs55y+6Jmf44CNIOi8uOWFpeS4puaQnOe0ouOAjOW5s+WuieS6uuWjvemmmea4r+OAjVwiLFxuXHRcdFx0bTI6IFwi55m76Zm444CM5b6u5L+h44CNQVBQ77yMIOaMieWPs+S4iuinkueahOOAjCvjgI3mjInpiJXkuKbpgbjmk4fjgIzmjoPlo7nmjoPjgI3mjoPmj4/kuIvmlrnkuozntq3norzvvIjmlL7nva7kuozntq3norzvvIlcIlxuXHRcdH0sXG5cdFx0cXJjb2RlOiB7XG5cdFx0XHR0aXRsZTogXCLlrpjmlrnlhaznnL7omZ9cIlxuXHRcdH1cblx0fSxcblx0Y3VzdG9tU2VydmljZToge1xuXHRcdG5hbWU6IFwi5a6i5oi25pyN5YuZXCIsXG5cdFx0bWVudTE6IFwi6IGv57mr5oiR5YCRXCIsXG5cdFx0bWVudTI6IFwi57mz5LuY5L+d6LK7XCIsXG5cdFx0bWVudTM6IFwi5L+d5Zau5p+l6KmiXCIsXG5cdFx0bWVudTQ6IFwi5L+d5Zau6K6K5pu0XCIsXG5cdFx0bWVudTQxOiBcIuS/neWWruiuiuabtOaMh+W8lVwiLFxuXHRcdG1lbnU0MjogXCLoga/ns7vmlrnlvI/orormm7RcIixcblx0XHRtZW51NDM6IFwi5a6i5oi26LOH5paZ6K6K5pu0XCIsXG5cdFx0bWVudTU6IFwi55CG6LOg55Sz6KuLXCIsXG5cdFx0bWVudTY6IFwi6aCQ57SE5pyN5YuZXCIsXG5cdFx0bWVudTc6IFwi5oqV6Ki05Y+X55CGXCIsXG5cdFx0bWVudTg6IFwi5bi455So6KGo5qC8XCIsXG5cdFx0aW5zdXJhbmNlUXVlcnk6IHtcblx0XHRcdEluc3VyYW50TnVtYmVyOiBcIuS/neWWruiZn+eivFwiLFxuXHRcdFx0SW5zdXJhbnQ6IFwi5Y+X5L+d5Lq6XCIsXG5cdFx0XHRJbnN1cmFudE5hbWU6IFwi6Zqq56iu5ZCN56ixXCIsXG5cdFx0XHRJbnN1cmFudEFtb3VudDogXCLkv53poY1cIixcblx0XHRcdGVmZmVjdGl2ZURhdGU6IFwi5L+d6LK75Yiw5pyf5pelXCIsXG5cdFx0XHRwZXJpb2Q6IFwi5L+d6Zqc5bm05pyfXCIsXG5cblx0XHRcdHQyVGl0bGU6IFwi5L+d6Zqc5YWn5a65XCIsXG5cdFx0XHR0Mkluc3VyYW50Q2xhc3NpZnk6IFwi6Zqq56iu5ZCN56ixXCIsXG5cdFx0XHR0Mkluc3VyYW50QW1vdW50OiBcIuS/nemhjVwiLFxuXG5cdFx0XHR0M1RpdGxlOiBcIuWuouaItuizh+aWmVwiLFxuXHRcdFx0dDNJbnN1cmFudE5hbWVDbjogXCLmipXkv53kurrlp5PlkI3vvIjkuK3mlofvvIlcIixcblx0XHRcdHQzSW5zdXJhbnROYW1lRW46IFwi5oqV5L+d5Lq65aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0M0luc3VyYW50SWROdW1iZXI6IFwi6K2J5Lu26Jmf56K8XCIsXG5cdFx0XHR0M0luc3VyYW50Q29udGFjdEFkZHJlc3M6IFwi6IGv57mr5Zyw5Z2AXCIsXG5cdFx0XHR0M0luc3VyYW50QWRkcmVzczogXCLlsYXkvY/lnLDlnYBcIixcblx0XHRcdHQzSW5zdXJhbnRNb2JpbGU6IFwi5omL5o+Q6Zu76KmxXCIsXG5cdFx0XHR0M0luc3VyYW50RW1haWw6IFwi6Zu75a2Q6YO1566xXCIsXG5cdFx0XHR0M0luc3VyZWROYW1lQ246IFwi5Y+X5L+d5Lq65aeT5ZCN77yI5Lit5paH77yJXCIsXG5cdFx0XHR0M0luc3VyZWROYW1lRW46IFwi5Y+X5L+d5Lq65aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0M0luc3VyZWRCaXJ0aGRheTogXCLlh7rnlJ/ml6XmnJ9cIixcblx0XHRcdHQzSW5zdXJlZElkTnVtYmVyOiBcIuitieS7tuiZn+eivFwiLFxuXG5cdFx0XHR0NFRpdGxlOiBcIuWPl+ebiuS6uuizh+aWmVwiLCAvLyB0NEJlbmVmaWNpYXJ5SW5mb3JtYXRpb25cblx0XHRcdHQ0TmFtZUNuOiBcIuWnk+WQje+8iOS4reaWh++8iVwiLFxuXHRcdFx0dDROYW1lRW46IFwi5aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0NFJlbGF0aW9uOiBcIuiIh+WPl+S/neS6uumXnOS/glwiLFxuXHRcdFx0dDRBbGxvY2F0aW9uOiBcIuWIhumFjeavlOS+i1wiLFxuXG5cdFx0XHR0NVRpdGxlOiBcIue5s+iyu+izh+aWmVwiLFxuXHRcdFx0dDVQYXltZW50UGVyaW9kOiBcIue6jOiyu+W5tOacn1wiLFxuXHRcdFx0dDVQYXltZW50TWV0aG9kOiBcIue5s+iyu+aWueW8j1wiLFxuXHRcdFx0dDVQYXltZW50Q3VycmVuY3k6IFwi57mz6LK75bmj56iuXCIsXG5cdFx0XHR0NUN1cnJlbnRQcmVtaXVtOiBcIueVtuacn+S/neiyu1wiLFxuXHRcdFx0dDVQYXltZW50QmFuazogXCLnubPosrvpioDooYxcIixcblx0XHRcdHQ1UGF5bWVudEFjY291bnQ6IFwi57mz6LK75biz6JmfXCIsXG5cblx0XHRcdHQ2VGl0bGU6IFwi57mz6LK76KiY6YyEXCIsXG5cdFx0XHR0NlBheW1lbnRQZXJpb2Q6IFwi57mz6LK75pyfXCIsXG5cdFx0XHR0NlBheW1lbnRNZXRob2Q6IFwi57mz6LK75pa55byPXCIsXG5cdFx0XHR0NkNsb3NpbmdEYXRlOiBcIuWvpuaUtuaXpeacn1wiLFxuXHRcdFx0dDZQYXltZW50QW1vdW50OiBcIue5s+iyu+mHkemhjVwiLFxuXHRcdH0sXG5cdFx0cmVzZXJ2YXRpb246IHtcblx0XHRcdHN1Ym1pdEJ0bjogJ+eiuuiqjScsXG5cdFx0XHRjb250YWN0VHlwZXMgOiBbJ+mbu+ipsSddLFxuXHRcdFx0cmVzZXJ2YXRpb25UeXBlczogWyfmipXkv53lkqjoqaInLCfku6Povqbkv53llq7orormm7QnXSxcblx0XHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdFx0ZTEgOiBcIuiri+Whq+Wvq+ipsumgheWFp+WuuVwiLFxuXHRcdFx0XHRlMiA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr5pa55byPXCJcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQXBCQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBL0JBO0FBc0NBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBUEE7QUE1RUE7QUEyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQW5CQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQTFCQTtBQXlDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUExQkE7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQTFCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQTlDQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVRBO0FBSEE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFQQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBckNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBaEVBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQUlBO0FBREE7QUFmQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBSUE7QUFEQTtBQWxCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQVRBO0FBekZBO0FBeUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBWkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQXZCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0NBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFKQTtBQTFEQTtBQXBtQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/common/lang/tc.js\n");

/***/ }),

/***/ "./src/common/lang/zh.js":
/*!*******************************!*\
  !*** ./src/common/lang/zh.js ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {\n  message: {\n    login: '登录',\n    Username: '用户名',\n    Password: '密码',\n    Captcha: '验证码',\n    Language: '语言',\n    zh: '中文',\n    en: '英文'\n  },\n  glbalTips: {\n    sessionLost: \"为了更好的体验,需要您登录后再进行此操作\"\n  },\n  nav: {\n    loginData: {\n      name: \"登陆\",\n      path: \"\",\n      list: [{\n        name: \"注册\",\n        path: \"/register\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"登陆\",\n        path: \"/login\",\n        type: \"noAuth\",\n        value: \"\"\n      }, {\n        name: \"修改密码\",\n        path: \"/password/reset\",\n        type: \"auth\",\n        value: \"\"\n      }, {\n        name: \"登出\",\n        path: \"\",\n        type: \"auth\",\n        value: \"logout\"\n      }]\n    },\n    navList: [{\n      name: \"产品介绍\",\n      path: \"/product\",\n      list: []\n    }, {\n      name: \"客户服务\",\n      path: \"/custom/product\",\n      list: [{\n        name: \"联系我们\",\n        path: \"/custom/service?q=m1\"\n      }, {\n        name: \"缴付保费\",\n        path: \"/custom/service?q=m2\"\n      }, {\n        name: \"保单查询\",\n        path: \"/custom/service?q=m3\"\n      }, {\n        name: \"保单变更\",\n        path: \"/custom/service?q=m41\"\n      }, {\n        name: \"理赔申请\",\n        path: \"/custom/service?q=m5\"\n      }, {\n        name: \"预约服务\",\n        path: \"/custom/service?q=m6\"\n      }, {\n        name: \"投诉受理\",\n        path: \"/custom/service?q=m7\"\n      }, {\n        name: \"常用表格\",\n        path: \"/custom/service?q=m8\"\n      }]\n    }, {\n      name: \"新闻资讯\",\n      path: \"/news/list\",\n      list: []\n    }, {\n      name: \"关于平安人寿\",\n      path: \"\",\n      list: [{\n        name: \"公司简介\",\n        path: \"/profile\"\n      }, {\n        name: \"领导人概况\",\n        path: \"\"\n      }]\n    }]\n  },\n  footer: {\n    hkPhone: \"客户服务热线(香港)\",\n    cnPhone: \"客户服务热线(内地)\",\n    aboutUs: \"关于我们\",\n    companyIntroduction: \"公司介绍\",\n    news: \"新闻资讯\",\n    joinUs: \"加入我们\",\n    helpCenter: \"帮助中心\",\n    privacy: \"隐私政策\",\n    terms: \"使用条款\",\n    map: \"网站地图\",\n    contactUs: \"联络我们\",\n    contactInformation: \"联系方式\",\n    service: \"服务网点\",\n    qrcode: \"官方公众号\",\n    copyright: \"版权所有 © 中国平安保险(集团)股份有限公司未经许可不得复制、转载或摘编,违者必究!\"\n  },\n  login: {\n    title: \"平安一账通\",\n    loginType1: \"账密登录\",\n    loginType2: \"动态密码登录\",\n    account: \"账号\",\n    accountPlaceholder: \"请输入证件号/一账通用户名/手机号\",\n    password: \"密码\",\n    passwordPlaceholder: \"输入登录密码\",\n    verifyPlaceholder: \"请输入验证码\",\n    agree: \"同意\",\n    protocol: \"《平安一账通会员服务协议》\",\n    login: \"登入\",\n    register: \"注册\",\n    forget: \"忘记密码\",\n    mobile: \"手机号\",\n    mobilePlaceholder: \"手机号\",\n    verifyCode: \"验证码\",\n    verifyCodePlaceholder: \"验证码\",\n    verifyCodeGet: \"获取验证码\",\n    tips: {\n      e1: \"请输入账号信息\",\n      e2: \"请输入密码\",\n      e3: \"请输入图像验证码\",\n      e4: \"请同意《平安一账通会员服务协议》\",\n      e5: \"账号或密码不正确\",\n      oe0: \"请输入正确的手机号\",\n      oe1: \"请先获取短信验证码\",\n      oe2: \"请输入图片验证码\",\n      oe3: \"请输入短信验证码\",\n      oe4: \"短信验证码不正确\"\n    }\n  },\n  session: {\n    sidExpire: \"长时间未操作,为了您的账户安全,请登录后再操作\"\n  },\n  register: {\n    mobileOptions: [{\n      type: \"hk\",\n      name: \"香港手机号\",\n      placeHolder: \"请输入8位手机号码\",\n      areaCode: \"+852\"\n    }, {\n      type: \"zh\",\n      name: \"大陆手机号\",\n      placeHolder: \"请输入11位手机号码\",\n      areaCode: \"+86\"\n    }],\n    coutTips: \"{second}秒后重新获取\",\n    title: \"欢迎注册\",\n    title2: \"请设置新的密码\",\n    mobilePlaceholder: \"请输入8位手机号码\",\n    verifyCodePlaceholder: \"请输入验证码\",\n    verifyCodeGet: \"获取验证码\",\n    agree: \"同意\",\n    protocol: \"《平安一账通会员服务协议》\",\n    register: \"点击注册\",\n    newPassword: \"新密码\",\n    newPasswordPlaceholder: \"输入登录密码\",\n    newPasswordSure: \"确认密码\",\n    newPasswordSurePlaceholder: \"输入登录密码\",\n    sure: \"确认\",\n    tips: {\n      e1: \"手机号不正确,请输入正确的手机号\",\n      e2: \"请同意《平安一账通会员服务协议》\",\n      e3: \"短信验证码不正确\",\n      e4: \"请先获取短信验证码\",\n      e5: \"手机号已经被注册,请使用其他手机号注册或直接登录\",\n      e6: \"请输入图片验证码\",\n      e7: \"密码长度不能少于8位\",\n      e8: \"密码必须同时包含数字、字母、特殊字符\",\n      e9: \"两次输入的密码不一致\",\n      e10: \"验证码过期,请重新申请验证码\",\n      e11: \"注册失败,请联系工作人员\",\n      e12: \"註冊成功\"\n    }\n  },\n  passwordCheck: {\n    error1: \"密码长度不少于8位\",\n    error2: \"密码中必须包含数字、字符以及特殊号码\",\n    error3: \"两次密码不一致,请确认后重新输入\",\n    error4: \"密码修改失败,请稍后再试,或拨打客服电话95511解决\",\n    error5: \"旧密码不正确,请重新输入\",\n    success: \"密码修改成功\"\n  },\n  passwordReset: {\n    oldPwd: \"旧密码\",\n    oldPwdPlaceholde: \"请输入旧密码\",\n    cidExpire: \"长时间未操作,为了您的账户安全,请重新开始\",\n    type1: {\n      title: \"密码找回\",\n      t1: \"用户输入信息\",\n      t1Placeholder: \"手机号/证件号\",\n      submit: \"确认\",\n      error: \"您的手机号或证件号输入错误,请核对后重新输入\"\n    },\n    type2: {\n      title: \"密码找回\",\n      t1: \"手机短信验证码\",\n      t1Placeholder: \"请输入验证码\",\n      submit: \"确认\",\n      error1: \"短信验证码输入错误,请核对后重新输入\",\n      error2: \"短信验证码已经过期,请重新获取验证码\",\n      error3: \"短信验证码发放时间少于1分钟,请稍后再试\"\n    },\n    type3: {\n      title: \"密码找回\",\n      t1: \"核对身份证信息\",\n      t1Placeholder: \"\",\n      submit: \"确认\"\n    },\n    type4: {\n      title: \"请设置新的密码\",\n      t1: \"新密码\",\n      t1Placeholder: \"请输入新密码\",\n      t2: \"确认密码\",\n      t2Placeholder: \"请重新输入新密码\",\n      submit: \"确认\"\n    }\n  },\n  infomationImprove: {\n    title: \"请完善您的信息\",\n    t1: \"姓名\",\n    t1Placeholder: \"\",\n    t2: \"性别\",\n    t2Placeholder: \"\",\n    t3: \"出生日期\",\n    t3Placeholder: \"\",\n    t4: \"证件类型\",\n    t4Placeholder: \"\",\n    t5: \"证件号码\",\n    t5Placeholder: \"\",\n    submit: \"确认\",\n    cancel: \"跳过\",\n    candidates: {\n      sex: [{\n        name: \"男\",\n        value: \"M\"\n      }, {\n        name: \"女\",\n        value: \"F\"\n      }],\n      idType: [{\n        name: \"身份证\",\n        value: \"1\"\n      }, {\n        name: \"护照\",\n        value: \"2\"\n      }, {\n        name: \"军官证或士兵证\",\n        value: \"3\"\n      }, {\n        name: \"港澳通行证/回乡证或台胞证\",\n        value: \"6\"\n      }, {\n        name: \"外国人永久居留身份证\",\n        value: \"0\"\n      }, {\n        name: \"港澳居民居住证\",\n        value: \"V\"\n      }, {\n        name: \"台湾居民居住证\",\n        value: \"W\"\n      }]\n    },\n    successMsg: \"更新成功\",\n    errorTips: {\n      e1: \"请填写姓名信息\",\n      e2: \"请选择性别\",\n      e3: \"请选择生日\",\n      e4: \"请选择证件类型\",\n      e5: \"请填写证件号码\",\n      e6: \"您填写的证件号码有误\",\n      e7: \"您填写的信息有误,请核实后重新提交\"\n    }\n  },\n  index: {\n    news: \"新闻资讯\",\n    newMore: \"查看更多\",\n    recommend: {\n      item1: {\n        btn: \"了解更多产品\",\n        t1: \"为自己和家人寻找一份保障\"\n      },\n      item2: {\n        btn: \"立即预约\",\n        t1: \"在线预约 专业服务\"\n      },\n      item3: {\n        btn: \"客户服务\",\n        t1: \"专业客服为你服务\",\n        t2: \"想了解更多,可致电\",\n        t3: \"95511\",\n        t4: \"联络我们,或进入\"\n      }\n    }\n  },\n  complaintAcceptance: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"联络方式\",\n    email: \"电邮地址\",\n    question: \"问题或意见\",\n    questionPlaceHolder: \"(字数不超过500字)\",\n    orderNo: \"保单编号\",\n    orderNoPlaceHolder: \"如您为平安客户,请提供保单编号\",\n    contactTime: \"期望联络时间\",\n    notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n    notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\",\n    contactTypes: ['电话', '电邮'],\n    errorTips: {\n      e1: \"请填写该项内容\",\n      e2: \"请填写正确的联系方式\"\n    }\n  },\n  reservation: {\n    name: \"姓名\",\n    namePlaceholder: \"姓名\",\n    contactType: \"联络方式\",\n    contact: \"联络电话\",\n    contactPlaceholder: \"香港号码/内地号码\",\n    reservationType: \"预约类型\",\n    reservationRemark: \"预约说明\",\n    reservationRemarkPlaceholder: \"请简单说明您想要咨询的产品或业务\",\n    hkClient: \"是否平安香港客户\",\n    yes: \"是\",\n    no: \"否\",\n    contactTime: \"期望联络时间\",\n    notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n    notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\"\n  },\n  paymentType: {\n    menu1: \"亲临客服中心付款\",\n    menu2: \"网银付款\",\n    menu3: \"电汇付款\",\n    menu4: \"柜员机付款\",\n    menu5: \"「缴费灵」付款\",\n    menu6: \"香港邮政局\"\n  },\n  product: {\n    btnPosition: \"预约服务\",\n    iconProblem: \"常见问题\",\n    iconProcess: \"投保流程\",\n    iconProduct: \"产品详情\"\n  },\n  customProduct: {\n    menu1: \"联系我们\",\n    menu2: \"缴付保费\",\n    menu3: \"保单查询\",\n    menu4: \"保单变更\",\n    menu5: \"理赔申请\",\n    menu6: \"预约服务\",\n    menu7: \"投诉受理\",\n    menu8: \"常用表格\"\n  },\n  commonForm: {\n    head1: \"表格类型\",\n    head2: \"表格名称\",\n    head3: \"使用说明\",\n    head4: \"附件\",\n    download: \"下载文档\",\n    form: [{\n      type: \"缴费类\",\n      list: [{\n        name: \"「电子入账服务」及银行户口<br>直接付款授权申请\",\n        desc: \"申请设立「电子入账服务」及银行户口<br>直接付款授权时须提供\",\n        download: \"\"\n      }, {\n        name: \"信用卡户口直接付款授权书\",\n        desc: \"申请信用卡户口直接付款授权时须提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"保单变更类\",\n      list: [{\n        name: \"保险合同解除申请书\",\n        desc: \"退保、犹豫期退保业务适用\",\n        download: \"\"\n      }, {\n        name: \"保险合同变更申请书(保单贷款还款类)\",\n        desc: \"保单贷款、还款业务适用\",\n        download: \"\"\n      }, {\n        name: \"保险合同变更申请书(保险合同计划变更类)\",\n        desc: \"加保、减保、新增附险、复效等业务适用\",\n        download: \"\"\n      }, {\n        name: \"保险合同变更申请书(客户信息变更类)\",\n        desc: \"基本信息变更业务适用\",\n        download: \"\"\n      }, {\n        name: \"保险合同变更申请书(客户权益变更类)\",\n        desc: \"交费方式、自垫选择权变更、补发等业务适用\",\n        download: \"\"\n      }, {\n        name: \"授权委托书\",\n        desc: \"委托他人代办时须提供\",\n        download: \"\"\n      }, {\n        name: \"税收声明\",\n        desc: \"CRS要求\",\n        download: \"\"\n      }, {\n        name: \"健康告知\",\n        desc: \"须二次核保的业务须提供\",\n        download: \"\"\n      }]\n    }, {\n      type: \"理赔类\",\n      list: [{\n        name: \"理赔申请书\",\n        desc: \"纸质申请的应备文件\",\n        download: \"\"\n      }]\n    }]\n  },\n  policyChangeGuide: {\n    notice: \"如需做其他保单变更联系客服(联系客服超链接跳转公司联系信息页)\",\n    head1: \"项目\",\n    head2: \"具体内容\",\n    head3: \"申请资格人\",\n    head4: \"受理时间\",\n    head5: \"应备材料\",\n    download: \"下载文档\",\n    form: [{\n      project: \"退保\",\n      content: \"在犹豫期后解除合同,公司将退还保单现金价值或未满期净保费。(待产品精算确认)\",\n      applicant: \"投保人\",\n      receptionTime: \"保单效力终止前\",\n      materialList: [{\n        name: \"保险单\"\n      }, {\n        name: \"申请书\",\n        type: 1\n      }, {\n        name: \"投保人有效身份证件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }]\n    }, {\n      project: \"犹豫期退保\",\n      content: \"在犹豫期内提出解除合同,公司会无息退还全部保费\",\n      applicant: \"投保人\",\n      receptionTime: \"犹豫期结束前\",\n      materialList: [{\n        name: \"保险单\"\n      }, {\n        name: \"申请书\",\n        type: 1\n      }, {\n        name: \"投保人有效身份证件\"\n      }, {\n        name: \"存折银行卡相关\"\n      }, {\n        name: \"首期保费发票\"\n      }]\n    }, {\n      project: \"客户资料变更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m42\"\n      },\n      content: \"投保人、受保人、受益人的个人信息变更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申请书\",\n        type: 1\n      }, {\n        name: \"必要的证明材料\"\n      }]\n    }, {\n      project: \"联系信息变更\",\n      projectType: 1,\n      path: \"/custom/service\",\n      query: {\n        q: \"m43\"\n      },\n      content: \"地址、电话等信息的变更\",\n      applicant: \"投保人\",\n      receptionTime: \"不限\",\n      materialList: [{\n        name: \"申请书\",\n        type: 1\n      }, {\n        name: \"投保人有效身份证件\"\n      }]\n    }, {\n      project: \"交费方式变更\",\n      content: \"更改保单的续期交费方式或交费账号\",\n      applicant: \"投保人\",\n      receptionTime: \"保单交费期满前\",\n      materialList: [{\n        name: \"申请书\",\n        type: 1\n      }, {\n        name: \"保险单\"\n      }]\n    }]\n  },\n  policyChangeContact: {\n    phone: \"联系电话\",\n    address: \"联系地址\",\n    email: \"E-Mail\",\n    checkTips: \"本人不同意接收宣传信息\",\n    submit: \"确认修改\",\n    errorTips: {\n      e1: \"請填寫正確的聯繫電話\",\n      e2: \"請填寫聯繫地址\",\n      e3: \"請填寫正確的E-Mail地址\"\n    }\n  },\n  policyChangeInformation: {\n    hkClient: \"是否平安香港客戶\",\n    yes: \"是\",\n    no: \"否\",\n    obj: \"变更对象\",\n    name: \"姓名\",\n    sex: \"性别\",\n    birth: \"出生日期\",\n    type: \"证件类型\",\n    NO: \"证件号码\",\n    validityPeriod: \"证件有效期\",\n    nationality: \"国籍\",\n    employer: \"工作单位\",\n    maritalStatus: \"婚姻状况\",\n    submit: \"确认修改\",\n    upload: \"附件上传\",\n    modifyTips1: \"如需修改请\",\n    modifyTips2: \"联系客服\"\n  },\n  contactUs: {\n    service: {\n      center: {\n        title: \"客户服务中心\",\n        address: \"地址:香港尖沙嘴港威永金融大楼\",\n        time: \"服务时间:星期一至五9:00-18:00\"\n      },\n      hotline: {\n        title: \"客户服务热线\",\n        hk: \"香港号码:(852)2983 8866\",\n        cn: \"内地号码:(86)40078 95511\",\n        time: \"服务时间:星期一至五9:00-18:00\"\n      },\n      mail: {\n        title: \"客户服务电邮\",\n        mail: \"cs@pingan.com.hk\"\n      }\n    },\n    pulbic: {\n      title: \"微信公众号\",\n      m1: \"登陆「微信」APP, 按右上角的「+」按钮並选择「添加朋友」,选择「公众号」 输入并搜索「平安人寿香港」\",\n      m2: \"登陆「微信」APP, 按右上角的「+」按钮並选择「扫一扫」扫描下方二维码(放置二维码)\"\n    },\n    qrcode: {\n      title: \"官方公众号\"\n    }\n  },\n  customService: {\n    name: \"客户服务\",\n    menu1: \"联系我们\",\n    menu2: \"缴付保费\",\n    menu3: \"保单查询\",\n    menu4: \"保单变更\",\n    menu41: \"保单变更指引\",\n    menu42: \"联系方式变更\",\n    menu43: \"客户资料变更\",\n    menu5: \"理赔申请\",\n    menu6: \"预约服务\",\n    menu7: \"投诉受理\",\n    menu8: \"常用表格\",\n    insuranceQuery: {\n      InsurantNumber: \"保单号码\",\n      Insurant: \"受保人\",\n      InsurantName: \"险种名称\",\n      InsurantAmount: \"保额\",\n      effectiveDate: \"保费到期日\",\n      period: \"保障年期\",\n      t2Title: \"保障内容\",\n      t2InsurantClassify: \"险种名称\",\n      t2InsurantAmount: \"保额\",\n      t3Title: \"客户资料\",\n      t3InsurantNameCn: \"投保人姓名(中文)\",\n      t3InsurantNameEn: \"投保人姓名(英文)\",\n      t3InsurantIdNumber: \"证件号码\",\n      t3InsurantContactAddress: \"联系地址\",\n      t3InsurantAddress: \"居住地址\",\n      t3InsurantMobile: \"手提电话\",\n      t3InsurantEmail: \"电子邮箱\",\n      t3InsuredNameCn: \"受保人姓名(中文)\",\n      t3InsuredNameEn: \"受保人姓名(英文)\",\n      t3InsuredBirthday: \"出生日期\",\n      t3InsuredIdNumber: \"证件号码\",\n      t4Title: \"受益人资料\",\n      // t4BeneficiaryInformation\n      t4NameCn: \"姓名(中文)\",\n      t4NameEn: \"姓名(英文)\",\n      t4Relation: \"与受保人关系\",\n      t4Allocation: \"分配比例\",\n      t5Title: \"缴费资料\",\n      t5PaymentPeriod: \"缴费年期\",\n      t5PaymentMethod: \"缴费方式\",\n      t5PaymentCurrency: \"缴费币种\",\n      t5CurrentPremium: \"当期保费\",\n      t5PaymentBank: \"缴费银行\",\n      t5PaymentAccount: \"缴费账号\",\n      t6Title: \"缴费记录\",\n      t6PaymentPeriod: \"缴费期\",\n      t6PaymentMethod: \"缴费方式\",\n      t6ClosingDate: \"实收日期\",\n      t6PaymentAmount: \"缴费金额\"\n    },\n    reservation: {\n      submitBtn: '确认',\n      contactTypes: ['電話'],\n      reservationTypes: ['投保咨询', '代办保单变更'],\n      errorTips: {\n        e1: \"請填寫該項內容\",\n        e2: \"請填寫正確的聯繫方式\"\n      }\n    }\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvemguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvemguanM/MjNkMCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAn55m75b2VJyxcblx0XHRVc2VybmFtZTogJ+eUqOaIt+WQjScsXG5cdFx0UGFzc3dvcmQ6ICflr4bnoIEnLFxuXHRcdENhcHRjaGE6ICfpqozor4HnoIEnLFxuXHRcdExhbmd1YWdlOiAn6K+t6KiAJyxcblx0XHR6aDogJ+S4reaWhycsXG5cdFx0ZW46ICfoi7HmlocnXG5cdH0sXG5cdGdsYmFsVGlwczoge1xuXHRcdHNlc3Npb25Mb3N0OiBcIuS4uuS6huabtOWlveeahOS9k+mqjO+8jOmcgOimgeaCqOeZu+W9leWQjuWGjei/m+ihjOatpOaTjeS9nFwiXG5cdH0sXG5cdG5hdjoge1xuXHRcdGxvZ2luRGF0YToge1xuXHRcdFx0bmFtZTogXCLnmbvpmYZcIixcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuazqOWGjFwiLFxuXHRcdFx0XHRwYXRoOiBcIi9yZWdpc3RlclwiLFxuXHRcdFx0XHR0eXBlOiBcIm5vQXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIueZu+mZhlwiLFxuXHRcdFx0XHRwYXRoOiBcIi9sb2dpblwiLFxuXHRcdFx0XHR0eXBlOiBcIm5vQXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv67mlLnlr4bnoIFcIixcblx0XHRcdFx0cGF0aDogXCIvcGFzc3dvcmQvcmVzZXRcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueZu+WHulwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHR0eXBlOiBcImF1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwibG9nb3V0XCJcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdG5hdkxpc3Q6IFt7XG5cdFx0XHRuYW1lOiBcIuS6p+WTgeS7i+e7jVwiLFxuXHRcdFx0cGF0aDogXCIvcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5a6i5oi35pyN5YqhXCIsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLogZTns7vmiJHku6xcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0yXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d5Y2V5p+l6K+iXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTNcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53ljZXlj5jmm7RcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNDFcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnkIbotZTnlLPor7dcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIumihOe6puacjeWKoVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW02XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5oqV6K+J5Y+X55CGXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLluLjnlKjooajmoLxcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tOFwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCLmlrDpl7votYTorq9cIixcblx0XHRcdHBhdGg6IFwiL25ld3MvbGlzdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5YWz5LqO5bmz5a6J5Lq65a+/XCIsXG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLlhazlj7jnroDku4tcIixcblx0XHRcdFx0cGF0aDogXCIvcHJvZmlsZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIumihuWvvOS6uuamguWGtVwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRmb290ZXI6IHtcblx0XHRoa1Bob25lOiBcIuWuouaIt+acjeWKoeeDree6v++8iOmmmea4r++8iVwiLFxuXHRcdGNuUGhvbmU6IFwi5a6i5oi35pyN5Yqh54Ot57q/77yI5YaF5Zyw77yJXCIsXG5cdFx0YWJvdXRVczogXCLlhbPkuo7miJHku6xcIixcblx0XHRjb21wYW55SW50cm9kdWN0aW9uOiBcIuWFrOWPuOS7i+e7jVwiLFxuXHRcdG5ld3M6IFwi5paw6Ze76LWE6K6vXCIsXG5cdFx0am9pblVzOiBcIuWKoOWFpeaIkeS7rFwiLFxuXHRcdGhlbHBDZW50ZXI6IFwi5biu5Yqp5Lit5b+DXCIsXG5cdFx0cHJpdmFjeTogXCLpmpDnp4HmlL/nrZZcIixcblx0XHR0ZXJtczogXCLkvb/nlKjmnaHmrL5cIixcblx0XHRtYXA6IFwi572R56uZ5Zyw5Zu+XCIsXG5cdFx0Y29udGFjdFVzOiBcIuiBlOe7nOaIkeS7rFwiLFxuXHRcdGNvbnRhY3RJbmZvcm1hdGlvbjogXCLogZTns7vmlrnlvI9cIixcblx0XHRzZXJ2aWNlOiBcIuacjeWKoee9keeCuVwiLFxuXHRcdHFyY29kZTogXCLlrpjmlrnlhazkvJflj7dcIixcblx0XHRjb3B5cmlnaHQ6IFwi54mI5p2D5omA5pyJIMKpIOS4reWbveW5s+WuieS/nemZqe+8iOmbhuWbou+8ieiCoeS7veaciemZkOWFrOWPuOacque7j+iuuOWPr+S4jeW+l+WkjeWItuOAgei9rOi9veaIluaRmOe8lu+8jOi/neiAheW/heeptiFcIlxuXHR9LFxuXHRsb2dpbjoge1xuXHRcdHRpdGxlOiBcIuW5s+WuieS4gOi0pumAmlwiLFxuXHRcdGxvZ2luVHlwZTE6IFwi6LSm5a+G55m75b2VXCIsXG5cdFx0bG9naW5UeXBlMjogXCLliqjmgIHlr4bnoIHnmbvlvZVcIixcblx0XHRhY2NvdW50OiBcIui0puWPt1wiLFxuXHRcdGFjY291bnRQbGFjZWhvbGRlcjogXCLor7fovpPlhaXor4Hku7blj7cv5LiA6LSm6YCa55So5oi35ZCNL+aJi+acuuWPt1wiLFxuXHRcdHBhc3N3b3JkOiBcIuWvhueggVwiLFxuXHRcdHBhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6L6T5YWl55m75b2V5a+G56CBXCIsXG5cdFx0dmVyaWZ5UGxhY2Vob2xkZXI6IFwi6K+36L6T5YWl6aqM6K+B56CBXCIsXG5cdFx0YWdyZWU6IFwi5ZCM5oSPXCIsXG5cdFx0cHJvdG9jb2w6IFwi44CK5bmz5a6J5LiA6LSm6YCa5Lya5ZGY5pyN5Yqh5Y2P6K6u44CLXCIsXG5cdFx0bG9naW46IFwi55m75YWlXCIsXG5cdFx0cmVnaXN0ZXI6IFwi5rOo5YaMXCIsXG5cdFx0Zm9yZ2V0OiBcIuW/mOiusOWvhueggVwiLFxuXHRcdG1vYmlsZTogXCLmiYvmnLrlj7dcIixcblx0XHRtb2JpbGVQbGFjZWhvbGRlcjogXCLmiYvmnLrlj7dcIixcblx0XHR2ZXJpZnlDb2RlOiBcIumqjOivgeeggVwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLpqozor4HnoIFcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIuiOt+WPlumqjOivgeeggVwiLFxuXHRcdHRpcHM6IHtcblx0XHRcdGUxOiBcIuivt+i+k+WFpei0puWPt+S/oeaBr1wiLFxuXHRcdFx0ZTI6IFwi6K+36L6T5YWl5a+G56CBXCIsXG5cdFx0XHRlMzogXCLor7fovpPlhaXlm77lg4/pqozor4HnoIFcIixcblx0XHRcdGU0OiBcIuivt+WQjOaEj+OAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdFx0ZTU6IFwi6LSm5Y+35oiW5a+G56CB5LiN5q2j56GuXCIsXG5cdFx0XHRvZTA6IFwi6K+36L6T5YWl5q2j56Gu55qE5omL5py65Y+3XCIsXG5cdFx0XHRvZTE6IFwi6K+35YWI6I635Y+W55+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHRvZTI6IFwi6K+36L6T5YWl5Zu+54mH6aqM6K+B56CBXCIsXG5cdFx0XHRvZTM6IFwi6K+36L6T5YWl55+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHRvZTQ6IFwi55+t5L+h6aqM6K+B56CB5LiN5q2j56GuXCIsXG5cdFx0fVxuXHR9LFxuXHRzZXNzaW9uOiB7XG5cdFx0c2lkRXhwaXJlOiBcIumVv+aXtumXtOacquaTjeS9nO+8jOS4uuS6huaCqOeahOi0puaIt+WuieWFqO+8jOivt+eZu+W9leWQjuWGjeaTjeS9nFwiLFxuXHR9LFxuXHRyZWdpc3Rlcjoge1xuXHRcdG1vYmlsZU9wdGlvbnM6IFt7XG5cdFx0XHR0eXBlOiBcImhrXCIsXG5cdFx0XHRuYW1lOiBcIummmea4r+aJi+acuuWPt1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6K+36L6T5YWlOOS9jeaJi+acuuWPt+eggVwiLFxuXHRcdFx0YXJlYUNvZGU6IFwiKzg1MlwiXG5cdFx0fSwge1xuXHRcdFx0dHlwZTogXCJ6aFwiLFxuXHRcdFx0bmFtZTogXCLlpKfpmYbmiYvmnLrlj7dcIixcblx0XHRcdHBsYWNlSG9sZGVyOiBcIuivt+i+k+WFpTEx5L2N5omL5py65Y+356CBXCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODZcIlxuXHRcdH1dLFxuXHRcdGNvdXRUaXBzOiBcIntzZWNvbmR956eS5ZCO6YeN5paw6I635Y+WXCIsXG5cdFx0dGl0bGU6IFwi5qyi6L+O5rOo5YaMXCIsXG5cdFx0dGl0bGUyOiBcIuivt+iuvue9ruaWsOeahOWvhueggVwiLFxuXHRcdG1vYmlsZVBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpTjkvY3miYvmnLrlj7fnoIFcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6K+36L6T5YWl6aqM6K+B56CBXCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLojrflj5bpqozor4HnoIFcIixcblx0XHRhZ3JlZTogXCLlkIzmhI9cIixcblx0XHRwcm90b2NvbDogXCLjgIrlubPlronkuIDotKbpgJrkvJrlkZjmnI3liqHljY/orq7jgItcIixcblx0XHRyZWdpc3RlcjogXCLngrnlh7vms6jlhoxcIixcblx0XHRuZXdQYXNzd29yZDogXCLmlrDlr4bnoIFcIixcblx0XHRuZXdQYXNzd29yZFBsYWNlaG9sZGVyOiBcIui+k+WFpeeZu+W9leWvhueggVwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZTogXCLnoa7orqTlr4bnoIFcIixcblx0XHRuZXdQYXNzd29yZFN1cmVQbGFjZWhvbGRlcjogXCLovpPlhaXnmbvlvZXlr4bnoIFcIixcblx0XHRzdXJlOiBcIuehruiupFwiLFxuXHRcdHRpcHM6IHtcblx0XHRcdGUxOiBcIuaJi+acuuWPt+S4jeato+ehru+8jOivt+i+k+WFpeato+ehrueahOaJi+acuuWPt1wiLFxuXHRcdFx0ZTI6IFwi6K+35ZCM5oSP44CK5bmz5a6J5LiA6LSm6YCa5Lya5ZGY5pyN5Yqh5Y2P6K6u44CLXCIsXG5cdFx0XHRlMzogXCLnn63kv6Hpqozor4HnoIHkuI3mraPnoa5cIixcblx0XHRcdGU0OiBcIuivt+WFiOiOt+WPluefreS/oemqjOivgeeggVwiLFxuXHRcdFx0ZTU6IFwi5omL5py65Y+35bey57uP6KKr5rOo5YaM77yM6K+35L2/55So5YW25LuW5omL5py65Y+35rOo5YaM5oiW55u05o6l55m75b2VXCIsXG5cdFx0XHRlNjogXCLor7fovpPlhaXlm77niYfpqozor4HnoIFcIixcblx0XHRcdGU3OiBcIuWvhueggemVv+W6puS4jeiDveWwkeS6jjjkvY1cIixcblx0XHRcdGU4OiBcIuWvhueggeW/hemhu+WQjOaXtuWMheWQq+aVsOWtl+OAgeWtl+avjeOAgeeJueauiuWtl+esplwiLFxuXHRcdFx0ZTk6IFwi5Lik5qyh6L6T5YWl55qE5a+G56CB5LiN5LiA6Ie0XCIsXG5cdFx0XHRlMTA6IFwi6aqM6K+B56CB6L+H5pyf77yM6K+36YeN5paw55Sz6K+36aqM6K+B56CBXCIsXG5cdFx0XHRlMTE6IFwi5rOo5YaM5aSx6LSl77yM6K+36IGU57O75bel5L2c5Lq65ZGYXCIsXG5cdFx0XHRlMTI6IFwi6Ki75YaK5oiQ5YqfXCIsXG5cdFx0fVxuXHR9LFxuXHRwYXNzd29yZENoZWNrOiB7XG5cdFx0ZXJyb3IxOiBcIuWvhueggemVv+W6puS4jeWwkeS6jjjkvY1cIixcblx0XHRlcnJvcjI6IFwi5a+G56CB5Lit5b+F6aG75YyF5ZCr5pWw5a2X44CB5a2X56ym5Lul5Y+K54m55q6K5Y+356CBXCIsXG5cdFx0ZXJyb3IzOiBcIuS4pOasoeWvhueggeS4jeS4gOiHtO+8jOivt+ehruiupOWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdGVycm9yNDogXCLlr4bnoIHkv67mlLnlpLHotKXvvIzor7fnqI3lkI7lho3or5XvvIzmiJbmi6jmiZPlrqLmnI3nlLXor505NTUxMeino+WGs1wiLFxuXHRcdGVycm9yNTogXCLml6flr4bnoIHkuI3mraPnoa7vvIzor7fph43mlrDovpPlhaVcIixcblx0XHRzdWNjZXNzOiBcIuWvhueggeS/ruaUueaIkOWKn1wiXG5cdH0sXG5cdHBhc3N3b3JkUmVzZXQ6IHtcblx0XHRvbGRQd2Q6IFwi5pen5a+G56CBXCIsXG5cdFx0b2xkUHdkUGxhY2Vob2xkZTogXCLor7fovpPlhaXml6flr4bnoIFcIixcblx0XHRjaWRFeHBpcmU6IFwi6ZW/5pe26Ze05pyq5pON5L2c77yM5Li65LqG5oKo55qE6LSm5oi35a6J5YWo77yM6K+36YeN5paw5byA5aeLXCIsXG5cdFx0dHlwZTE6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueggeaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi55So5oi36L6T5YWl5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuaJi+acuuWPty/or4Hku7blj7dcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHRcdGVycm9yOiBcIuaCqOeahOaJi+acuuWPt+aIluivgeS7tuWPt+i+k+WFpemUmeivr++8jOivt+aguOWvueWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdH0sXG5cdFx0dHlwZTI6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueggeaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5omL5py655+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpemqjOivgeeggVwiLFxuXHRcdFx0c3VibWl0OiBcIuehruiupFwiLFxuXHRcdFx0ZXJyb3IxOiBcIuefreS/oemqjOivgeeggei+k+WFpemUmeivr++8jOivt+aguOWvueWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdFx0ZXJyb3IyOiBcIuefreS/oemqjOivgeeggeW3sue7j+i/h+acn++8jOivt+mHjeaWsOiOt+WPlumqjOivgeeggVwiLFxuXHRcdFx0ZXJyb3IzOiBcIuefreS/oemqjOivgeeggeWPkeaUvuaXtumXtOWwkeS6jjHliIbpkp/vvIzor7fnqI3lkI7lho3or5VcIixcblx0XHR9LFxuXHRcdHR5cGUzOiB7XG5cdFx0XHR0aXRsZTogXCLlr4bnoIHmib7lm55cIixcblx0XHRcdHQxOiBcIuaguOWvuei6q+S7veivgeS/oeaBr1wiLFxuXHRcdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHR9LFxuXHRcdHR5cGU0OiB7XG5cdFx0XHR0aXRsZTogXCLor7forr7nva7mlrDnmoTlr4bnoIFcIixcblx0XHRcdHQxOiBcIuaWsOWvhueggVwiLFxuXHRcdFx0dDFQbGFjZWhvbGRlcjogXCLor7fovpPlhaXmlrDlr4bnoIFcIixcblx0XHRcdHQyOiBcIuehruiupOWvhueggVwiLFxuXHRcdFx0dDJQbGFjZWhvbGRlcjogXCLor7fph43mlrDovpPlhaXmlrDlr4bnoIFcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHR9XG5cdH0sXG5cdGluZm9tYXRpb25JbXByb3ZlOiB7XG5cdFx0dGl0bGU6IFwi6K+35a6M5ZaE5oKo55qE5L+h5oGvXCIsXG5cdFx0dDE6IFwi5aeT5ZCNXCIsXG5cdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0MjogXCLmgKfliKtcIixcblx0XHR0MlBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQzOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHQzUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDQ6IFwi6K+B5Lu257G75Z6LXCIsXG5cdFx0dDRQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NTogXCLor4Hku7blj7fnoIFcIixcblx0XHR0NVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHRjYW5jZWw6IFwi6Lez6L+HXCIsXG5cdFx0Y2FuZGlkYXRlczoge1xuXHRcdFx0c2V4OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUt1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJNXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlpbNcIixcblx0XHRcdFx0dmFsdWU6IFwiRlwiXG5cdFx0XHR9XSxcblx0XHRcdGlkVHlwZTogW3tcblx0XHRcdFx0bmFtZTogXCLouqvku73or4FcIixcblx0XHRcdFx0dmFsdWU6IFwiMVwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5oqk54WnXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWGm+WumOivgeaIluWjq+WFteivgVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIzXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPpgJrooYzor4Ev5Zue5Lmh6K+B5oiW5Y+w6IOe6K+BXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjZcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWkluWbveS6uuawuOS5heWxheeVmei6q+S7veivgVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIwXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPlsYXmsJHlsYXkvY/or4FcIixcblx0XHRcdFx0dmFsdWU6IFwiVlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5Y+w5rm+5bGF5rCR5bGF5L2P6K+BXCIsXG5cdFx0XHRcdHZhbHVlOiBcIldcIlxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdHN1Y2Nlc3NNc2c6IFwi5pu05paw5oiQ5YqfXCIsXG5cdFx0ZXJyb3JUaXBzOiB7XG5cdFx0XHRlMTogXCLor7floavlhpnlp5PlkI3kv6Hmga9cIixcblx0XHRcdGUyOiBcIuivt+mAieaLqeaAp+WIq1wiLFxuXHRcdFx0ZTM6IFwi6K+36YCJ5oup55Sf5pelXCIsXG5cdFx0XHRlNDogXCLor7fpgInmi6nor4Hku7bnsbvlnotcIixcblx0XHRcdGU1OiBcIuivt+Whq+WGmeivgeS7tuWPt+eggVwiLFxuXHRcdFx0ZTY6IFwi5oKo5aGr5YaZ55qE6K+B5Lu25Y+356CB5pyJ6K+vXCIsXG5cdFx0XHRlNzogXCLmgqjloavlhpnnmoTkv6Hmga/mnInor6/vvIzor7fmoLjlrp7lkI7ph43mlrDmj5DkuqRcIixcblx0XHR9XG5cdH0sXG5cdGluZGV4OiB7XG5cdFx0bmV3czogXCLmlrDpl7votYTorq9cIixcblx0XHRuZXdNb3JlOiBcIuafpeeci+abtOWkmlwiLFxuXHRcdHJlY29tbWVuZDoge1xuXHRcdFx0aXRlbTE6IHtcblx0XHRcdFx0YnRuOiBcIuS6huino+abtOWkmuS6p+WTgVwiLFxuXHRcdFx0XHR0MTogXCLkuLroh6rlt7Hlkozlrrbkurrlr7vmib7kuIDku73kv53pmpxcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMjoge1xuXHRcdFx0XHRidG46IFwi56uL5Y2z6aKE57qmXCIsXG5cdFx0XHRcdHQxOiBcIuWcqOe6v+mihOe6piDkuJPkuJrmnI3liqFcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMzoge1xuXHRcdFx0XHRidG46IFwi5a6i5oi35pyN5YqhXCIsXG5cdFx0XHRcdHQxOiBcIuS4k+S4muWuouacjeS4uuS9oOacjeWKoVwiLFxuXHRcdFx0XHR0MjogXCLmg7Pkuobop6Pmm7TlpJrvvIzlj6/oh7TnlLVcIixcblx0XHRcdFx0dDM6IFwiOTU1MTFcIixcblx0XHRcdFx0dDQ6IFwi6IGU57uc5oiR5Lus77yM5oiW6L+b5YWlXCIsXG5cdFx0XHR9XG5cdFx0fSxcblx0fSxcblx0Y29tcGxhaW50QWNjZXB0YW5jZToge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBlOe7nOaWueW8j1wiLFxuXHRcdGVtYWlsOiBcIueUtemCruWcsOWdgFwiLFxuXHRcdHF1ZXN0aW9uOiBcIumXrumimOaIluaEj+ingVwiLFxuXHRcdHF1ZXN0aW9uUGxhY2VIb2xkZXI6IFwi77yI5a2X5pWw5LiN6LaF6L+HNTAw5a2X77yJXCIsXG5cdFx0b3JkZXJObzogXCLkv53ljZXnvJblj7dcIixcblx0XHRvcmRlck5vUGxhY2VIb2xkZXI6IFwi5aaC5oKo5Li65bmz5a6J5a6i5oi377yM6K+35o+Q5L6b5L+d5Y2V57yW5Y+3XCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGU57uc5pe26Ze0XCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmoLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3lpITnkIblj4rlj6rkvJrooqvnlKjkvZzkuo7ogZTnu5wg6ZiB5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5Liq5Lq66LWE5paZ5pyq57uP5oKo5piO56Gu5o6I5p2D5bCG5LiN5Lya6L2s56e76Iez44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5py65p6E44CC5oKo5Y+v6YCJ5oup5LiN5ZCR5oiR5Lus5o+Q5L6b5omA6ZyA55qE5Liq5Lq66LWE5paZ77yM5oOf6L+Z5qC35Y+v6IO95a+86Ie05oiR5Lus5LiN6IO96IGU57uc5oKo44CC5oKo5Lqm5Y+v5qC55o2u44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5LmL5p2D5Yip5p+l6ZiF5Y+K5pu05q2j5Liq5Lq66LWE5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnjrDnoa7orqTmmI7nmb3lubblkIzmhI/mnKzkurrnmoTkuKrkurrotYTmlpnmoLnmja7kuK3pk7bkurrlr7/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0XHRjb250YWN0VHlwZXM6IFsn55S16K+dJywgJ+eUtemCriddLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6K+35aGr5YaZ6K+l6aG55YaF5a65XCIsXG5cdFx0XHRlMjogXCLor7floavlhpnmraPnoa7nmoTogZTns7vmlrnlvI9cIlxuXHRcdH0sXG5cdH0sXG5cdHJlc2VydmF0aW9uOiB7XG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRuYW1lUGxhY2Vob2xkZXI6IFwi5aeT5ZCNXCIsXG5cdFx0Y29udGFjdFR5cGU6IFwi6IGU57uc5pa55byPXCIsXG5cdFx0Y29udGFjdDogXCLogZTnu5znlLXor51cIixcblx0XHRjb250YWN0UGxhY2Vob2xkZXI6IFwi6aaZ5riv5Y+356CBL+WGheWcsOWPt+eggVwiLFxuXHRcdHJlc2VydmF0aW9uVHlwZTogXCLpooTnuqbnsbvlnotcIixcblx0XHRyZXNlcnZhdGlvblJlbWFyazogXCLpooTnuqbor7TmmI5cIixcblx0XHRyZXNlcnZhdGlvblJlbWFya1BsYWNlaG9sZGVyOiBcIuivt+eugOWNleivtOaYjuaCqOaDs+imgeWSqOivoueahOS6p+WTgeaIluS4muWKoVwiLFxuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaIt1wiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRjb250YWN0VGltZTogXCLmnJ/mnJvogZTnu5zml7bpl7RcIixcblx0XHRub3RpY2UxOiBcIuacrOihqOagvOaJgOaUtumbhueahOS4quS6uui1hOaWmeagueaNruOAjOW5s+WuieS6uuWvv+mmmea4r+S4quS6uui1hOaWmeaUtumbhuWjsOaYjuOAjeWkhOeQhuWPiuWPquS8muiiq+eUqOS9nOS6juiBlOe7nCDpmIHkuIvkuYvnlKjjgILnhLbogIzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmnKrnu4/mgqjmmI7noa7mjojmnYPlsIbkuI3kvJrovaznp7voh7PjgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3liJfmmI7ku6XlpJbkuYvnrKzkuInogIXmnLrmnoTjgILmgqjlj6/pgInmi6nkuI3lkJHmiJHku6zmj5DkvpvmiYDpnIDnmoTkuKrkurrotYTmlpnvvIzmg5/ov5nmoLflj6/og73lr7zoh7TmiJHku6zkuI3og73ogZTnu5zmgqjjgILmgqjkuqblj6/moLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3kuYvmnYPliKnmn6XpmIXlj4rmm7TmraPkuKrkurrotYTmlpnjgIJcIixcblx0XHRub3RpY2UyOiBcIuacrOS6uueOsOehruiupOaYjueZveW5tuWQjOaEj+acrOS6uueahOS4quS6uui1hOaWmeagueaNruS4remTtuS6uuWvv+S4quS6uui1hOaWmeaUtumbhuWjsOaYjuS9nOS7peS4iui/sOeUqOmAlOOAglwiLFxuXHR9LFxuXHRwYXltZW50VHlwZToge1xuXHRcdG1lbnUxOiBcIuS6suS4tOWuouacjeS4reW/g+S7mOasvlwiLFxuXHRcdG1lbnUyOiBcIue9kemTtuS7mOasvlwiLFxuXHRcdG1lbnUzOiBcIueUteaxh+S7mOasvlwiLFxuXHRcdG1lbnU0OiBcIuafnOWRmOacuuS7mOasvlwiLFxuXHRcdG1lbnU1OiBcIuOAjOe8tOi0ueeBteOAjeS7mOasvlwiLFxuXHRcdG1lbnU2OiBcIummmea4r+mCruaUv+WxgFwiLFxuXHR9LFxuXHRwcm9kdWN0OiB7XG5cdFx0YnRuUG9zaXRpb246IFwi6aKE57qm5pyN5YqhXCIsXG5cdFx0aWNvblByb2JsZW06IFwi5bi46KeB6Zeu6aKYXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwi5oqV5L+d5rWB56iLXCIsXG5cdFx0aWNvblByb2R1Y3Q6IFwi5Lqn5ZOB6K+m5oOFXCJcblx0fSxcblx0Y3VzdG9tUHJvZHVjdDoge1xuXHRcdG1lbnUxOiBcIuiBlOezu+aIkeS7rFwiLFxuXHRcdG1lbnUyOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdG1lbnUzOiBcIuS/neWNleafpeivolwiLFxuXHRcdG1lbnU0OiBcIuS/neWNleWPmOabtFwiLFxuXHRcdG1lbnU1OiBcIueQhui1lOeUs+ivt1wiLFxuXHRcdG1lbnU2OiBcIumihOe6puacjeWKoVwiLFxuXHRcdG1lbnU3OiBcIuaKleivieWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHR9LFxuXHRjb21tb25Gb3JtOiB7XG5cdFx0aGVhZDE6IFwi6KGo5qC857G75Z6LXCIsXG5cdFx0aGVhZDI6IFwi6KGo5qC85ZCN56ewXCIsXG5cdFx0aGVhZDM6IFwi5L2/55So6K+05piOXCIsXG5cdFx0aGVhZDQ6IFwi6ZmE5Lu2XCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6L295paH5qGjXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHR5cGU6IFwi57y06LS557G7XCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuOAjOeUteWtkOWFpei0puacjeWKoeOAjeWPiumTtuihjOaIt+WPozxicj7nm7TmjqXku5jmrL7mjojmnYPnlLPor7dcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPor7forr7nq4vjgIznlLXlrZDlhaXotKbmnI3liqHjgI3lj4rpk7booYzmiLflj6M8YnI+55u05o6l5LuY5qy+5o6I5p2D5pe26aG75o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv6HnlKjljaHmiLflj6Pnm7TmjqXku5jmrL7mjojmnYPkuaZcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPor7fkv6HnlKjljaHmiLflj6Pnm7TmjqXku5jmrL7mjojmnYPml7bpobvmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0eXBlOiBcIuS/neWNleWPmOabtOexu1wiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmanlkIjlkIzop6PpmaTnlLPor7fkuaZcIixcblx0XHRcdFx0ZGVzYzogXCLpgIDkv53jgIHnirnosavmnJ/pgIDkv53kuJrliqHpgILnlKhcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemZqeWQiOWQjOWPmOabtOeUs+ivt+S5pu+8iOS/neWNlei0t+asvui/mOasvuexu++8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS/neWNlei0t+asvuOAgei/mOasvuS4muWKoemAgueUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5ZCI5ZCM5Y+Y5pu055Sz6K+35Lmm77yI5L+d6Zmp5ZCI5ZCM6K6h5YiS5Y+Y5pu057G777yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Yqg5L+d44CB5YeP5L+d44CB5paw5aKe6ZmE6Zmp44CB5aSN5pWI562J5Lia5Yqh6YCC55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmanlkIjlkIzlj5jmm7TnlLPor7fkuabvvIjlrqLmiLfkv6Hmga/lj5jmm7TnsbvvvIlcIixcblx0XHRcdFx0ZGVzYzogXCLln7rmnKzkv6Hmga/lj5jmm7TkuJrliqHpgILnlKhcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemZqeWQiOWQjOWPmOabtOeUs+ivt+S5pu+8iOWuouaIt+adg+ebiuWPmOabtOexu++8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS6pOi0ueaWueW8j+OAgeiHquWeq+mAieaLqeadg+WPmOabtOOAgeihpeWPkeetieS4muWKoemAgueUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5o6I5p2D5aeU5omY5LmmXCIsXG5cdFx0XHRcdGRlc2M6IFwi5aeU5omY5LuW5Lq65Luj5Yqe5pe26aG75o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnqI7mlLblo7DmmI5cIixcblx0XHRcdFx0ZGVzYzogXCJDUlPopoHmsYJcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWBpeW6t+WRiuefpVwiLFxuXHRcdFx0XHRkZXNjOiBcIumhu+S6jOasoeaguOS/neeahOS4muWKoemhu+aPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLnkIbotZTnsbtcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LWU55Sz6K+35LmmXCIsXG5cdFx0XHRcdGRlc2M6IFwi57q46LSo55Sz6K+355qE5bqU5aSH5paH5Lu2XCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlR3VpZGU6IHtcblx0XHRub3RpY2U6IFwi5aaC6ZyA5YGa5YW25LuW5L+d5Y2V5Y+Y5pu06IGU57O75a6i5pyN77yI6IGU57O75a6i5pyN6LaF6ZO+5o6l6Lez6L2s5YWs5Y+46IGU57O75L+h5oGv6aG177yJXCIsXG5cdFx0aGVhZDE6IFwi6aG555uuXCIsXG5cdFx0aGVhZDI6IFwi5YW35L2T5YaF5a65XCIsXG5cdFx0aGVhZDM6IFwi55Sz6K+36LWE5qC85Lq6XCIsXG5cdFx0aGVhZDQ6IFwi5Y+X55CG5pe26Ze0XCIsXG5cdFx0aGVhZDU6IFwi5bqU5aSH5p2Q5paZXCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6L295paH5qGjXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHByb2plY3Q6IFwi6YCA5L+dXCIsXG5cdFx0XHRjb250ZW50OiBcIuWcqOeKueixq+acn+WQjuino+mZpOWQiOWQjO+8jOWFrOWPuOWwhumAgOi/mOS/neWNleeOsOmHkeS7t+WAvOaIluacqua7oeacn+WHgOS/nei0ueOAgu+8iOW+heS6p+WTgeeyvueul+ehruiupO+8iVwiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53ljZXmlYjlipvnu4jmraLliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmanljZVcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veivgeS7tlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlrZjmipjpk7booYzljaHnm7jlhbNcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIueKueixq+acn+mAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnirnosavmnJ/lhoXmj5Dlh7rop6PpmaTlkIjlkIzvvIzlhazlj7jkvJrml6Dmga/pgIDov5jlhajpg6jkv53otLlcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi54q56LGr5pyf57uT5p2f5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5Y2VXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+ivt+S5plwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73or4Hku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIummluacn+S/nei0ueWPkeelqFwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5a6i5oi36LWE5paZ5Y+Y5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00MlwiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLmipXkv53kurrjgIHlj5fkv53kurrjgIHlj5fnm4rkurrnmoTkuKrkurrkv6Hmga/lj5jmm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuW/heimgeeahOivgeaYjuadkOaWmVwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi6IGU57O75L+h5oGv5Y+Y5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00M1wiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLlnLDlnYDjgIHnlLXor53nrYnkv6Hmga/nmoTlj5jmm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veivgeS7tlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5Lqk6LS55pa55byP5Y+Y5pu0XCIsXG5cdFx0XHRjb250ZW50OiBcIuabtOaUueS/neWNleeahOe7reacn+S6pOi0ueaWueW8j+aIluS6pOi0uei0puWPt1wiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53ljZXkuqTotLnmnJ/mu6HliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLnlLPor7fkuaZcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5Y2VXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VDb250YWN0OiB7XG5cdFx0cGhvbmU6IFwi6IGU57O755S16K+dXCIsXG5cdFx0YWRkcmVzczogXCLogZTns7vlnLDlnYBcIixcblx0XHRlbWFpbDogXCJFLU1haWxcIixcblx0XHRjaGVja1RpcHM6IFwi5pys5Lq65LiN5ZCM5oSP5o6l5pS25a6j5Lyg5L+h5oGvXCIsXG5cdFx0c3VibWl0OiBcIuehruiupOS/ruaUuVwiLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr6Zu76KmxXCIsXG5cdFx0XHRlMjogXCLoq4vloavlr6voga/nuavlnLDlnYBcIixcblx0XHRcdGUzOiBcIuiri+Whq+Wvq+ato+eiuueahEUtTWFpbOWcsOWdgFwiXG5cdFx0fVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VJbmZvcm1hdGlvbjoge1xuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaItlwiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRvYmo6IFwi5Y+Y5pu05a+56LGhXCIsXG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRzZXg6IFwi5oCn5YirXCIsXG5cdFx0YmlydGg6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0dHlwZTogXCLor4Hku7bnsbvlnotcIixcblx0XHROTzogXCLor4Hku7blj7fnoIFcIixcblx0XHR2YWxpZGl0eVBlcmlvZDogXCLor4Hku7bmnInmlYjmnJ9cIixcblx0XHRuYXRpb25hbGl0eTogXCLlm73nsY1cIixcblx0XHRlbXBsb3llcjogXCLlt6XkvZzljZXkvY1cIixcblx0XHRtYXJpdGFsU3RhdHVzOiBcIuWpmuWnu+eKtuWGtVwiLFxuXHRcdHN1Ym1pdDogXCLnoa7orqTkv67mlLlcIixcblx0XHR1cGxvYWQ6IFwi6ZmE5Lu25LiK5LygXCIsXG5cdFx0bW9kaWZ5VGlwczE6IFwi5aaC6ZyA5L+u5pS56K+3XCIsXG5cdFx0bW9kaWZ5VGlwczI6IFwi6IGU57O75a6i5pyNXCIsXG5cdH0sXG5cdGNvbnRhY3RVczoge1xuXHRcdHNlcnZpY2U6IHtcblx0XHRcdGNlbnRlcjoge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHkuK3lv4NcIixcblx0XHRcdFx0YWRkcmVzczogXCLlnLDlnYDvvJrpppnmuK/lsJbmspnlmLTmuK/lqIHmsLjph5Hono3lpKfmpbxcIixcblx0XHRcdFx0dGltZTogXCLmnI3liqHml7bpl7TvvJrmmJ/mnJ/kuIDoh7PkupQ5OjAwLTE4OjAwXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG90bGluZToge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHng63nur9cIixcblx0XHRcdFx0aGs6IFwi6aaZ5riv5Y+356CB77yaKDg1MikyOTgzIDg4NjZcIixcblx0XHRcdFx0Y246IFwi5YaF5Zyw5Y+356CB77yaKDg2KTQwMDc4IDk1NTExXCIsXG5cdFx0XHRcdHRpbWU6IFwi5pyN5Yqh5pe26Ze077ya5pif5pyf5LiA6Iez5LqUOTowMC0xODowMFwiXG5cdFx0XHR9LFxuXHRcdFx0bWFpbDoge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHnlLXpgq5cIixcblx0XHRcdFx0bWFpbDogXCJjc0BwaW5nYW4uY29tLmhrXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdHB1bGJpYzoge1xuXHRcdFx0dGl0bGU6IFwi5b6u5L+h5YWs5LyX5Y+3XCIsXG5cdFx0XHRtMTogXCLnmbvpmYbjgIzlvq7kv6HjgI1BUFDvvIwg5oyJ5Y+z5LiK6KeS55qE44CMK+OAjeaMiemSruS4pumAieaLqeOAjOa3u+WKoOaci+WPi+OAje+8jOmAieaLqeOAjOWFrOS8l+WPt+OAjSDovpPlhaXlubbmkJzntKLjgIzlubPlronkurrlr7/pppnmuK/jgI1cIixcblx0XHRcdG0yOiBcIueZu+mZhuOAjOW+ruS/oeOAjUFQUO+8jCDmjInlj7PkuIrop5LnmoTjgIwr44CN5oyJ6ZKu5Lim6YCJ5oup44CM5omr5LiA5omr44CN5omr5o+P5LiL5pa55LqM57u056CB77yI5pS+572u5LqM57u056CB77yJXCJcblx0XHR9LFxuXHRcdHFyY29kZToge1xuXHRcdFx0dGl0bGU6IFwi5a6Y5pa55YWs5LyX5Y+3XCJcblx0XHR9XG5cdH0sXG5cdGN1c3RvbVNlcnZpY2U6IHtcblx0XHRuYW1lOiBcIuWuouaIt+acjeWKoVwiLFxuXHRcdG1lbnUxOiBcIuiBlOezu+aIkeS7rFwiLFxuXHRcdG1lbnUyOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdG1lbnUzOiBcIuS/neWNleafpeivolwiLFxuXHRcdG1lbnU0OiBcIuS/neWNleWPmOabtFwiLFxuXHRcdG1lbnU0MTogXCLkv53ljZXlj5jmm7TmjIflvJVcIixcblx0XHRtZW51NDI6IFwi6IGU57O75pa55byP5Y+Y5pu0XCIsXG5cdFx0bWVudTQzOiBcIuWuouaIt+i1hOaWmeWPmOabtFwiLFxuXHRcdG1lbnU1OiBcIueQhui1lOeUs+ivt1wiLFxuXHRcdG1lbnU2OiBcIumihOe6puacjeWKoVwiLFxuXHRcdG1lbnU3OiBcIuaKleivieWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHRcdGluc3VyYW5jZVF1ZXJ5OiB7XG5cdFx0XHRJbnN1cmFudE51bWJlcjogXCLkv53ljZXlj7fnoIFcIixcblx0XHRcdEluc3VyYW50OiBcIuWPl+S/neS6ulwiLFxuXHRcdFx0SW5zdXJhbnROYW1lOiBcIumZqeenjeWQjeensFwiLFxuXHRcdFx0SW5zdXJhbnRBbW91bnQ6IFwi5L+d6aKdXCIsXG5cdFx0XHRlZmZlY3RpdmVEYXRlOiBcIuS/nei0ueWIsOacn+aXpVwiLFxuXHRcdFx0cGVyaW9kOiBcIuS/nemanOW5tOacn1wiLFxuXG5cdFx0XHR0MlRpdGxlOiBcIuS/nemanOWGheWuuVwiLFxuXHRcdFx0dDJJbnN1cmFudENsYXNzaWZ5OiBcIumZqeenjeWQjeensFwiLFxuXHRcdFx0dDJJbnN1cmFudEFtb3VudDogXCLkv53pop1cIixcblxuXHRcdFx0dDNUaXRsZTogXCLlrqLmiLfotYTmlplcIixcblx0XHRcdHQzSW5zdXJhbnROYW1lQ246IFwi5oqV5L+d5Lq65aeT5ZCN77yI5Lit5paH77yJXCIsXG5cdFx0XHR0M0luc3VyYW50TmFtZUVuOiBcIuaKleS/neS6uuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmFudElkTnVtYmVyOiBcIuivgeS7tuWPt+eggVwiLFxuXHRcdFx0dDNJbnN1cmFudENvbnRhY3RBZGRyZXNzOiBcIuiBlOezu+WcsOWdgFwiLFxuXHRcdFx0dDNJbnN1cmFudEFkZHJlc3M6IFwi5bGF5L2P5Zyw5Z2AXCIsXG5cdFx0XHR0M0luc3VyYW50TW9iaWxlOiBcIuaJi+aPkOeUteivnVwiLFxuXHRcdFx0dDNJbnN1cmFudEVtYWlsOiBcIueUteWtkOmCrueusVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUNuOiBcIuWPl+S/neS6uuWnk+WQje+8iOS4reaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUVuOiBcIuWPl+S/neS6uuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmVkQmlydGhkYXk6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0XHR0M0luc3VyZWRJZE51bWJlcjogXCLor4Hku7blj7fnoIFcIixcblxuXHRcdFx0dDRUaXRsZTogXCLlj5fnm4rkurrotYTmlplcIiwgLy8gdDRCZW5lZmljaWFyeUluZm9ybWF0aW9uXG5cdFx0XHR0NE5hbWVDbjogXCLlp5PlkI3vvIjkuK3mlofvvIlcIixcblx0XHRcdHQ0TmFtZUVuOiBcIuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDRSZWxhdGlvbjogXCLkuI7lj5fkv53kurrlhbPns7tcIixcblx0XHRcdHQ0QWxsb2NhdGlvbjogXCLliIbphY3mr5TkvotcIixcblxuXHRcdFx0dDVUaXRsZTogXCLnvLTotLnotYTmlplcIixcblx0XHRcdHQ1UGF5bWVudFBlcmlvZDogXCLnvLTotLnlubTmnJ9cIixcblx0XHRcdHQ1UGF5bWVudE1ldGhvZDogXCLnvLTotLnmlrnlvI9cIixcblx0XHRcdHQ1UGF5bWVudEN1cnJlbmN5OiBcIue8tOi0ueW4geenjVwiLFxuXHRcdFx0dDVDdXJyZW50UHJlbWl1bTogXCLlvZPmnJ/kv53otLlcIixcblx0XHRcdHQ1UGF5bWVudEJhbms6IFwi57y06LS56ZO26KGMXCIsXG5cdFx0XHR0NVBheW1lbnRBY2NvdW50OiBcIue8tOi0uei0puWPt1wiLFxuXG5cdFx0XHR0NlRpdGxlOiBcIue8tOi0ueiusOW9lVwiLFxuXHRcdFx0dDZQYXltZW50UGVyaW9kOiBcIue8tOi0ueacn1wiLFxuXHRcdFx0dDZQYXltZW50TWV0aG9kOiBcIue8tOi0ueaWueW8j1wiLFxuXHRcdFx0dDZDbG9zaW5nRGF0ZTogXCLlrp7mlLbml6XmnJ9cIixcblx0XHRcdHQ2UGF5bWVudEFtb3VudDogXCLnvLTotLnph5Hpop1cIixcblx0XHR9LFxuXHRcdHJlc2VydmF0aW9uOiB7XG5cdFx0XHRzdWJtaXRCdG46ICfnoa7orqQnLFxuXHRcdFx0Y29udGFjdFR5cGVzOiBbJ+mbu+ipsSddLFxuXHRcdFx0cmVzZXJ2YXRpb25UeXBlczogWyfmipXkv53lkqjor6InLCAn5Luj5Yqe5L+d5Y2V5Y+Y5pu0J10sXG5cdFx0XHRlcnJvclRpcHM6IHtcblx0XHRcdFx0ZTE6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRcdGUyOiBcIuiri+Whq+Wvq+ato+eiuueahOiBr+e5q+aWueW8j1wiXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFwQkE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQS9CQTtBQXNDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQVBBO0FBNUVBO0FBMkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFuQkE7QUFnQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUExQkE7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBMUJBO0FBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUExQkE7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUE5Q0E7QUF3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFUQTtBQUhBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFiQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBUEE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQXJDQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQWpFQTtBQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBZkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBSUE7QUFEQTtBQUlBO0FBREE7QUFsQkE7QUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBZEE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBZEE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFUQTtBQXpGQTtBQXlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQVpBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBREE7QUF2QkE7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUExREE7QUFybUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/common/lang/zh.js\n");

/***/ }),

/***/ "./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&":
/*!***************************************************************************!*\
  !*** ./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js& ***!
  \***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./dropdown.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24uanM/ZjBjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMi0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fYmFiZWwtbG9hZGVyQDguMC42QGJhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19lc2xpbnQtbG9hZGVyQDIuMi4xQGVzbGludC1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTMtMCEuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMi0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fYmFiZWwtbG9hZGVyQDguMC42QGJhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19lc2xpbnQtbG9hZGVyQDIuMi4xQGVzbGludC1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTMtMCEuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./src/components/home/dropdown/dropdown.vue":
/*!***************************************************!*\
  !*** ./src/components/home/dropdown/dropdown.vue ***!
  \***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n/* harmony import */ var _dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown.js?vue&type=script&lang=js& */ \"./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  \"3b4f35af\",\n  null\n  \n)\n\n/* hot reload */\nif (true) {\n  var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n  api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('3b4f35af')) {\n      api.createRecord('3b4f35af', component.options)\n    } else {\n      api.reload('3b4f35af', component.options)\n    }\n    module.hot.accept(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n(function () {\n      api.rerender('3b4f35af', {\n        render: _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n        staticRenderFns: _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n      })\n    })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n  }\n}\ncomponent.options.__file = \"src/components/home/dropdown/dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlPzI1YWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2I0ZjM1YWYmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJvcGRvd24uanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjNiNGYzNWFmXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2pvZS9Eb2N1bWVudHMvZ2l0L3Bpbmdhbi9oa2xpZmUvcGluZ2FuLWxpZmUtaW5kZXgtcHJvL25vZGVfbW9kdWxlcy9fdnVlLWhvdC1yZWxvYWQtYXBpQDIuMy40QHZ1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnM2I0ZjM1YWYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnM2I0ZjM1YWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnM2I0ZjM1YWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYjRmMzVhZiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczYjRmMzVhZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9kcm9wZG93bi9kcm9wZG93bi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue\n");

/***/ }),

/***/ "./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!*************************************************************************************************************!*\
  !*** ./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
  \*************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT9iY2E3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9M2I0ZjM1YWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&":
/*!**********************************************************************************************!*\
  !*** ./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& ***!
  \**********************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYjRmMzVhZiZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT9hMTA1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCItIWNhY2hlLWxvYWRlcj97XFxcImNhY2hlRGlyZWN0b3J5XFxcIjpcXFwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXFxcIixcXFwiY2FjaGVJZGVudGlmaWVyXFxcIjpcXFwiNGNmMDIzMTQtdnVlLWxvYWRlci10ZW1wbGF0ZVxcXCJ9IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNiNGYzNWFmJnNjb3BlZD10cnVlJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\n");

/***/ }),

/***/ "./src/components/home/footer/footer.js?vue&type=script&lang=js&":
/*!***********************************************************************!*\
  !*** ./src/components/home/footer/footer.js?vue&type=script&lang=js& ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./footer.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLmpzPzlmNmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2VzbGludC1sb2FkZXJAMi4yLjFAZXNsaW50LWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMy0wIS4vZm9vdGVyLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./src/components/home/footer/footer.vue":
/*!***********************************************!*\
  !*** ./src/components/home/footer/footer.vue ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n/* harmony import */ var _footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./footer.js?vue&type=script&lang=js& */ \"./src/components/home/footer/footer.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  \"f678fc22\",\n  null\n  \n)\n\n/* hot reload */\nif (true) {\n  var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n  api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('f678fc22')) {\n      api.createRecord('f678fc22', component.options)\n    } else {\n      api.reload('f678fc22', component.options)\n    }\n    module.hot.accept(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n(function () {\n      api.rerender('f678fc22', {\n        render: _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n        staticRenderFns: _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n      })\n    })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n  }\n}\ncomponent.options.__file = \"src/components/home/footer/footer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZT8xZDIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjc4ZmMyMiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zvb3Rlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZjY3OGZjMjJcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvam9lL0RvY3VtZW50cy9naXQvcGluZ2FuL2hrbGlmZS9waW5nYW4tbGlmZS1pbmRleC1wcm8vbm9kZV9tb2R1bGVzL192dWUtaG90LXJlbG9hZC1hcGlAMi4zLjRAdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdmNjc4ZmMyMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdmNjc4ZmMyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdmNjc4ZmMyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjc4ZmMyMiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdmNjc4ZmMyMicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue\n");

/***/ }),

/***/ "./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!*********************************************************************************************************!*\
  !*** ./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
  \*********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/MmUzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zvb3Rlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1mNjc4ZmMyMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZm9vdGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWY2NzhmYzIyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&":
/*!******************************************************************************************!*\
  !*** ./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true& ***!
  \******************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWY2NzhmYzIyJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/NzZiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3OGZjMjImc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\n");

/***/ }),

/***/ "./src/components/home/header/header.js?vue&type=script&lang=js&":
/*!***********************************************************************!*\
  !*** ./src/components/home/header/header.js?vue&type=script&lang=js& ***!
  \***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./header.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLmpzPzIyZDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2VzbGludC1sb2FkZXJAMi4yLjFAZXNsaW50LWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMy0wIS4vaGVhZGVyLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./src/components/home/header/header.vue":
/*!***********************************************!*\
  !*** ./src/components/home/header/header.vue ***!
  \***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n/* harmony import */ var _header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header.js?vue&type=script&lang=js& */ \"./src/components/home/header/header.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  \"6fba8daf\",\n  null\n  \n)\n\n/* hot reload */\nif (true) {\n  var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n  api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('6fba8daf')) {\n      api.createRecord('6fba8daf', component.options)\n    } else {\n      api.reload('6fba8daf', component.options)\n    }\n    module.hot.accept(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n(function () {\n      api.rerender('6fba8daf', {\n        render: _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n        staticRenderFns: _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n      })\n    })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n  }\n}\ncomponent.options.__file = \"src/components/home/header/header.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZT9lOTM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZmJhOGRhZiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2hlYWRlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNmZiYThkYWZcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvam9lL0RvY3VtZW50cy9naXQvcGluZ2FuL2hrbGlmZS9waW5nYW4tbGlmZS1pbmRleC1wcm8vbm9kZV9tb2R1bGVzL192dWUtaG90LXJlbG9hZC1hcGlAMi4zLjRAdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2ZmJhOGRhZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2ZmJhOGRhZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2ZmJhOGRhZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZmJhOGRhZiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ZmJhOGRhZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue\n");

/***/ }),

/***/ "./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!*********************************************************************************************************!*\
  !*** ./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
  \*********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/NDEzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02ZmJhOGRhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZmYmE4ZGFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&":
/*!******************************************************************************************!*\
  !*** ./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true& ***!
  \******************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmYmE4ZGFmJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/ZTljYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZiYThkYWYmc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\n");

/***/ }),

/***/ "./src/main.js":
/*!*********************!*\
  !*** ./src/main.js ***!
  \*********************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vue_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-i18n */ \"./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js\");\n/* harmony import */ var _App_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App.vue */ \"./src/App.vue\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./router */ \"./src/router.js\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.js\");\n/* harmony import */ var vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-awesome-swiper */ \"./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js\");\n/* harmony import */ var vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! swiper/dist/css/swiper.css */ \"./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\n/* harmony import */ var swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mock__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mock */ \"./src/mock/index.js\");\n\n\n\n\n\n\n\n\n\n // require styles\n\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].use(vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9___default.a);\n\n_mock__WEBPACK_IMPORTED_MODULE_11__[\"default\"].bootstrap(); // import 'amfe-flexible';\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].config.productionTip = false; // Purecss\n// import Purecss from 'purecss'\n// Vue.use(Purecss);\n// 国际化\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].use(vue_i18n__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\nvar i18n = new vue_i18n__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n  locale: localStorage.getItem(\"lang\") || 'tc',\n  // 语言标识\n  //this.$i18n.locale // 通过切换locale的值来实现语言切换\n  messages: {\n    'tc': __webpack_require__(/*! @/common/lang/tc */ \"./src/common/lang/tc.js\"),\n    // 繁体语言包\n    'zh': __webpack_require__(/*! @/common/lang/zh */ \"./src/common/lang/zh.js\"),\n    // 简体语言包\n    'en': __webpack_require__(/*! @/common/lang/en */ \"./src/common/lang/en.js\") // 英文语言包\n\n  }\n});\nnew vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n  i18n: i18n,\n  router: _router__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n  store: _store_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n  render: function render(h) {\n    return h(_App_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n  },\n  mounted: function mounted() {\n    document.dispatchEvent(new Event('render-event'));\n  }\n}).$mount('#app');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWFpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tYWluLmpzPzU2ZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IFZ1ZUkxOG4gZnJvbSAndnVlLWkxOG4nO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuaW1wb3J0IHJvdXRlciBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi9zdG9yZS9pbmRleCc7XG5cbmltcG9ydCBWdWVBd2Vzb21lU3dpcGVyIGZyb20gJ3Z1ZS1hd2Vzb21lLXN3aXBlcidcbi8vIHJlcXVpcmUgc3R5bGVzXG5pbXBvcnQgJ3N3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzJ1xuVnVlLnVzZShWdWVBd2Vzb21lU3dpcGVyKVxuXG5cbmltcG9ydCBNb2NrIGZyb20gJy4vbW9jaydcbk1vY2suYm9vdHN0cmFwKCk7XG5cbi8vIGltcG9ydCAnYW1mZS1mbGV4aWJsZSc7XG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIFB1cmVjc3Ncbi8vIGltcG9ydCBQdXJlY3NzIGZyb20gJ3B1cmVjc3MnXG4vLyBWdWUudXNlKFB1cmVjc3MpO1xuXG4vLyDlm73pmYXljJZcblZ1ZS51c2UoVnVlSTE4bilcbmNvbnN0IGkxOG4gPSBuZXcgVnVlSTE4bih7XG5cdGxvY2FsZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5nXCIpIHx8ICd0YycsIC8vIOivreiogOagh+ivhlxuXHQvL3RoaXMuJGkxOG4ubG9jYWxlIC8vIOmAmui/h+WIh+aNomxvY2FsZeeahOWAvOadpeWunueOsOivreiogOWIh+aNolxuXHRtZXNzYWdlczoge1xuXHRcdCd0Yyc6IHJlcXVpcmUoJ0AvY29tbW9uL2xhbmcvdGMnKSwgLy8g57mB5L2T6K+t6KiA5YyFXG5cdFx0J3poJzogcmVxdWlyZSgnQC9jb21tb24vbGFuZy96aCcpLCAvLyDnroDkvZPor63oqIDljIVcblx0XHQnZW4nOiByZXF1aXJlKCdAL2NvbW1vbi9sYW5nL2VuJyksIC8vIOiLseaWh+ivreiogOWMhVxuXHR9XG59KVxuXG5uZXcgVnVlKHtcblx0aTE4bixcblx0cm91dGVyLFxuXHRzdG9yZSxcblx0cmVuZGVyOiBoID0+IGgoQXBwKSxcblx0bW91bnRlZDogKCkgPT4ge1xuXHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZW5kZXItZXZlbnQnKSk7XG5cdH1cbn0pLiRtb3VudCgnI2FwcCcpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVBBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/main.js\n");

/***/ }),

/***/ "./src/mock/data/user.js":
/*!*******************************!*\
  !*** ./src/mock/data/user.js ***!
  \*******************************/
/*! exports provided: LoginUsers, Users */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LoginUsers\", function() { return LoginUsers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Users\", function() { return Users; });\n/* harmony import */ var mockjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mockjs */ \"./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js\");\n/* harmony import */ var mockjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mockjs__WEBPACK_IMPORTED_MODULE_0__);\n\nvar LoginUsers = [{\n  id: 1,\n  username: 'admin',\n  password: 'admin',\n  avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png',\n  name: '张某某'\n}];\nvar Users = [];\n\nfor (var i = 0; i < 5; i++) {\n  Users.push(mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.mock({\n    id: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.guid(),\n    province: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.province(),\n    city: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.city(),\n    fieldName: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.cname(),\n    address: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.mock('@county(true)'),\n    'age|18-60': 1,\n    birth: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.date(),\n    sex: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.integer(0, 1)\n  }));\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9kYXRhL3VzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbW9jay9kYXRhL3VzZXIuanM/MWUxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW9jayBmcm9tICdtb2NranMnO1xuY29uc3QgTG9naW5Vc2VycyA9IFtcbiAge1xuICAgIGlkOiAxLFxuICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgIHBhc3N3b3JkOiAnYWRtaW4nLFxuICAgIGF2YXRhcjogJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90YXlsb3JjaGVuNzA5L21hcmtkb3duLWltYWdlcy9tYXN0ZXIvdnVlYWRtaW4vdXNlci5wbmcnLFxuICAgIG5hbWU6ICflvKDmn5Dmn5AnXG4gIH1cbl07XG5cbmNvbnN0IFVzZXJzID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gIFVzZXJzLnB1c2goTW9jay5tb2NrKHtcbiAgICBpZDogTW9jay5SYW5kb20uZ3VpZCgpLFxuICAgIHByb3ZpbmNlOiBNb2NrLlJhbmRvbS5wcm92aW5jZSgpLFxuICAgIGNpdHk6IE1vY2suUmFuZG9tLmNpdHkoKSxcbiAgICBmaWVsZE5hbWU6IE1vY2suUmFuZG9tLmNuYW1lKCksXG4gICAgYWRkcmVzczogTW9jay5tb2NrKCdAY291bnR5KHRydWUpJyksXG4gICAgJ2FnZXwxOC02MCc6IDEsXG4gICAgYmlydGg6IE1vY2suUmFuZG9tLmRhdGUoKSxcbiAgICBzZXg6IE1vY2suUmFuZG9tLmludGVnZXIoMCwgMSlcbiAgfSkpO1xufVxuXG5leHBvcnQgeyBMb2dpblVzZXJzLCBVc2VycyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/data/user.js\n");

/***/ }),

/***/ "./src/mock/index.js":
/*!***************************!*\
  !*** ./src/mock/index.js ***!
  \***************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mock */ \"./src/mock/mock.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_mock__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tb2NrL2luZGV4LmpzPzI0NWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vY2sgZnJvbSAnLi9tb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgbW9jaztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/index.js\n");

/***/ }),

/***/ "./src/mock/mock.js":
/*!**************************!*\
  !*** ./src/mock/mock.js ***!
  \**************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios-mock-adapter */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js\");\n/* harmony import */ var axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_user__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data/user */ \"./src/mock/data/user.js\");\n\n\n\nvar _Users = _data_user__WEBPACK_IMPORTED_MODULE_2__[\"Users\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  /**\n   * mock bootstrap\n   */\n  bootstrap: function bootstrap() {\n    return; // 紧在dev环境下使用\n\n    if (true) {\n      return;\n    }\n\n    var mock = new axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1___default.a(axios__WEBPACK_IMPORTED_MODULE_0___default.a); // mock success request\n\n    mock.onGet('/success').reply(200, {\n      msg: 'success'\n    }); // mock error request\n\n    mock.onGet('/error').reply(500, {\n      msg: 'failure'\n    }); // 拦截 get方法demo\n\n    mock.onGet('/path1/path2/getdemo').reply(function (config) {\n      // 拦截参数\n      var _config$params = config.params,\n          params1 = _config$params.params1,\n          params2 = _config$params.params2;\n      return new Promise(function (resolve, reject) {\n        var content = {};\n        var success = true;\n        resolve([200, {\n          code: 2000,\n          msg: '请求成功',\n          success: success,\n          content: content\n        }]);\n      });\n    }); // 拦截post方法demo\n\n    mock.onPost('/path1/path2/postdemo').reply(function (config) {\n      var _JSON$parse = JSON.parse(config.data),\n          params1 = _JSON$parse.params1,\n          params2 = _JSON$parse.params2;\n\n      return new Promise(function (resolve, reject) {\n        var content = {};\n        var success = true;\n        resolve([200, {\n          code: 2000,\n          msg: '请求成功',\n          success: success,\n          content: content\n        }]);\n      });\n    });\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9tb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL21vY2svbW9jay5qcz85NTIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgTW9ja0FkYXB0ZXIgZnJvbSAnYXhpb3MtbW9jay1hZGFwdGVyJztcbmltcG9ydCB7XG4gIExvZ2luVXNlcnMsXG4gIFVzZXJzXG59IGZyb20gJy4vZGF0YS91c2VyJztcbmxldCBfVXNlcnMgPSBVc2VycztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogbW9jayBib290c3RyYXBcbiAgICovXG4gIGJvb3RzdHJhcCgpIHtcbiAgICByZXR1cm47XG4gICAgLy8g57Sn5ZyoZGV2546v5aKD5LiL5L2/55SoXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG1vY2sgPSBuZXcgTW9ja0FkYXB0ZXIoYXhpb3MpO1xuXG4gICAgLy8gbW9jayBzdWNjZXNzIHJlcXVlc3RcbiAgICBtb2NrLm9uR2V0KCcvc3VjY2VzcycpLnJlcGx5KDIwMCwge1xuICAgICAgbXNnOiAnc3VjY2VzcydcbiAgICB9KTtcblxuICAgIC8vIG1vY2sgZXJyb3IgcmVxdWVzdFxuICAgIG1vY2sub25HZXQoJy9lcnJvcicpLnJlcGx5KDUwMCwge1xuICAgICAgbXNnOiAnZmFpbHVyZSdcbiAgICB9KTtcblxuICAgIC8vIOaLpuaIqiBnZXTmlrnms5VkZW1vXG4gICAgbW9jay5vbkdldCgnL3BhdGgxL3BhdGgyL2dldGRlbW8nKS5yZXBseShjb25maWcgPT4ge1xuICAgICAgLy8g5oum5oiq5Y+C5pWwXG4gICAgICBsZXQge1xuICAgICAgICBwYXJhbXMxLFxuICAgICAgICBwYXJhbXMyXG4gICAgICB9ID0gY29uZmlnLnBhcmFtcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBjb250ZW50ID0ge307XG4gICAgICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZShbMjAwLCB7XG4gICAgICAgICAgY29kZTogMjAwMCxcbiAgICAgICAgICBtc2c6ICfor7fmsYLmiJDlip8nLFxuICAgICAgICAgIHN1Y2Nlc3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9XSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIOaLpuaIqnBvc3Tmlrnms5VkZW1vXG4gICAgbW9jay5vblBvc3QoJy9wYXRoMS9wYXRoMi9wb3N0ZGVtbycpLnJlcGx5KGNvbmZpZyA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBwYXJhbXMxLFxuICAgICAgICBwYXJhbXMyXG4gICAgICB9ID0gSlNPTi5wYXJzZShjb25maWcuZGF0YSk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgY29udGVudCA9IHt9O1xuICAgICAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIHJlc29sdmUoWzIwMCwge1xuICAgICAgICAgIGNvZGU6IDIwMDAsXG4gICAgICAgICAgbXNnOiAn6K+35rGC5oiQ5YqfJyxcbiAgICAgICAgICBzdWNjZXNzLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBRUE7QUEzREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/mock.js\n");

/***/ }),

/***/ "./src/pages/index/index.js?vue&type=script&lang=js&":
/*!**************************************************!*\
  !*** ./src/pages/index?vue&type=script&lang=js& ***!
  \**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!.?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXguanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4PzQ5OTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/pages/index/index.js?vue&type=script&lang=js&\n");

/***/ }),

/***/ "./src/pages/index/index.vue":
/*!***********************************!*\
  !*** ./src/pages/index/index.vue ***!
  \***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n/* harmony import */ var _index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! .?vue&type=script&lang=js& */ \"./src/pages/index/index.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n  _index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n  _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n  _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n  false,\n  null,\n  \"1badc801\",\n  null\n  \n)\n\n/* hot reload */\nif (true) {\n  var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n  api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n  if (api.compatible) {\n    module.hot.accept()\n    if (!api.isRecorded('1badc801')) {\n      api.createRecord('1badc801', component.options)\n    } else {\n      api.reload('1badc801', component.options)\n    }\n    module.hot.accept(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n(function () {\n      api.rerender('1badc801', {\n        render: _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n        staticRenderFns: _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n      })\n    })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n  }\n}\ncomponent.options.__file = \"src/pages/index/index.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4L2luZGV4LnZ1ZT80NjNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiYWRjODAxJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xYmFkYzgwMSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIxYmFkYzgwMVwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9qb2UvRG9jdW1lbnRzL2dpdC9waW5nYW4vaGtsaWZlL3Bpbmdhbi1saWZlLWluZGV4LXByby9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzFiYWRjODAxJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFiYWRjODAxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFiYWRjODAxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhZGM4MDEmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWJhZGM4MDEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9wYWdlcy9pbmRleC9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue\n");

/***/ }),

/***/ "./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!*********************************************************************************************!*\
  !*** ./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
  \*********************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/YzA3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiYWRjODAxJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xYmFkYzgwMSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");

/***/ }),

/***/ "./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&":
/*!******************************************************************************!*\
  !*** ./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true& ***!
  \******************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiYWRjODAxJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MWJhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYmFkYzgwMSZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\n");

/***/ }),

/***/ "./src/router.js":
/*!***********************!*\
  !*** ./src/router.js ***!
  \***********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-router */ \"./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js\");\n/* harmony import */ var _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/index/index.vue */ \"./src/pages/index/index.vue\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].use(vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n/**\n * 重写路由的push方法\n */\n\nvar routerPush = vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype.push;\n\nvue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype.push = function push(location) {\n  return routerPush.call(this, location).catch(function (error) {\n    return error;\n  });\n};\n\nvar routes = [{\n  path: '/',\n  name: 'index',\n  component: _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n  meta: {\n    title: '平安人寿保险官网'\n  }\n}, {\n  path: '/login',\n  name: 'login',\n  component: function component() {\n    return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(3)]).then(__webpack_require__.bind(null, /*! ./pages/login/login.vue */ \"./src/pages/login/login.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/register',\n  name: 'register',\n  component: function component() {\n    return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(5)]).then(__webpack_require__.bind(null, /*! ./pages/register/register.vue */ \"./src/pages/register/register.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/password/find',\n  name: 'passwordFind',\n  component: function component() {\n    return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(8)]).then(__webpack_require__.bind(null, /*! ./pages/password-find/password-find.vue */ \"./src/pages/password-find/password-find.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/password/reset',\n  name: 'passwordReset',\n  component: function component() {\n    return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(9)]).then(__webpack_require__.bind(null, /*! ./pages/password-reset/password-reset.vue */ \"./src/pages/password-reset/password-reset.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/infomation/improve',\n  name: 'infomationImprove',\n  component: function component() {\n    return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(7)]).then(__webpack_require__.bind(null, /*! ./pages/infomation-improve/infomation-improve.vue */ \"./src/pages/infomation-improve/infomation-improve.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/profile',\n  name: 'profile',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 13).then(__webpack_require__.bind(null, /*! ./pages/profile/profile.vue */ \"./src/pages/profile/profile.vue\"));\n  },\n  meta: {\n    title: '公司简介'\n  }\n}, {\n  path: '/terms',\n  name: 'terms',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 15).then(__webpack_require__.bind(null, /*! ./pages/terms/terms.vue */ \"./src/pages/terms/terms.vue\"));\n  },\n  meta: {\n    title: '使用条款'\n  }\n}, {\n  path: '/privacy',\n  name: 'privacy',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 12).then(__webpack_require__.bind(null, /*! ./pages/privacy/privacy.vue */ \"./src/pages/privacy/privacy.vue\"));\n  },\n  meta: {\n    title: '隐私政策'\n  }\n}, {\n  path: '/protocol',\n  name: 'protocol',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 14).then(__webpack_require__.bind(null, /*! ./pages/protocol/protocol.vue */ \"./src/pages/protocol/protocol.vue\"));\n  },\n  meta: {\n    title: '平安一賬通會員服務協議'\n  }\n}, {\n  path: '/news/list',\n  name: 'newsList',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 2).then(__webpack_require__.bind(null, /*! ./pages/news-list/news-list.vue */ \"./src/pages/news-list/news-list.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/news/detail',\n  name: 'newsDetail',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 10).then(__webpack_require__.bind(null, /*! ./pages/news-detail/news-detail.vue */ \"./src/pages/news-detail/news-detail.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/product',\n  name: 'product',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 4).then(__webpack_require__.bind(null, /*! ./pages/product/product.vue */ \"./src/pages/product/product.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/custom/service',\n  name: 'customService',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 1).then(__webpack_require__.bind(null, /*! ./pages/custom-service/custom-service.vue */ \"./src/pages/custom-service/custom-service.vue\"));\n  },\n  meta: {\n    title: '保单查询'\n  }\n}, {\n  path: '/custom/product',\n  name: 'customProduct',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 6).then(__webpack_require__.bind(null, /*! ./pages/custom-product/custom-product.vue */ \"./src/pages/custom-product/custom-product.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/demo',\n  name: 'demo',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 11).then(__webpack_require__.bind(null, /*! ./pages/demo/index.vue */ \"./src/pages/demo/index.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, {\n  path: '/about',\n  name: 'about',\n  component: function component() {\n    return __webpack_require__.e(/*! import() */ 16).then(__webpack_require__.bind(null, /*! ./pages/About.vue */ \"./src/pages/About.vue\"));\n  },\n  meta: {\n    title: ''\n  }\n}, // 404页面\n{\n  path: '*',\n  // * 表示上面路径匹配不到的都显示这个页面\n  name: '404',\n  component: _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n}]; // add route path\n\nroutes.forEach(function (route) {\n  route.path = route.path || '/' + (route.name || '');\n});\nvar router = new vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n  routes: routes // mode: 'history',\n\n});\nrouter.beforeEach(function (to, from, next) {\n  var title = to.meta && to.meta.title;\n\n  if (title) {\n    document.title = title;\n  } // const scrollTopList = [\n  // \t\"newsList\", \"newsDetail\", \"protocol\", \"privacy\", \"terms\", \"paymentType\", \"reservation\"\n  // ]\n\n\n  document.documentElement.scrollTop = 0;\n  document.body.scrollTop = 0;\n  next();\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (router);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcm91dGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3JvdXRlci5qcz80MWNiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IEluZGV4IGZyb20gJy4vcGFnZXMvaW5kZXgvaW5kZXgudnVlJ1xuXG5WdWUudXNlKFJvdXRlcilcblxuLyoqXG4gKiDph43lhpnot6/nlLHnmoRwdXNo5pa55rOVXG4gKi9cbmNvbnN0IHJvdXRlclB1c2ggPSBSb3V0ZXIucHJvdG90eXBlLnB1c2hcblJvdXRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2gobG9jYXRpb24pIHtcblx0cmV0dXJuIHJvdXRlclB1c2guY2FsbCh0aGlzLCBsb2NhdGlvbikuY2F0Y2goZXJyb3IgPT4gZXJyb3IpXG59XG5cbmNvbnN0IHJvdXRlcyA9IFtcblxuXHR7XG5cdFx0cGF0aDogJy8nLFxuXHRcdG5hbWU6ICdpbmRleCcsXG5cdFx0Y29tcG9uZW50OiBJbmRleCxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJ+W5s+WuieS6uuWvv+S/nemZqeWumOe9kSdcblx0XHR9XG5cdH0sXG5cdHtcblx0XHRwYXRoOiAnL2xvZ2luJyxcblx0XHRuYW1lOiAnbG9naW4nLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2xvZ2luL2xvZ2luLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAnJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvcmVnaXN0ZXInLFxuXHRcdG5hbWU6ICdyZWdpc3RlcicsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcmVnaXN0ZXIvcmVnaXN0ZXIudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wYXNzd29yZC9maW5kJyxcblx0XHRuYW1lOiAncGFzc3dvcmRGaW5kJyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9wYXNzd29yZC1maW5kL3Bhc3N3b3JkLWZpbmQudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wYXNzd29yZC9yZXNldCcsXG5cdFx0bmFtZTogJ3Bhc3N3b3JkUmVzZXQnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL3Bhc3N3b3JkLXJlc2V0L3Bhc3N3b3JkLXJlc2V0LnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAnJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvaW5mb21hdGlvbi9pbXByb3ZlJyxcblx0XHRuYW1lOiAnaW5mb21hdGlvbkltcHJvdmUnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2luZm9tYXRpb24taW1wcm92ZS9pbmZvbWF0aW9uLWltcHJvdmUudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wcm9maWxlJyxcblx0XHRuYW1lOiAncHJvZmlsZScsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJvZmlsZS9wcm9maWxlLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn5YWs5Y+4566A5LuLJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvdGVybXMnLFxuXHRcdG5hbWU6ICd0ZXJtcycsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvdGVybXMvdGVybXMudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICfkvb/nlKjmnaHmrL4nXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wcml2YWN5Jyxcblx0XHRuYW1lOiAncHJpdmFjeScsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJpdmFjeS9wcml2YWN5LnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn6ZqQ56eB5pS/562WJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvcHJvdG9jb2wnLFxuXHRcdG5hbWU6ICdwcm90b2NvbCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJvdG9jb2wvcHJvdG9jb2wudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICflubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbAnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9uZXdzL2xpc3QnLFxuXHRcdG5hbWU6ICduZXdzTGlzdCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvbmV3cy1saXN0L25ld3MtbGlzdC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cdHtcblx0XHRwYXRoOiAnL25ld3MvZGV0YWlsJyxcblx0XHRuYW1lOiAnbmV3c0RldGFpbCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvbmV3cy1kZXRhaWwvbmV3cy1kZXRhaWwudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXG5cdHtcblx0XHRwYXRoOiAnL3Byb2R1Y3QnLFxuXHRcdG5hbWU6ICdwcm9kdWN0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9wcm9kdWN0L3Byb2R1Y3QudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9jdXN0b20vc2VydmljZScsXG5cdFx0bmFtZTogJ2N1c3RvbVNlcnZpY2UnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2N1c3RvbS1zZXJ2aWNlL2N1c3RvbS1zZXJ2aWNlLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn5L+d5Y2V5p+l6K+iJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvY3VzdG9tL3Byb2R1Y3QnLFxuXHRcdG5hbWU6ICdjdXN0b21Qcm9kdWN0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9jdXN0b20tcHJvZHVjdC9jdXN0b20tcHJvZHVjdC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cblx0e1xuXHRcdHBhdGg6ICcvZGVtbycsXG5cdFx0bmFtZTogJ2RlbW8nLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2RlbW8vaW5kZXgudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9hYm91dCcsXG5cdFx0bmFtZTogJ2Fib3V0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9BYm91dC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cdC8vIDQwNOmhtemdolxuXHR7XG5cdFx0cGF0aDogJyonLCAvLyAqIOihqOekuuS4iumdoui3r+W+hOWMuemFjeS4jeWIsOeahOmDveaYvuekuui/meS4qumhtemdolxuXHRcdG5hbWU6ICc0MDQnLFxuXHRcdGNvbXBvbmVudDogSW5kZXhcblx0fSxcbl1cblxuLy8gYWRkIHJvdXRlIHBhdGhcbnJvdXRlcy5mb3JFYWNoKHJvdXRlID0+IHtcblx0cm91dGUucGF0aCA9IHJvdXRlLnBhdGggfHwgJy8nICsgKHJvdXRlLm5hbWUgfHwgJycpO1xufSk7XG5cbmNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuXHRyb3V0ZXMsXG5cdC8vIG1vZGU6ICdoaXN0b3J5Jyxcbn0pO1xuXG5yb3V0ZXIuYmVmb3JlRWFjaCgodG8sIGZyb20sIG5leHQpID0+IHtcblx0Y29uc3QgdGl0bGUgPSB0by5tZXRhICYmIHRvLm1ldGEudGl0bGU7XG5cdGlmICh0aXRsZSkge1xuXHRcdGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG5cdH1cblx0Ly8gY29uc3Qgc2Nyb2xsVG9wTGlzdCA9IFtcblx0Ly8gXHRcIm5ld3NMaXN0XCIsIFwibmV3c0RldGFpbFwiLCBcInByb3RvY29sXCIsIFwicHJpdmFjeVwiLCBcInRlcm1zXCIsIFwicGF5bWVudFR5cGVcIiwgXCJyZXNlcnZhdGlvblwiXG5cdC8vIF1cblx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG5cdGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gMDtcblx0bmV4dCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/router.js\n");

/***/ }),

/***/ "./src/store/actions.js":
/*!******************************!*\
  !*** ./src/store/actions.js ***!
  \******************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// import request from '@/service'\n// export const banner = async (store, params) => {\n//   return await request.get('/api/v1/get_banner', { params: params })\n// }\n// export const categories = async (store, params) => {\n//   return await request.get('/japi/v1/categories', { params: params })\n// }\n// export const recommend = async (store, params) => {\n//   return await request.post('/wapi/v1/query', params)\n// }\n// export const entries = async (store, params) => {\n//   return await request.get('/tapi/v1/get_entry_by_rank', { params: params })\n// }\n// export const getListByLastTime = async (store, params) => {\n//   return await request.get('/xapi/v1/getListByLastTime', { params: params })\n// }\n// export const increment = ({\n// \tcommit\n// }) => {\n// \tcommit('INCREMENT')\n// }\n// export const pcorphone = ({\n// \tcommit\n// }) => {\n// \tcommit('PCORPHONE')\n// }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvYWN0aW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zdG9yZS9hY3Rpb25zLmpzPzYzZTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC9zZXJ2aWNlJ1xuXG4vLyBleHBvcnQgY29uc3QgYmFubmVyID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvYXBpL3YxL2dldF9iYW5uZXInLCB7IHBhcmFtczogcGFyYW1zIH0pXG4vLyB9XG5cbi8vIGV4cG9ydCBjb25zdCBjYXRlZ29yaWVzID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvamFwaS92MS9jYXRlZ29yaWVzJywgeyBwYXJhbXM6IHBhcmFtcyB9KVxuLy8gfVxuXG4vLyBleHBvcnQgY29uc3QgcmVjb21tZW5kID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QucG9zdCgnL3dhcGkvdjEvcXVlcnknLCBwYXJhbXMpXG4vLyB9XG5cbi8vIGV4cG9ydCBjb25zdCBlbnRyaWVzID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvdGFwaS92MS9nZXRfZW50cnlfYnlfcmFuaycsIHsgcGFyYW1zOiBwYXJhbXMgfSlcbi8vIH1cblxuLy8gZXhwb3J0IGNvbnN0IGdldExpc3RCeUxhc3RUaW1lID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcveGFwaS92MS9nZXRMaXN0QnlMYXN0VGltZScsIHsgcGFyYW1zOiBwYXJhbXMgfSlcbi8vIH1cblxuXG4vLyBleHBvcnQgY29uc3QgaW5jcmVtZW50ID0gKHtcbi8vIFx0Y29tbWl0XG4vLyB9KSA9PiB7XG4vLyBcdGNvbW1pdCgnSU5DUkVNRU5UJylcbi8vIH1cblxuLy8gZXhwb3J0IGNvbnN0IHBjb3JwaG9uZSA9ICh7XG4vLyBcdGNvbW1pdFxuLy8gfSkgPT4ge1xuLy8gXHRjb21taXQoJ1BDT1JQSE9ORScpXG4vLyB9XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/store/actions.js\n");

/***/ }),

/***/ "./src/store/index.js":
/*!****************************!*\
  !*** ./src/store/index.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ \"./src/store/state.js\");\n/* harmony import */ var _mutations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mutations */ \"./src/store/mutations.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions */ \"./src/store/actions.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_actions__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\nvar store = function store() {\n  return new vuex__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Store({\n    state: _state__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n    mutations: _mutations__WEBPACK_IMPORTED_MODULE_3__,\n    actions: _actions__WEBPACK_IMPORTED_MODULE_4__\n  });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (store);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvaW5kZXguanM/NDM2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnXG5pbXBvcnQgc3RhdGUgZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIG11dGF0aW9ucyBmcm9tICcuL211dGF0aW9ucydcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJ1xuXG5WdWUudXNlKFZ1ZXgpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gbmV3IFZ1ZXguU3RvcmUoe1xuICBzdGF0ZSxcbiAgbXV0YXRpb25zLFxuICBhY3Rpb25zXG59KVxuXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/store/index.js\n");

/***/ }),

/***/ "./src/store/mutations.js":
/*!********************************!*\
  !*** ./src/store/mutations.js ***!
  \********************************/
/*! exports provided: INCREMENT, IS_MOBILE, IS_SMALL_SCREEN, SET_USER_INFO */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INCREMENT\", function() { return INCREMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IS_MOBILE\", function() { return IS_MOBILE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IS_SMALL_SCREEN\", function() { return IS_SMALL_SCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_USER_INFO\", function() { return SET_USER_INFO; });\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ \"./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction INCREMENT(state) {\n  state.counter++;\n}\nfunction IS_MOBILE(state, bool) {\n  state.isMobile = bool;\n}\nfunction IS_SMALL_SCREEN(state, bool) {\n  state.isSmallScreen = bool;\n}\nfunction SET_USER_INFO(state, val) {\n  if (val) {\n    Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"setCookie\"])(\"_user_profile\", encodeURIComponent(JSON.stringify(val)), 7200);\n    state.userInfo = val;\n  } else {\n    Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"setCookie\"])(\"_user_profile\", \"\", 1);\n    state.userInfo = null;\n  }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvbXV0YXRpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3N0b3JlL211dGF0aW9ucy5qcz8wNDM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldENvb2tpZSwgZ2V0Q29va2llIH0gZnJvbSAnQC91dGlscy91dGlscy5qcydcbmltcG9ydCB7IHN0YXQgfSBmcm9tICdmcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJTkNSRU1FTlQoc3RhdGUpIHtcblx0c3RhdGUuY291bnRlcisrXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJU19NT0JJTEUoc3RhdGUsIGJvb2wpIHtcblx0c3RhdGUuaXNNb2JpbGUgPSBib29sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJU19TTUFMTF9TQ1JFRU4oc3RhdGUsIGJvb2wpIHtcblx0c3RhdGUuaXNTbWFsbFNjcmVlbiA9IGJvb2xcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNFVF9VU0VSX0lORk8oc3RhdGUsIHZhbCkge1xuXHRpZiAodmFsKSB7XG5cdFx0c2V0Q29va2llKFwiX3VzZXJfcHJvZmlsZVwiLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodmFsKSksIDcyMDApO1xuXHRcdHN0YXRlLnVzZXJJbmZvID0gdmFsO1xuXHR9IGVsc2Uge1xuXHRcdHNldENvb2tpZShcIl91c2VyX3Byb2ZpbGVcIiwgXCJcIiwgMSk7XG5cdFx0c3RhdGUudXNlckluZm8gPSBudWxsO1xuXHR9XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/store/mutations.js\n");

/***/ }),

/***/ "./src/store/state.js":
/*!****************************!*\
  !*** ./src/store/state.js ***!
  \****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n  counter: 2,\n  // 例子\n  isMobile: false,\n  //是否手机访问\n  isSmallScreen: false,\n  // 是否小屏幕 (PC时,小屏幕机导航栏会改变))\n  userInfo: {\n    sid: \"\",\n    name: \"\",\n    hadFullInfo: \"\"\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvc3RhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvc3RhdGUuanM/ZmNjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG5cdGNvdW50ZXI6IDIsIC8vIOS+i+WtkFxuXHRpc01vYmlsZTogZmFsc2UsIC8v5piv5ZCm5omL5py66K6/6ZeuXG5cdGlzU21hbGxTY3JlZW46IGZhbHNlLCAvLyDmmK/lkKblsI/lsY/luZUgKFBD5pe277yM5bCP5bGP5bmV5py65a+86Iiq5qCP5Lya5pS55Y+YKSlcblxuXHR1c2VySW5mbyA6IHtcblx0XHRzaWQgOiBcIlwiLFxuXHRcdG5hbWUgOiBcIlwiLFxuXHRcdGhhZEZ1bGxJbmZvOiBcIlwiXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/store/state.js\n");

/***/ }),

/***/ "./src/utils/utils.js":
/*!****************************!*\
  !*** ./src/utils/utils.js ***!
  \****************************/
/*! exports provided: REGEXPS, checkMobile, param2Obj, getCookie, setCookie, delCookie, getEnv, setTitle, addQuery, getPath, getQuery, getObjByListKeyValue, formatBr, debounce, throttle */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REGEXPS\", function() { return REGEXPS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkMobile\", function() { return checkMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"param2Obj\", function() { return param2Obj; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCookie\", function() { return getCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setCookie\", function() { return setCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"delCookie\", function() { return delCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEnv\", function() { return getEnv; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setTitle\", function() { return setTitle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addQuery\", function() { return addQuery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPath\", function() { return getPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getQuery\", function() { return getQuery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getObjByListKeyValue\", function() { return getObjByListKeyValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatBr\", function() { return formatBr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"debounce\", function() { return debounce; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"throttle\", function() { return throttle; });\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.regexp.match */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js\");\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es6.regexp.constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js\");\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es6.regexp.replace */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es6.regexp.split */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js\");\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n// 正在表达式\nvar REGEXPS = {\n  \"mobile\": /^1\\d{10}$/\n}; // 验证手机\n\nfunction checkMobile(str) {\n  return REGEXPS.mobile.test(str);\n}\n/**\n * 链接参数转换为obj\n * 入参 完整链接\n * @param {*} url\n */\n\nfunction param2Obj(url) {\n  var search = url.split('?')[1];\n\n  if (!search) {\n    return {};\n  }\n\n  return JSON.parse('{\"' + decodeURIComponent(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}');\n} //获取cookie、\n\nfunction getCookie(name) {\n  var arr,\n      reg = new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\");\n  if (arr = document.cookie.match(reg)) return arr[2];else return null;\n} //设置cookie\n\nfunction setCookie(c_name, value, second) {\n  var exdate = new Date();\n  exdate.setTime(exdate.getTime() + second * 1000);\n  document.cookie = c_name + \"=\" + escape(value) + (second == null ? \"\" : \";expires=\" + exdate.toGMTString());\n}\n; //删除cookie\n\nfunction delCookie(name) {\n  var exp = new Date();\n  exp.setTime(exp.getTime() - 1);\n  var cval = getCookie(name);\n  if (cval != null) document.cookie = name + \"=\" + cval + \";expires=\" + exp.toGMTString();\n}\n;\n/**\n * 获取环境信息\n * @return {Object} 环境信息对象\n */\n\nfunction getEnv() {\n  var nav = window.navigator;\n  var env = {\n    \"iphone\": false,\n    \"ipad\": false,\n    \"android\": false,\n    \"pc\": false,\n    \"ios\": false,\n    \"ver\": \"0\"\n  };\n  var ua = nav.userAgent;\n  var android = ua.match(/(Android)\\s+([\\d.]+)/);\n  var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\n  if (ipad) {\n    env.ipad = ipad[1] && true || false;\n    env.ver = ipad[2] && ipad[2].replace(/-/g, \".\") || \"\";\n    env.ios = true;\n  } else if (iphone) {\n    env.iphone = iphone[1] && true || false;\n    env.ver = iphone[2] && iphone[2].replace(/-/g, \".\") || \"\";\n    env.ios = true;\n  } else if (android) {\n    env.android = android[1] && true || false;\n    env.ver = android[2];\n  } else {\n    env.pc = true;\n  }\n\n  return env;\n}\n/**\n * 设定页面 title\n * @param {[type]} title [description]\n */\n\nfunction setTitle(title) {\n  if (!title) {\n    return;\n  }\n\n  document.title = title; // if (ENV.ios && navigator.userAgent.toLowerCase().indexOf(\"micromessenger\") !== -1) {\n  // 修复微信端IOS无法修改document.title的情况\n\n  if (getEnv().ios && (navigator.userAgent.toLowerCase().indexOf(\"micromessenger\") !== -1 || navigator.userAgent.toLowerCase().indexOf(\"alipay\") !== -1)) {\n    //修复IOS微信端和支付宝无法修改document.title的情况\n    var $iframe = document.createElement('iframe');\n    $iframe.className = \"C-hiddenIframe\";\n    $iframe.src = \"/\" + location.pathname.split('/')[1] + \"/favicon.ico\";\n    $iframe.style.visibility = 'hidden';\n    $iframe.style.width = '1px';\n    $iframe.style.height = '1px';\n\n    $iframe.onload = function onIframeLoad() {\n      setTimeout(function () {\n        $iframe.onload = null;\n        onIframeLoad = null;\n        document.body.removeChild($iframe);\n        $iframe = null;\n      }, 0);\n    };\n\n    document.body.appendChild($iframe);\n  }\n} // 为链接添加参数\n\nfunction addQuery(url, query) {\n  query = query || {};\n\n  query = function (query) {\n    var q = [];\n    Object.keys(query).forEach(function (_q) {\n      q.push(_q + '=' + query[_q]);\n    });\n    return q.join('&');\n  }(query);\n\n  if (url.indexOf('?') !== -1) {\n    url += '&' + query;\n  } else {\n    url += '?' + query;\n  }\n\n  return url;\n}\n/**\n * 获得当前页面的path\n * @return {String} 页面path\n */\n\nfunction getPath() {\n  var path = window.location.hash;\n  path = path || \"#/\";\n  path = path === \"#/\" ? \"#/index\" : path;\n  path = path.split(\"?\");\n  return path[0];\n} // 获取 url 参数\n\nfunction getQuery(name) {\n  return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, \"\"])[1].replace(/\\+/g, '%20')) || null;\n}\n/**\n * 从数组中获取 key未value的对象\n * @param {*} value\n * @param {*} key\n * @param {*} list\n */\n\nfunction getObjByListKeyValue(value, key, list) {\n  var result = null;\n  list.forEach(function (element) {\n    if (element[key + \"\"] == value) {\n      result = element;\n    }\n  });\n  return result;\n}\n/**\n * 把 \\n换行符转换成<br>\n * 转换后需要用 v-html渲染\n * 用{{}}会当成字符串把 html渲染出来\n */\n\nfunction formatBr(str) {\n  str = str.replace(/\\n/g, '<br/>');\n  return str;\n}\n;\n/**\n * @desc 函数防抖\n * @param func 函数\n * @param wait 延迟执行毫秒数\n * @param immediate true 表立即执行,false 表非立即执行\n */\n\nfunction debounce(func, wait, immediate) {\n  var timeout;\n  return function () {\n    var context = this;\n    var args = arguments;\n    if (timeout) clearTimeout(timeout);\n\n    if (immediate) {\n      var callNow = !timeout;\n      timeout = setTimeout(function () {\n        timeout = null;\n      }, wait);\n      if (callNow) func.apply(context, args);\n    } else {\n      timeout = setTimeout(function () {\n        func.apply(context, args);\n      }, wait);\n    }\n  };\n}\n/**\n * @desc 函数节流\n * @param func 函数\n * @param wait 延迟执行毫秒数\n * @param type 1 表时间戳版,2 表定时器版\n * 时间戳版的函数触发是在时间段内开始的时候,而定时器版的函数触发是在时间段内结束的时候。\n */\n\nfunction throttle(func, wait, type) {\n  if (type === 1) {\n    var previous = 0;\n  } else if (type === 2) {\n    var timeout;\n  }\n\n  return function () {\n    var context = this;\n    var args = arguments;\n\n    if (type === 1) {\n      var now = Date.now();\n\n      if (now - previous > wait) {\n        func.apply(context, args);\n        previous = now;\n      }\n    } else if (type === 2) {\n      if (!timeout) {\n        timeout = setTimeout(function () {\n          timeout = null;\n          func.apply(context, args);\n        }, wait);\n      }\n    }\n  };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbHMvdXRpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvdXRpbHMuanM/ZmE3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyDmraPlnKjooajovr7lvI9cbmV4cG9ydCBjb25zdCBSRUdFWFBTID0ge1xuICBcIm1vYmlsZVwiOiAvXjFcXGR7MTB9JC9cbn1cblxuLy8g6aqM6K+B5omL5py6XG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNb2JpbGUoc3RyKSB7XG4gIHJldHVybiBSRUdFWFBTLm1vYmlsZS50ZXN0KHN0cik7XG59XG5cbi8qKlxuICog6ZO+5o6l5Y+C5pWw6L2s5o2i5Li6b2JqXG4gKiDlhaXlj4Ig5a6M5pW06ZO+5o6lXG4gKiBAcGFyYW0geyp9IHVybFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyYW0yT2JqKHVybCkge1xuICBjb25zdCBzZWFyY2ggPSB1cmwuc3BsaXQoJz8nKVsxXVxuICBpZiAoIXNlYXJjaCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgICd7XCInICtcbiAgICBkZWNvZGVVUklDb21wb25lbnQoc2VhcmNoKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgLnJlcGxhY2UoLyYvZywgJ1wiLFwiJylcbiAgICAgIC5yZXBsYWNlKC89L2csICdcIjpcIicpICtcbiAgICAnXCJ9J1xuICApXG59XG5cblxuXG4vL+iOt+WPlmNvb2tpZeOAgVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gIHZhciBhcnIsIHJlZyA9IG5ldyBSZWdFeHAoXCIoXnwgKVwiICsgbmFtZSArIFwiPShbXjtdKikoO3wkKVwiKTtcbiAgaWYgKGFyciA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChyZWcpKVxuICAgIHJldHVybiAoYXJyWzJdKTtcbiAgZWxzZVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vL+iuvue9rmNvb2tpZVxuZXhwb3J0IGZ1bmN0aW9uIHNldENvb2tpZShjX25hbWUsIHZhbHVlLCBzZWNvbmQpIHtcbiAgdmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGV4ZGF0ZS5zZXRUaW1lKGV4ZGF0ZS5nZXRUaW1lKCkgKyBzZWNvbmQgKiAxMDAwKTtcbiAgZG9jdW1lbnQuY29va2llID0gY19uYW1lICsgXCI9XCIgKyBlc2NhcGUodmFsdWUpICsgKChzZWNvbmQgPT0gbnVsbCkgPyBcIlwiIDogXCI7ZXhwaXJlcz1cIiArIGV4ZGF0ZS50b0dNVFN0cmluZygpKTtcbn07XG5cbi8v5Yig6ZmkY29va2llXG5leHBvcnQgZnVuY3Rpb24gZGVsQ29va2llKG5hbWUpIHtcbiAgdmFyIGV4cCA9IG5ldyBEYXRlKCk7XG4gIGV4cC5zZXRUaW1lKGV4cC5nZXRUaW1lKCkgLSAxKTtcbiAgdmFyIGN2YWwgPSBnZXRDb29raWUobmFtZSk7XG4gIGlmIChjdmFsICE9IG51bGwpXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgY3ZhbCArIFwiO2V4cGlyZXM9XCIgKyBleHAudG9HTVRTdHJpbmcoKTtcbn07XG5cblxuLyoqXG4gKiDojrflj5bnjq/looPkv6Hmga9cbiAqIEByZXR1cm4ge09iamVjdH0g546v5aKD5L+h5oGv5a+56LGhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoKSB7XG4gIHZhciBuYXYgPSB3aW5kb3cubmF2aWdhdG9yO1xuICB2YXIgZW52ID0ge1xuICAgIFwiaXBob25lXCI6IGZhbHNlLFxuICAgIFwiaXBhZFwiOiBmYWxzZSxcbiAgICBcImFuZHJvaWRcIjogZmFsc2UsXG4gICAgXCJwY1wiOiBmYWxzZSxcbiAgICBcImlvc1wiOiBmYWxzZSxcbiAgICBcInZlclwiOiBcIjBcIlxuICB9O1xuXG4gIHZhciB1YSA9IG5hdi51c2VyQWdlbnQ7XG4gIHZhciBhbmRyb2lkID0gdWEubWF0Y2goLyhBbmRyb2lkKVxccysoW1xcZC5dKykvKTtcbiAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPUylcXHMoW1xcZF9dKykvKTtcbiAgaWYgKGlwYWQpIHtcbiAgICBlbnYuaXBhZCA9IGlwYWRbMV0gJiYgdHJ1ZSB8fCBmYWxzZTtcbiAgICBlbnYudmVyID0gaXBhZFsyXSAmJiBpcGFkWzJdLnJlcGxhY2UoLy0vZywgXCIuXCIpIHx8IFwiXCI7XG4gICAgZW52LmlvcyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoaXBob25lKSB7XG4gICAgZW52LmlwaG9uZSA9IGlwaG9uZVsxXSAmJiB0cnVlIHx8IGZhbHNlO1xuICAgIGVudi52ZXIgPSBpcGhvbmVbMl0gJiYgaXBob25lWzJdLnJlcGxhY2UoLy0vZywgXCIuXCIpIHx8IFwiXCI7XG4gICAgZW52LmlvcyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYW5kcm9pZCkge1xuICAgIGVudi5hbmRyb2lkID0gYW5kcm9pZFsxXSAmJiB0cnVlIHx8IGZhbHNlO1xuICAgIGVudi52ZXIgPSBhbmRyb2lkWzJdO1xuICB9IGVsc2Uge1xuICAgIGVudi5wYyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZW52O1xufVxuXG4vKipcbiAqIOiuvuWumumhtemdoiB0aXRsZVxuICogQHBhcmFtIHtbdHlwZV19IHRpdGxlIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRpdGxlKHRpdGxlKSB7XG4gIGlmICghdGl0bGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgLy8gaWYgKEVOVi5pb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJtaWNyb21lc3NlbmdlclwiKSAhPT0gLTEpIHtcbiAgLy8g5L+u5aSN5b6u5L+h56uvSU9T5peg5rOV5L+u5pS5ZG9jdW1lbnQudGl0bGXnmoTmg4XlhrVcbiAgaWYgKGdldEVudigpLmlvcyAmJiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJtaWNyb21lc3NlbmdlclwiKSAhPT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJhbGlwYXlcIikgIT09IC0xKSkge1xuICAgIC8v5L+u5aSNSU9T5b6u5L+h56uv5ZKM5pSv5LuY5a6d5peg5rOV5L+u5pS5ZG9jdW1lbnQudGl0bGXnmoTmg4XlhrVcbiAgICB2YXIgJGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICRpZnJhbWUuY2xhc3NOYW1lID0gXCJDLWhpZGRlbklmcmFtZVwiO1xuICAgICRpZnJhbWUuc3JjID0gXCIvXCIgKyBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpWzFdICsgXCIvZmF2aWNvbi5pY29cIjtcbiAgICAkaWZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAkaWZyYW1lLnN0eWxlLndpZHRoID0gJzFweCc7XG4gICAgJGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMXB4JztcbiAgICAkaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAkaWZyYW1lLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIG9uSWZyYW1lTG9hZCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoJGlmcmFtZSk7XG4gICAgICAgICRpZnJhbWUgPSBudWxsO1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCRpZnJhbWUpO1xuICB9XG59XG5cbi8vIOS4uumTvuaOpea3u+WKoOWPguaVsFxuZXhwb3J0IGZ1bmN0aW9uIGFkZFF1ZXJ5KHVybCwgcXVlcnkpIHtcbiAgcXVlcnkgPSBxdWVyeSB8fCB7fVxuICBxdWVyeSA9IChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICB2YXIgcSA9IFtdXG4gICAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKF9xKSB7XG4gICAgICBxLnB1c2goX3EgKyAnPScgKyBxdWVyeVtfcV0pXG4gICAgfSlcbiAgICByZXR1cm4gcS5qb2luKCcmJylcbiAgfSkocXVlcnkpXG4gIGlmICh1cmwuaW5kZXhPZignPycpICE9PSAtMSkge1xuICAgIHVybCArPSAnJicgKyBxdWVyeVxuICB9IGVsc2Uge1xuICAgIHVybCArPSAnPycgKyBxdWVyeVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuXG4vKipcbiAqIOiOt+W+l+W9k+WJjemhtemdoueahHBhdGhcbiAqIEByZXR1cm4ge1N0cmluZ30g6aG16Z2icGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCgpIHtcbiAgdmFyIHBhdGggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgcGF0aCA9IHBhdGggfHwgXCIjL1wiO1xuICBwYXRoID0gcGF0aCA9PT0gXCIjL1wiID8gXCIjL2luZGV4XCIgOiBwYXRoO1xuICBwYXRoID0gcGF0aC5zcGxpdChcIj9cIik7XG4gIHJldHVybiBwYXRoWzBdO1xufVxuXG4vLyDojrflj5YgdXJsIOWPguaVsFxuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5KG5hbWUpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgobmV3IFJlZ0V4cCgnWz98Jl0nICsgbmFtZSArICc9JyArICcoW14mO10rPykoJnwjfDt8JCknKS5leGVjKGxvY2F0aW9uLmhyZWYpIHx8IFssIFwiXCJdKVsxXS5yZXBsYWNlKC9cXCsvZywgJyUyMCcpKSB8fCBudWxsO1xufVxuXG4vKipcbiAqIOS7juaVsOe7hOS4reiOt+WPliBrZXnmnKp2YWx1ZeeahOWvueixoVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqQnlMaXN0S2V5VmFsdWUodmFsdWUsIGtleSwgbGlzdCkge1xuICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgbGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50W2tleSArIFwiXCJdID09IHZhbHVlKSB7XG4gICAgICByZXN1bHQgPSBlbGVtZW50O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICog5oqKIFxcbuaNouihjOespui9rOaNouaIkDxicj5cbiAqIOi9rOaNouWQjumcgOimgeeUqCB2LWh0bWzmuLLmn5NcbiAqIOeUqHt7fX3kvJrlvZPmiJDlrZfnrKbkuLLmioogaHRtbOa4suafk+WHuuadpVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnIoc3RyKSB7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXG4vZywgJzxici8+JylcbiAgcmV0dXJuIHN0clxufTtcblxuXG4vKipcbiAqIEBkZXNjIOWHveaVsOmYsuaKllxuICogQHBhcmFtIGZ1bmMg5Ye95pWwXG4gKiBAcGFyYW0gd2FpdCDlu7bov5/miafooYzmr6vnp5LmlbBcbiAqIEBwYXJhbSBpbW1lZGlhdGUgdHJ1ZSDooajnq4vljbPmiafooYzvvIxmYWxzZSDooajpnZ7nq4vljbPmiafooYxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICBsZXQgdGltZW91dDtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgdmFyIGNhbGxOb3cgPSAhdGltZW91dDtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9LCB3YWl0KVxuICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9LCB3YWl0KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzYyDlh73mlbDoioLmtYFcbiAqIEBwYXJhbSBmdW5jIOWHveaVsFxuICogQHBhcmFtIHdhaXQg5bu26L+f5omn6KGM5q+r56eS5pWwXG4gKiBAcGFyYW0gdHlwZSAxIOihqOaXtumXtOaIs+eJiO+8jDIg6KGo5a6a5pe25Zmo54mIXG4gKiDml7bpl7TmiLPniYjnmoTlh73mlbDop6blj5HmmK/lnKjml7bpl7TmrrXlhoXlvIDlp4vnmoTml7blgJnvvIzogIzlrprml7blmajniYjnmoTlh73mlbDop6blj5HmmK/lnKjml7bpl7TmrrXlhoXnu5PmnZ/nmoTml7blgJnjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IDIpIHtcbiAgICB2YXIgdGltZW91dDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcbiAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGlmIChub3cgLSBwcmV2aW91cyA+IHdhaXQpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAyKSB7XG4gICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICAgICAgfSwgd2FpdClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTs7Ozs7OztBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/utils/utils.js\n");

/***/ }),

/***/ 0:
/*!***************************!*\
  !*** multi ./src/main.js ***!
  \***************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! ./src/main.js */"./src/main.js");


/***/ })

/******/ });